/ Hex Artifact Content
Login

Artifact ba610d80822135ffbc92ac90710939e548c6a850:


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 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 61 72 79 20 69 73 20 6d 75 6c 74  e libary is mult
1050: 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74  ithreaded - mult
1060: 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20  iple.** threads 
1070: 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61  can use SQLite a
1080: 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f  s long as no two
1090: 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20   threads try to 
10a0: 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  use the same.** 
10b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10c0: 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20  ion at the same 
10d0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65  time..**.** Olde
10e0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
10f0: 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74  Lite used an opt
1100: 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45  ional THREADSAFE
1110: 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75   macro..** We su
1120: 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c  pport that for l
1130: 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64  egacy..*/.#if !d
1140: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48  efined(SQLITE_TH
1150: 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64  READSAFE).# if d
1160: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1170: 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  E).#   define SQ
1180: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1190: 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73  THREADSAFE.# els
11a0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
11b0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31  ITE_THREADSAFE 1
11c0: 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32   /* IMP: R-07272
11d0: 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69  -22309 */.# endi
11e0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
11f0: 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72  Powersafe overwr
1200: 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66  ite is on by def
1210: 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62  ault.  But can b
1220: 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69  e turned off usi
1230: 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49  ng.** the -DSQLI
1240: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
1250: 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64  RWRITE=0 command
1260: 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  -line option..*/
1270: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1280: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1290: 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ITE.# define SQL
12a0: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
12b0: 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66  ERWRITE 1.#endif
12c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
12d0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54  TE_DEFAULT_MEMST
12e0: 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74 20  ATUS macro must 
12f0: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65 69  be defined as ei
1300: 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 20  ther 0 or 1..** 
1310: 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  It determines wh
1320: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1330: 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74 65   features relate
1340: 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45 5f  d to .** SQLITE_
1350: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
1360: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62   are available b
1370: 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f 74  y default or not
1380: 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  . This value can
1390: 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64 65  .** be overridde
13a0: 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  n at runtime usi
13b0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ng the sqlite3_c
13c0: 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f 0a  onfig() API..*/.
13d0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
13e0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
13f0: 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20  TATUS).# define 
1400: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
1410: 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69  EMSTATUS 1.#endi
1420: 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79  f../*.** Exactly
1430: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1440: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73  owing macros mus
1450: 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20  t be defined in 
1460: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63  order to.** spec
1470: 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79  ify which memory
1480: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73   allocation subs
1490: 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a  ystem to use..**
14a0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53  .**     SQLITE_S
14b0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20  YSTEM_MALLOC    
14c0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72        // Use nor
14d0: 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f  mal system mallo
14e0: 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  c().**     SQLIT
14f0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20  E_WIN32_MALLOC  
1500: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
1510: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
1520: 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c  p API.**     SQL
1530: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20  ITE_ZERO_MALLOC 
1540: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73             // Us
1550: 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61 74  e a stub allocat
1560: 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20 66  or that always f
1570: 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49  ails.**     SQLI
1580: 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20  TE_MEMDEBUG     
1590: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62            // Deb
15a0: 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f  ugging version o
15b0: 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28  f system malloc(
15c0: 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f  ).**.** On Windo
15d0: 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49 54  ws, if the SQLIT
15e0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56  E_WIN32_MALLOC_V
15f0: 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69 73  ALIDATE macro is
1600: 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68 65   defined and the
1610: 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61 63  .** assert() mac
1620: 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 65  ro is enabled, e
1630: 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  ach call into th
1640: 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68  e Win32 native h
1650: 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a  eap subsystem.**
1660: 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61 70   will cause Heap
1670: 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20 63  Validate to be c
1680: 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70 20  alled.  If heap 
1690: 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c  validation shoul
16a0: 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73  d fail, an.** as
16b0: 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  sertion will be 
16c0: 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  triggered..**.**
16d0: 20 28 48 69 73 74 6f 72 69 63 61 6c 20 6e 6f 74   (Historical not
16e0: 65 3a 20 20 54 68 65 72 65 20 75 73 65 64 20 74  e:  There used t
16f0: 6f 20 62 65 20 73 65 76 65 72 61 6c 20 6f 74 68  o be several oth
1700: 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62 75 74 20  er options, but 
1710: 77 65 27 76 65 0a 2a 2a 20 70 61 72 65 64 20 69  we've.** pared i
1720: 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73 74 20 74  t down to just t
1730: 68 65 73 65 20 74 68 72 65 65 2e 29 0a 2a 2a 0a  hese three.).**.
1740: 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ** If none of th
1750: 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69  e above are defi
1760: 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51  ned, then set SQ
1770: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
1780: 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66  OC as.** the def
1790: 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ault..*/.#if def
17a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
17b0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
17c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
17d0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
17e0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
17f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
1800: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1810: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31  LITE_MEMDEBUG)>1
1820: 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72  .# error "Two or
1830: 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c   more of the fol
1840: 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74  lowing compile-t
1850: 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ime configuratio
1860: 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20  n options\. are 
1870: 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d  defined but at m
1880: 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77  ost one is allow
1890: 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53  ed:\. SQLITE_SYS
18a0: 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  TEM_MALLOC, SQLI
18b0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c  TE_WIN32_MALLOC,
18c0: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
18d0: 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ,\. SQLITE_ZERO_
18e0: 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23  MALLOC".#endif.#
18f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1900: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29  E_SYSTEM_MALLOC)
1910: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
1920: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
1930: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
1940: 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41  d(SQLITE_ZERO_MA
1950: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
1960: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45  ned(SQLITE_MEMDE
1970: 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65  BUG)==0.# define
1980: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1990: 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a  ALLOC 1.#endif..
19a0: 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  /*.** If SQLITE_
19b0: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
19c0: 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  T is not zero, t
19d0: 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20  hen try to keep 
19e0: 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20  the.** sizes of 
19f0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1a00: 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61  ns below this va
1a10: 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62  lue where possib
1a20: 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  le..*/.#if !defi
1a30: 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f  ned(SQLITE_MALLO
1a40: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20  C_SOFT_LIMIT).# 
1a50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
1a60: 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20  LLOC_SOFT_LIMIT 
1a70: 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1024.#endif../*.
1a80: 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  ** We need to de
1a90: 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52  fine _XOPEN_SOUR
1aa0: 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e  CE as follows in
1ab0: 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65   order to enable
1ac0: 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75  .** recursive mu
1ad0: 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e  texes on most Un
1ae0: 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66  ix systems and f
1af0: 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42  chmod() on OpenB
1b00: 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45  SD..** But _XOPE
1b10: 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20  N_SOURCE define 
1b20: 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20  causes problems 
1b30: 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f  for Mac OS X, so
1b40: 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a   omit.** it..*/.
1b50: 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f  #if !defined(_XO
1b60: 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21  PEN_SOURCE) && !
1b70: 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e  defined(__DARWIN
1b80: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
1b90: 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65  __APPLE__).#  de
1ba0: 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52  fine _XOPEN_SOUR
1bb0: 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f  CE 600.#endif../
1bc0: 2a 0a 2a 2a 20 54 68 65 20 54 43 4c 20 68 65 61  *.** The TCL hea
1bd0: 64 65 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e 65  ders are only ne
1be0: 65 64 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c  eded when compil
1bf0: 69 6e 67 20 74 68 65 20 54 43 4c 20 62 69 6e 64  ing the TCL bind
1c00: 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ings..*/.#if def
1c10: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 43 4c 29  ined(SQLITE_TCL)
1c20: 20 7c 7c 20 64 65 66 69 6e 65 64 28 54 43 4c 53   || defined(TCLS
1c30: 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74 63  H).# include <tc
1c40: 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l.h>.#endif../*.
1c50: 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51  ** NDEBUG and SQ
1c60: 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f  LITE_DEBUG are o
1c70: 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68  pposites.  It sh
1c80: 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74  ould always be t
1c90: 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  rue that.** defi
1ca0: 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65  ned(NDEBUG)==!de
1cb0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
1cc0: 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69 73  UG).  If this is
1cd0: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74   not currently t
1ce0: 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  rue,.** make it 
1cf0: 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67  true by defining
1d00: 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e   or undefining N
1d10: 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74  DEBUG..**.** Set
1d20: 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65  ting NDEBUG make
1d30: 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c  s the code small
1d40: 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74 65  er and run faste
1d50: 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74  r by disabling t
1d60: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73 73  he.** number ass
1d70: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
1d80: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
1d90: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
1da0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
1db0: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
1dc0: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
1dd0: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
1de0: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
1df0: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
1e00: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
1e10: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
1e20: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
1e30: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
1e40: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
1e50: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
1e60: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1e70: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
1e80: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
1e90: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
1ea0: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
1eb0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
1ec0: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
1ed0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1ee0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
1ef0: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
1f00: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
1f10: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
1f20: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
1f30: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
1f40: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
1f50: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
1f60: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
1f70: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
1f80: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
1f90: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1fa0: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
1fb0: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
1fc0: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
1fd0: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
1fe0: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
1ff0: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
2000: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
2010: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
2020: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2030: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2040: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
2050: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
2060: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
2070: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
2080: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
2090: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
20a0: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
20b0: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
20c0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
20d0: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
20e0: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
20f0: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
2100: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
2110: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
2120: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2130: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2140: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
2150: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
2160: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
2170: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
2180: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
2190: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
21a0: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
21b0: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
21c0: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
21d0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
21e0: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
21f0: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
2200: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
2210: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
2220: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2230: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2240: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2250: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2260: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2270: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2280: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2290: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
22a0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
22b0: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
22c0: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
22d0: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
22e0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
22f0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2300: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
2310: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
2320: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2330: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2340: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2350: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2360: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2370: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2380: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2390: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
23a0: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
23b0: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
23c0: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
23d0: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
23e0: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
23f0: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
2400: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
2410: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
2420: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2430: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2440: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2450: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2460: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2470: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2480: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2490: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
24a0: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
24b0: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
24c0: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
24d0: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
24e0: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
24f0: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
2500: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
2510: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
2520: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2530: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2540: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2550: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
2560: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
2570: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2580: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2590: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
25a0: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
25b0: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
25c0: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
25d0: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
25e0: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
25f0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
2600: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
2610: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
2620: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
2630: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
2640: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
2650: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
2660: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
2670: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2680: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2690: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
26a0: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
26b0: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
26c0: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
26d0: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
26e0: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
26f0: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
2700: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
2710: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
2720: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
2730: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
2740: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
2750: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
2760: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
2770: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2780: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2790: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
27a0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
27b0: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
27c0: 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  en specify will.
27d0: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
27e0: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
27f0: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
2800: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
2810: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
2820: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2830: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
2840: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
2850: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
2860: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
2870: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2880: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
2890: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
28a0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
28b0: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
28c0: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
28d0: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
28e0: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
28f0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
2900: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
2910: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
2920: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
2930: 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65 72  put is a integer
2940: 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72   that is too lar
2950: 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20  ge.** to fit in 
2960: 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d  32-bits.  This m
2970: 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
2980: 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74  ide of various t
2990: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63  estcase().** mac
29a0: 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  ros to verify th
29b0: 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65  at we have teste
29c0: 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72  d SQLite for lar
29d0: 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e  ge-file support.
29e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42  .*/.#define IS_B
29f0: 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29  IG_INT(X)  (((X)
2a00: 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66  &~(i64)0xfffffff
2a10: 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  f)!=0)../*.** Th
2a20: 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79  e macro unlikely
2a30: 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61  () is a hint tha
2a40: 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f  t surrounds a bo
2a50: 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  olean.** express
2a60: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
2a70: 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72  lly false.  Macr
2a80: 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f  o likely() surro
2a90: 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61  unds.** a boolea
2aa0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  n expression tha
2ab0: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75  t is usually tru
2ac0: 65 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65 20  e.  GCC is able 
2ad0: 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65 20  to.** use these 
2ae0: 68 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61 74  hints to generat
2af0: 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20 73  e better code, s
2b00: 6f 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69 66  ometimes..*/.#if
2b10: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f   defined(__GNUC_
2b20: 5f 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e 65  _) && 0.# define
2b30: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f 5f   likely(X)    __
2b40: 62 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28  builtin_expect((
2b50: 58 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20 75  X),1).# define u
2b60: 6e 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62 75  nlikely(X)  __bu
2b70: 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29  iltin_expect((X)
2b80: 2c 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,0).#else.# defi
2b90: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
2ba0: 21 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20 75  !!(X).# define u
2bb0: 6e 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28 58  nlikely(X)  !!(X
2bc0: 29 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ).#endif..#inclu
2bd0: 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23  de "sqlite3.h".#
2be0: 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22  include "hash.h"
2bf0: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65  .#include "parse
2c00: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h".#include <st
2c10: 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  dio.h>.#include 
2c20: 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c  <stdlib.h>.#incl
2c30: 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23  ude <string.h>.#
2c40: 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e  include <assert.
2c50: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
2c60: 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66  def.h>../*.** If
2c70: 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61   compiling for a
2c80: 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20   processor that 
2c90: 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70  lacks floating p
2ca0: 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a  oint support,.**
2cb0: 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74 65   substitute inte
2cc0: 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67  ger for floating
2cd0: 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66  -point.*/.#ifdef
2ce0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
2cf0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65  ATING_POINT.# de
2d00: 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69  fine double sqli
2d10: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
2d20: 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69  e float sqlite_i
2d30: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f  nt64.# define LO
2d40: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71  NGDOUBLE_TYPE sq
2d50: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e  lite_int64.# ifn
2d60: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
2d70: 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  BL.#   define SQ
2d80: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28  LITE_BIG_DBL (((
2d90: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29  sqlite3_int64)1)
2da0: 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20  <<50).# endif.# 
2db0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
2dc0: 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43  IT_DATETIME_FUNC
2dd0: 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S 1.# define SQL
2de0: 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31  ITE_OMIT_TRACE 1
2df0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
2e00: 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42  MIXED_ENDIAN_64B
2e10: 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66  IT_FLOAT.# undef
2e20: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e   SQLITE_HAVE_ISN
2e30: 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  AN.#endif.#ifnde
2e40: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
2e50: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2e60: 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a  _BIG_DBL (1e99).
2e70: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d  #endif../*.** OM
2e80: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74  IT_TEMPDB is set
2e90: 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f   to 1 if SQLITE_
2ea0: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64  OMIT_TEMPDB is d
2eb0: 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20  efined, or 0.** 
2ec0: 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e  afterward. Havin
2ed0: 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c  g this macro all
2ee0: 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65 20  ows us to cause 
2ef0: 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a  the C compiler .
2f00: 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20  ** to omit code 
2f10: 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61 62  used by TEMP tab
2f20: 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73  les without mess
2f30: 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d  y #ifndef statem
2f40: 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ents..*/.#ifdef 
2f50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
2f60: 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f  DB.#define OMIT_
2f70: 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23  TEMPDB 1.#else.#
2f80: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
2f90: 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  DB 0.#endif../*.
2fa0: 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72  ** The "file for
2fb0: 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61  mat" number is a
2fc0: 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  n integer that i
2fd0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68  s incremented wh
2fe0: 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44  enever.** the VD
2ff0: 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f  BE-level file fo
3000: 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54  rmat changes.  T
3010: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
3020: 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a  ros define the.*
3030: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69  * the default fi
3040: 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65  le format for ne
3050: 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20  w databases and 
3060: 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65  the maximum file
3070: 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20   format.** that 
3080: 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20  the library can 
3090: 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  read..*/.#define
30a0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45   SQLITE_MAX_FILE
30b0: 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65  _FORMAT 4.#ifnde
30c0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
30d0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64  _FILE_FORMAT.# d
30e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
30f0: 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  AULT_FILE_FORMAT
3100: 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   4.#endif../*.**
3110: 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
3120: 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65 20  er triggers are 
3130: 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65 66  recursive by def
3140: 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20  ault.  This can 
3150: 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74  be.** changed at
3160: 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20   run-time using 
3170: 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66  a pragma..*/.#if
3180: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
3190: 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52  ULT_RECURSIVE_TR
31a0: 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20  IGGERS.# define 
31b0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
31c0: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
31d0: 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 0.#endif../*.*
31e0: 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66 61  * Provide a defa
31f0: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51  ult value for SQ
3200: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20  LITE_TEMP_STORE 
3210: 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f  in case it is no
3220: 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f  t specified.** o
3230: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  n the command-li
3240: 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ne.*/.#ifndef SQ
3250: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a  LITE_TEMP_STORE.
3260: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3270: 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20 64  TEMP_STORE 1.# d
3280: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
3290: 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a  P_STORE_xc 1  /*
32a0: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
32b0: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
32c0: 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20  ./*.** GCC does 
32d0: 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f  not define the o
32e0: 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20  ffsetof() macro 
32f0: 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f  so we'll have to
3300: 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c   do it.** oursel
3310: 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ves..*/.#ifndef 
3320: 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65  offsetof.#define
3330: 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54   offsetof(STRUCT
3340: 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74  URE,FIELD) ((int
3350: 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55  )((char*)&((STRU
3360: 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44  CTURE*)0)->FIELD
3370: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
3380: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
3390: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73   this machine us
33a0: 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73  es EBCDIC.  (Yes
33b0: 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a  , believe it or.
33c0: 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72  ** not, there ar
33d0: 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73  e still machines
33e0: 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20   out there that 
33f0: 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a  use EBCDIC.).*/.
3400: 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31  #if 'A' == '\301
3410: 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  '.# define SQLIT
3420: 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65  E_EBCDIC 1.#else
3430: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3440: 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a  _ASCII 1.#endif.
3450: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20  ./*.** Integers 
3460: 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20  of known sizes. 
3470: 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20   These typedefs 
3480: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72  might change for
3490: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a   architectures.*
34a0: 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65  * where the size
34b0: 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63  s very.  Preproc
34c0: 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65  essor macros are
34d0: 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68   available so th
34e0: 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20  at the.** types 
34f0: 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e  can be convenien
3500: 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74  tly redefined at
3510: 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20   compile-type.  
3520: 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a  Like this:.**.**
3530: 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55           cc '-DU
3540: 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67  INTPTR_TYPE=long
3550: 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a   long int' ....*
3560: 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32  /.#ifndef UINT32
3570: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3580: 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64  VE_UINT32_T.#  d
3590: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
35a0: 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73  E uint32_t.# els
35b0: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
35c0: 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  32_TYPE unsigned
35d0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
35e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
35f0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
3600: 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20  HAVE_UINT16_T.# 
3610: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
3620: 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65  YPE uint16_t.# e
3630: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
3640: 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT16_TYPE unsign
3650: 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  ed short int.# e
3660: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
3670: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23  def INT16_TYPE.#
3680: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31   ifdef HAVE_INT1
3690: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  6_T.#  define IN
36a0: 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74  T16_TYPE int16_t
36b0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
36c0: 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f  e INT16_TYPE sho
36d0: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
36e0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
36f0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
3700: 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20   HAVE_UINT8_T.# 
3710: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
3720: 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73  PE uint8_t.# els
3730: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
3740: 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  8_TYPE unsigned 
3750: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
3760: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38  dif.#ifndef INT8
3770: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3780: 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  VE_INT8_T.#  def
3790: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e  ine INT8_TYPE in
37a0: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
37b0: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
37c0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
37d0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
37e0: 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ef LONGDOUBLE_TY
37f0: 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  PE.# define LONG
3800: 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67  DOUBLE_TYPE long
3810: 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74   double.#endif.t
3820: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e  ypedef sqlite_in
3830: 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20  t64 i64;        
3840: 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e    /* 8-byte sign
3850: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3860: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e  pedef sqlite_uin
3870: 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20  t64 u64;        
3880: 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67   /* 8-byte unsig
3890: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
38a0: 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ypedef UINT32_TY
38b0: 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20  PE u32;         
38c0: 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69    /* 4-byte unsi
38d0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
38e0: 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54  typedef UINT16_T
38f0: 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20  YPE u16;        
3900: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73     /* 2-byte uns
3910: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3920: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
3930: 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20  YPE i16;        
3940: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69      /* 2-byte si
3950: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3960: 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59  typedef UINT8_TY
3970: 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20  PE u8;          
3980: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73     /* 1-byte uns
3990: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
39a0: 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59  .typedef INT8_TY
39b0: 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20  PE i8;          
39c0: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69      /* 1-byte si
39d0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
39e0: 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41  ./*.** SQLITE_MA
39f0: 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63  X_U32 is a u64 c
3a00: 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20  onstant that is 
3a10: 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20  the maximum u64 
3a20: 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61  value.** that ca
3a30: 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  n be stored in a
3a40: 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73   u32 without los
3a50: 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  s of data.  The 
3a60: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30  value.** is 0x00
3a70: 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20  000000ffffffff. 
3a80: 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20   But because of 
3a90: 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63  quirks of some c
3aa0: 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20  ompilers, we.** 
3ab0: 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20  have to specify 
3ac0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65  the value in the
3ad0: 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20   less intuitive 
3ae0: 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f  manner shown:.*/
3af0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
3b00: 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34  MAX_U32  ((((u64
3b10: 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a  )1)<<32)-1)../*.
3b20: 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
3b30: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73  used to store es
3b40: 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e  timates of the n
3b50: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
3b60: 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69   a.** table or i
3b70: 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 61  ndex.  This is a
3b80: 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  n unsigned integ
3b90: 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39  er type.  For 99
3ba0: 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f  .9% of.** the wo
3bb0: 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e  rld, a 32-bit in
3bc0: 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63 69  teger is suffici
3bd0: 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62  ent.  But a 64-b
3be0: 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61  it integer.** ca
3bf0: 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d  n be used at com
3c00: 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73  pile-time if des
3c10: 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ired..*/.#ifdef 
3c20: 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41  SQLITE_64BIT_STA
3c30: 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34 20  TS. typedef u64 
3c40: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36  tRowcnt;    /* 6
3c50: 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65  4-bit only if re
3c60: 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69  quested at compi
3c70: 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65  le-time */.#else
3c80: 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74 52  . typedef u32 tR
3c90: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d  owcnt;    /* 32-
3ca0: 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75  bit is the defau
3cb0: 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  lt */.#endif../*
3cc0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
3cd0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
3ce0: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
3cf0: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
3d00: 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65  ian,.** evaluate
3d10: 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f  d at runtime..*/
3d20: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
3d30: 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73  MALGAMATION.cons
3d40: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
3d50: 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65   = 1;.#else.exte
3d60: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
3d70: 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a  ite3one;.#endif.
3d80: 23 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36  #if defined(i386
3d90: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69  ) || defined(__i
3da0: 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  386__) || define
3db0: 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20  d(_M_IX86)\.    
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65 66 69           || defi
3de0: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
3df0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
3e00: 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  4__).# define SQ
3e10: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
3e20: 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    0.# define SQL
3e30: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
3e40: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
3e50: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
3e60: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23  SQLITE_UTF16LE.#
3e70: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51  else.# define SQ
3e80: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
3e90: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
3ea0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
3eb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
3ec0: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
3ed0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
3ee0: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
3ef0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
3f00: 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e  VE (SQLITE_BIGEN
3f10: 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31  DIAN?SQLITE_UTF1
3f20: 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36  6BE:SQLITE_UTF16
3f30: 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  LE).#endif../*.*
3f40: 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20  * Constants for 
3f50: 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20  the largest and 
3f60: 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c  smallest possibl
3f70: 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  e 64-bit signed 
3f80: 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
3f90: 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65  se macros are de
3fa0: 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63  signed to work c
3fb0: 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68  orrectly on both
3fc0: 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62   32-bit and 64-b
3fd0: 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e  it.** compilers.
3fe0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47  .*/.#define LARG
3ff0: 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66  EST_INT64  (0xff
4000: 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78  ffffff|(((i64)0x
4010: 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a  7fffffff)<<32)).
4020: 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54  #define SMALLEST
4030: 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31  _INT64 (((i64)-1
4040: 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ) - LARGEST_INT6
4050: 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64  4)../* .** Round
4060: 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20   up a number to 
4070: 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20  the next larger 
4080: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20  multiple of 8.  
4090: 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20  This is used.** 
40a0: 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20  to force 8-byte 
40b0: 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d  alignment on 64-
40c0: 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65  bit architecture
40d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f  s..*/.#define RO
40e0: 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78  UND8(x)     (((x
40f0: 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  )+7)&~7)../*.** 
4100: 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68  Round down to th
4110: 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70  e nearest multip
4120: 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69  le of 8.*/.#defi
4130: 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29  ne ROUNDDOWN8(x)
4140: 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a   ((x)&~7)../*.**
4150: 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
4160: 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c   pointer X is al
4170: 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79  igned to an 8-by
4180: 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68  te boundary.  Th
4190: 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  is.** macro is u
41a0: 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20  sed only within 
41b0: 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69  assert() to veri
41c0: 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  fy that the code
41d0: 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69   gets.** all ali
41e0: 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69  gnment restricti
41f0: 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a  ons correct..**.
4200: 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51  ** Except, if SQ
4210: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
4220: 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65  NED_MALLOC is de
4230: 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  fined, then the.
4240: 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61  ** underlying ma
4250: 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74  lloc() implement
4260: 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e  ion might return
4270: 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e   us 4-byte align
4280: 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20  ed.** pointers. 
4290: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f   In that case, o
42a0: 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74  nly verify 4-byt
42b0: 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a  e alignment..*/.
42c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f  #ifdef SQLITE_4_
42d0: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
42e0: 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47  LOC.# define EIG
42f0: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
4300: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
4310: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
4320: 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  &3)==0).#else.# 
4330: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
4340: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
4350: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
4360: 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30   (char*)0)&7)==0
4370: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4380: 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20  Disable MMAP on 
4390: 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20  platforms where 
43a0: 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e  it is known to n
43b0: 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64  ot work.*/.#if d
43c0: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
43d0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
43e0: 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64  _QNXNTO__).# und
43f0: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
4400: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
4410: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
4420: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a  _SIZE 0.#endif..
4430: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61  /*.** Default ma
4440: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65  ximum size of me
4450: 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d  mory used by mem
4460: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69  ory-mapped I/O i
4470: 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66  n the VFS.*/.#if
4480: 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20  def __APPLE__.# 
4490: 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43  include <TargetC
44a0: 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23  onditionals.h>.#
44b0: 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50   if TARGET_OS_IP
44c0: 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53  HONE.#   undef S
44d0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
44e0: 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53  IZE.#   define S
44f0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4500: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
4510: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
4520: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4530: 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f  E.# if defined(_
4540: 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c  _linux__) \.  ||
4550: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29   defined(_WIN32)
4560: 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64   \.  || (defined
4570: 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64  (__APPLE__) && d
4580: 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29  efined(__MACH__)
4590: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
45a0: 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69  (__sun).#   defi
45b0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
45c0: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
45d0: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
45e0: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
45f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4600: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
4610: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
4620: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4630: 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c  IZE_xc 1 /* excl
4640: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
4650: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
4660: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d  * The default MM
4670: 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20  AP_SIZE is zero 
4680: 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73  on all platforms
4690: 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61  .  Or, even if a
46a0: 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75   larger.** defau
46b0: 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20  lt MMAP_SIZE is 
46c0: 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d  specified at com
46d0: 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20  pile-time, make 
46e0: 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f 65  sure that it doe
46f0: 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20  s.** not exceed 
4700: 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70  the maximum mmap
4710: 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65   size..*/.#ifnde
4720: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
4730: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
4740: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
4750: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  LT_MMAP_SIZE 0.#
4760: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
4770: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
4780: 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64  _xc 1  /* Exclud
4790: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
47a0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  /.#endif.#if SQL
47b0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
47c0: 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58  _SIZE>SQLITE_MAX
47d0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64  _MMAP_SIZE.# und
47e0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
47f0: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
4800: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4810: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51  ULT_MMAP_SIZE SQ
4820: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4830: 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ZE.#endif../*.**
4840: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
4850: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
4860: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
4870: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
4880: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4890: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
48a0: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
48b0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
48c0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
48d0: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
48e0: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
48f0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
4900: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
4910: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
4920: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
4930: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
4940: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
4950: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
4960: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
4970: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
4980: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
4990: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
49a0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
49b0: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
49c0: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
49d0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
49e0: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
49f0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4a00: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
4a10: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
4a20: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
4a30: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
4a40: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
4a50: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
4a60: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
4a70: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
4a80: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
4a90: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
4aa0: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
4ab0: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
4ac0: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
4ad0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
4ae0: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
4af0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
4b00: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
4b10: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
4b20: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
4b30: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
4b40: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
4b50: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
4b60: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
4b70: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
4b80: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
4b90: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
4ba0: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
4bb0: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
4bc0: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
4bd0: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
4be0: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
4bf0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
4c00: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
4c10: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
4c20: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
4c30: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
4c40: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
4c50: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
4c60: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
4c70: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
4c80: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
4c90: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
4ca0: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
4cb0: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
4cc0: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
4cd0: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
4ce0: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
4cf0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
4d00: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
4d10: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
4d20: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
4d30: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
4d40: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
4d50: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
4d60: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
4d70: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
4d80: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
4d90: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
4da0: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
4db0: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
4dc0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
4dd0: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
4de0: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
4df0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
4e00: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
4e10: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
4e20: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
4e30: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
4e40: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
4e50: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
4e60: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
4e70: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
4e80: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
4e90: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
4ea0: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
4eb0: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
4ec0: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
4ed0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
4ee0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
4ef0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4f00: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
4f10: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
4f20: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
4f30: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
4f40: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
4f50: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
4f60: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
4f70: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
4f80: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
4f90: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
4fa0: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
4fb0: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
4fc0: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
4fd0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
4fe0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
4ff0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
5000: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
5010: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
5020: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
5030: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
5040: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
5050: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
5060: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
5070: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
5080: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
5090: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
50a0: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
50b0: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
50c0: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
50d0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
50e0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
50f0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
5100: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
5110: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
5120: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
5130: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
5140: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
5150: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
5160: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
5170: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
5180: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
5190: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
51a0: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
51b0: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
51c0: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
51d0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
51e0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
51f0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
5200: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
5210: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
5220: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
5230: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
5240: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
5250: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
5260: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
5270: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
5280: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
5290: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
52a0: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
52b0: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
52c0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
52d0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
52e0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
52f0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
5300: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
5310: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
5320: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
5330: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
5340: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
5350: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
5360: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5370: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
5380: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
5390: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
53a0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
53b0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
53c0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
53d0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
53e0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
53f0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
5400: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
5410: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
5420: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
5430: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
5440: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
5450: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
5460: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
5470: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
5480: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
5490: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
54a0: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
54b0: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
54c0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
54d0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
54e0: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
54f0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
5500: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
5510: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
5520: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
5530: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
5540: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
5550: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
5560: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
5570: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
5580: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
5590: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
55a0: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
55b0: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
55c0: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
55d0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
55e0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
55f0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
5600: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
5610: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
5620: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
5630: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
5640: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
5650: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
5660: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
5670: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
5680: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
5690: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
56a0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
56b0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
56c0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
56d0: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
56e0: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
56f0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
5700: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
5710: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
5720: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
5730: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
5740: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
5750: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
5760: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
5770: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
5780: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
5790: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
57a0: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
57b0: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
57c0: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
57d0: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
57e0: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
57f0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
5800: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
5810: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
5820: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
5830: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
5840: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5850: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
5860: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
5870: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
5880: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
5890: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
58a0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
58b0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
58c0: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
58d0: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
58e0: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
58f0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
5900: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
5910: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
5920: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
5930: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5940: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
5950: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
5960: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
5970: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5980: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
5990: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
59a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
59b0: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
59c0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
59d0: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
59e0: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
59f0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
5a00: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5a10: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
5a20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5a30: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
5a40: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
5a50: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
5a60: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
5a70: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
5a80: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
5a90: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
5aa0: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
5ab0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
5ac0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
5ad0: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
5ae0: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
5af0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
5b00: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
5b10: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
5b20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5b30: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
5b40: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
5b50: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
5b60: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
5b70: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
5b80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
5b90: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
5ba0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
5bb0: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
5bc0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
5bd0: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
5be0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
5bf0: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
5c00: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
5c10: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
5c20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5c30: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
5c40: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
5c50: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
5c60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5c70: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
5c80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5c90: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
5ca0: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
5cb0: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
5cc0: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
5cd0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
5ce0: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
5cf0: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
5d00: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
5d10: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
5d20: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
5d30: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
5d40: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
5d50: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
5d60: 20 73 74 72 75 63 74 20 57 68 65 72 65 50 6c 61   struct WherePla
5d70: 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a 74 79 70  n WherePlan;.typ
5d80: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
5d90: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
5da0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5db0: 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72 65  WhereLevel Where
5dc0: 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65  Level;../*.** De
5dd0: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
5de0: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
5df0: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
5e00: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
5e10: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
5e20: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
5e30: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
5e40: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
5e50: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
5e60: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
5e70: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
5e80: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
5e90: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
5ea0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
5eb0: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
5ec0: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
5ed0: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
5ee0: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
5ef0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
5f00: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
5f10: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
5f20: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
5f30: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
5f40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
5f50: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
5f60: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
5f70: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
5f80: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
5f90: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
5fa0: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
5fb0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
5fc0: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
5fd0: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
5fe0: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
5ff0: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
6000: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
6010: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
6020: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
6030: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
6040: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
6050: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
6060: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
6070: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
6080: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
6090: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
60a0: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
60b0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 69 6e   file */.  u8 in
60c0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
60d0: 2f 2a 20 30 3a 20 6e 6f 74 20 77 72 69 74 61 62  /* 0: not writab
60e0: 6c 65 2e 20 20 31 3a 20 54 72 61 6e 73 61 63 74  le.  1: Transact
60f0: 69 6f 6e 2e 20 20 32 3a 20 43 68 65 63 6b 70 6f  ion.  2: Checkpo
6100: 69 6e 74 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  int */.  u8 safe
6110: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
6120: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
6130: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
6140: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68  to disk */.  Sch
6150: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
6160: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
6170: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
6180: 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64  (possibly shared
6190: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ) */.};../*.** A
61a0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
61b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
61c0: 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64  cture stores a d
61d0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
61e0: 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d  **.** Most Schem
61f0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73  a objects are as
6200: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
6210: 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65  Btree.  The exce
6220: 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20  ption is.** the 
6230: 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54  Schema for the T
6240: 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71  EMP databaes (sq
6250: 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68  lite3.aDb[1]) wh
6260: 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e  ich is free-stan
6270: 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72  ding..** In shar
6280: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61  ed cache mode, a
6290: 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f   single Schema o
62a0: 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61  bject can be sha
62b0: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a  red by multiple.
62c0: 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72  ** Btrees that r
62d0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65  efer to the same
62e0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68   underlying BtSh
62f0: 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ared object..** 
6300: 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  .** Schema objec
6310: 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ts are automatic
6320: 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64  ally deallocated
6330: 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42   when the last B
6340: 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66  tree that.** ref
6350: 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20  erences them is 
6360: 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65  destroyed.   The
6370: 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20   TEMP Schema is 
6380: 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62  manually freed b
6390: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  y.** sqlite3_clo
63a0: 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72  se()..*.** A thr
63b0: 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64  ead must be hold
63c0: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
63d0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
63e0: 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a   Btree in order.
63f0: 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68  ** to access Sch
6400: 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ema content.  Th
6410: 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  is implies that 
6420: 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20  the thread must 
6430: 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69  also be.** holdi
6440: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
6450: 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63  e sqlite3 connec
6460: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61  tion pointer tha
6470: 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65  t owns the Btree
6480: 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20  ..** For a TEMP 
6490: 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65  Schema, only the
64a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   connection mute
64b0: 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  x is required..*
64c0: 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20  /.struct Schema 
64d0: 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63  {.  int schema_c
64e0: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61  ookie;   /* Data
64f0: 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
6500: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  ion number for t
6510: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
6520: 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20  t iGeneration;  
6530: 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e     /* Generation
6540: 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65   counter.  Incre
6550: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
6560: 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73   change */.  Has
6570: 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20  h tblHash;      
6580: 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20    /* All tables 
6590: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
65a0: 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73  */.  Hash idxHas
65b0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
65c0: 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73   (named) indices
65d0: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
65e0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48   */.  Hash trigH
65f0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
6600: 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78  l triggers index
6610: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
6620: 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20  Hash fkeyHash;  
6630: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65       /* All fore
6640: 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65  ign keys by refe
6650: 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d  renced table nam
6660: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53  e */.  Table *pS
6670: 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  eqTab;      /* T
6680: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
6690: 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  ce table used by
66a0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
66b0: 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d  /.  u8 file_form
66c0: 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65  at;      /* Sche
66d0: 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  ma format versio
66e0: 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  n for this file 
66f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
6700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
6710: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
6720: 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65  by this database
6730: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
6740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
6750: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
6760: 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20  ith this schema 
6770: 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73  */.  int cache_s
6780: 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ize;      /* Num
6790: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
67a0: 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65  use in the cache
67b0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
67c0: 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
67d0: 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
67e0: 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
67f0: 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62  ts in the .** Db
6800: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
6810: 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
6820: 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  e DbHasProperty(
6830: 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29  D,I,P)     (((D)
6840: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
6850: 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
6860: 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  )).#define DbHas
6870: 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  AnyProperty(D,I,
6880: 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49  P)  (((D)->aDb[I
6890: 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  ].pSchema->flags
68a0: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
68b0: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
68c0: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
68d0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
68e0: 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
68f0: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
6900: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
6910: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
6920: 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
6930: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
6940: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
6950: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
6960: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
6970: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
6980: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
6990: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
69a0: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
69b0: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
69c0: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
69d0: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
69e0: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
69f0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
6a00: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
6a10: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
6a20: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
6a30: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
6a40: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
6a50: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
6a60: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
6a70: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
6a80: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
6a90: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
6aa0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
6ab0: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
6ac0: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
6ad0: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
6ae0: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
6af0: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
6b00: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
6b10: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
6b20: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
6b30: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
6b40: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
6b50: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
6b60: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
6b70: 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  es) */../*.** Th
6b80: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
6b90: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
6ba0: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
6bb0: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
6bc0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
6bd0: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
6be0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
6bf0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
6c00: 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
6c10: 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a 2a  R_DEPTH+1)../*.*
6c20: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
6c30: 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66  oc is a set of f
6c40: 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72  ixed-size buffer
6c50: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  s that can be us
6c60: 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79  ed.** to satisfy
6c70: 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74   small transient
6c80: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
6c90: 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20  on requests for 
6ca0: 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63  objects.** assoc
6cb0: 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72  iated with a par
6cc0: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
6cd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
6ce0: 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b  e use of.** look
6cf0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f  aside malloc pro
6d00: 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63  vides a signific
6d10: 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ant performance 
6d20: 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28  enhancement.** (
6d30: 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61  approx 10%) by a
6d40: 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73  voiding numerous
6d50: 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71   malloc/free req
6d60: 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73  uests while pars
6d70: 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65  ing.** SQL state
6d80: 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ments..**.** The
6d90: 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63   Lookaside struc
6da0: 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69  ture holds confi
6db0: 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  guration informa
6dc0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a  tion about the.*
6dd0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
6de0: 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45  oc subsystem.  E
6df0: 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65  ach available me
6e00: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
6e10: 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73  in.** the lookas
6e20: 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73  ide subsystem is
6e30: 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e   stored on a lin
6e40: 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b  ked list of Look
6e50: 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a  asideSlot.** obj
6e60: 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b  ects..**.** Look
6e70: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
6e80: 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77  s are only allow
6e90: 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74  ed for objects t
6ea0: 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74  hat are associat
6eb0: 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72  ed.** with a par
6ec0: 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
6ed0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65   connection.  He
6ee0: 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f  nce, schema info
6ef0: 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a  rmation cannot.*
6f00: 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c  * be stored in l
6f10: 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65  ookaside because
6f20: 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   in shared cache
6f30: 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61   mode the schema
6f40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
6f50: 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  is shared by mul
6f60: 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63  tiple database c
6f70: 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65  onnections.  The
6f80: 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61  refore, while pa
6f90: 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20  rsing.** schema 
6fa0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
6fb0: 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62   Lookaside.bEnab
6fc0: 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61  led flag is clea
6fd0: 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c  red so that.** l
6fe0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
6ff0: 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65  ions are not use
7000: 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74  d to construct t
7010: 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  he schema object
7020: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f  s..*/.struct Loo
7030: 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73  kaside {.  u16 s
7040: 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  z;              
7050: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
7060: 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74  ch buffer in byt
7070: 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62  es */.  u8 bEnab
7080: 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  led;            
7090: 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61  /* False to disa
70a0: 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64  ble new lookasid
70b0: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
70c0: 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b  .  u8 bMalloced;
70d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
70e0: 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74  ue if pStart obt
70f0: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
7100: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20  e3_malloc() */. 
7110: 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20   int nOut;      
7120: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7130: 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75  er of buffers cu
7140: 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20  rrently checked 
7150: 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f  out */.  int mxO
7160: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
7170: 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61   /* Highwater ma
7180: 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20  rk for nOut */. 
7190: 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20   int anStat[3]; 
71a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68           /* 0: h
71b0: 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69  its.  1: size mi
71c0: 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d  sses.  2: full m
71d0: 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61  isses */.  Looka
71e0: 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b  sideSlot *pFree;
71f0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76     /* List of av
7200: 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20  ailable buffers 
7210: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72  */.  void *pStar
7220: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
7230: 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76  First byte of av
7240: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73  ailable memory s
7250: 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  pace */.  void *
7260: 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
7270: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
7280: 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69  past end of avai
7290: 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d  lable space */.}
72a0: 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  ;.struct Lookasi
72b0: 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61  deSlot {.  Looka
72c0: 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b  sideSlot *pNext;
72d0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66      /* Next buff
72e0: 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  er in the list o
72f0: 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a  f free buffers *
7300: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61  /.};../*.** A ha
7310: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
7320: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
7330: 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61  s..**.** Hash ea
7340: 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ch FuncDef struc
7350: 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66  ture into one of
7360: 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68   the FuncDefHash
7370: 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43  .a[] slots..** C
7380: 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e  ollisions are on
7390: 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61   the FuncDef.pHa
73a0: 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72  sh chain..*/.str
73b0: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
73c0: 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32  {.  FuncDef *a[2
73d0: 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73  3];       /* Has
73e0: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
73f0: 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  tions */.};../*.
7400: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
7410: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61   connection is a
7420: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
7430: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
7440: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
7450: 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c   sqlite3 {.  sql
7460: 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20  ite3_vfs *pVfs; 
7470: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53             /* OS
7480: 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   Interface */.  
7490: 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64  struct Vdbe *pVd
74a0: 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  be;           /*
74b0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
74c0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73  virtual machines
74d0: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
74e0: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
74f0: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
7500: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
7510: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
7520: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
7530: 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20  x *mutex;       
7540: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
7550: 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61  mutex */.  Db *a
7560: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
7570: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
7580: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e  backends */.  in
7590: 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20  t nDb;          
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
75b0: 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64  umber of backend
75c0: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  s currently in u
75d0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  se */.  int flag
75e0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
75f0: 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c        /* Miscell
7600: 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65  aneous flags. Se
7610: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
7620: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
7630: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
7640: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
7650: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
7660: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
7670: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
7680: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
7690: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
76a0: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67  tting */.  unsig
76b0: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
76c0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
76d0: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
76e0: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
76f0: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
7700: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7710: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7720: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
7730: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
7740: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
7750: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
7760: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
7770: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
7780: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36  turning */.  u16
7790: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
77a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
77b0: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
77c0: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
77d0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  ons */.  u8 auto
77e0: 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20  Commit;         
77f0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75         /* The au
7800: 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20  to-commit flag. 
7810: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
7820: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
7830: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
7840: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
7850: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
7860: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
7870: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
7880: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
7890: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
78a0: 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d  /.  u8 dfltLockM
78b0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
78c0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63    /* Default loc
78d0: 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74  king-mode for at
78e0: 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20  tached dbs */.  
78f0: 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74  signed char next
7900: 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a  Autovac;      /*
7910: 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67   Autovac setting
7920: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
7930: 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70   >=0 */.  u8 sup
7940: 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20  pressErr;       
7950: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
7960: 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65  t issue error me
7970: 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a  ssages if true *
7980: 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e  /.  u8 vtabOnCon
7990: 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20  flict;          
79a0: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
79b0: 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62  turn for s3_vtab
79c0: 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a  _on_conflict() *
79d0: 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63  /.  u8 isTransac
79e0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  tionSavepoint;  
79f0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
7a00: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
7a10: 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a  oint is a TS */.
7a20: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
7a30: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
7a40: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
7a50: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
7a60: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
7a90: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
7aa0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
7ab0: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7ad0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
7ae0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
7af0: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
7b00: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
7b10: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
7b20: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
7b30: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
7b40: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
7b50: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
7b60: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
7b70: 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73  ts */.  struct s
7b80: 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b  qlite3InitInfo {
7b90: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
7ba0: 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67  tion used during
7bb0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
7bc0: 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e  */.    int newTn
7bd0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
7be0: 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f     /* Rootpage o
7bf0: 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  f table being in
7c00: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
7c10: 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20   u8 iDb;        
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7c30: 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73  Which db file is
7c40: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
7c50: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73  ed */.    u8 bus
7c60: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
7c70: 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66        /* TRUE if
7c80: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69   currently initi
7c90: 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75  alizing */.    u
7ca0: 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b  8 orphanTrigger;
7cb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
7cc0: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  st statement is 
7cd0: 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72  orphaned TEMP tr
7ce0: 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e 69  igger */.  } ini
7cf0: 74 3b 0a 20 20 69 6e 74 20 61 63 74 69 76 65 56  t;.  int activeV
7d00: 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20  dbeCnt;         
7d10: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7d20: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
7d30: 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20 69  executing */.  i
7d40: 6e 74 20 77 72 69 74 65 56 64 62 65 43 6e 74 3b  nt writeVdbeCnt;
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7d60: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
7d70: 20 56 44 42 45 73 20 74 68 61 74 20 61 72 65 20   VDBEs that are 
7d80: 77 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  writing */.  int
7d90: 20 76 64 62 65 45 78 65 63 43 6e 74 3b 20 20 20   vdbeExecCnt;   
7da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7db0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
7dc0: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
7dd0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74  () */.  int nExt
7de0: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
7df0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7e00: 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73  of loaded extens
7e10: 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ions */.  void *
7e20: 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20  *aExtension;    
7e30: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
7e40: 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61   of shared libra
7e50: 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20  ry handles */.  
7e60: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
7e70: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
7e80: 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61  );        /* Tra
7e90: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
7ea0: 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67   void *pTraceArg
7eb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ec0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7ed0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72  gument to the tr
7ee0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
7ef0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
7f00: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
7f10: 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50  har*,u64);  /* P
7f20: 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f  rofiling functio
7f30: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  n */.  void *pPr
7f40: 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20  ofileArg;       
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f60: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
7f70: 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e  profile function
7f80: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d   */.  void *pCom
7f90: 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20  mitArg;         
7fa0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
7fb0: 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61  ent to xCommitCa
7fc0: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
7fd0: 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61   int (*xCommitCa
7fe0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
7ff0: 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74     /* Invoked at
8000: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
8010: 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62  /.  void *pRollb
8020: 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ackArg;         
8030: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
8040: 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61  t to xRollbackCa
8050: 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20  llback() */   . 
8060: 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63   void (*xRollbac
8070: 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  kCallback)(void*
8080: 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74  ); /* Invoked at
8090: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
80a0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74  /.  void *pUpdat
80b0: 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78  eArg;.  void (*x
80c0: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
80d0: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
80e0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
80f0: 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29  r*,sqlite_int64)
8100: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
8110: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
8120: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
8130: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
8140: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
8150: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
8160: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
8170: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
8180: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
8190: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
81a0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
81b0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
81c0: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
81d0: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
81e0: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
81f0: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
8200: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
8210: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
8220: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
8230: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
8240: 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  age */.  char *z
8250: 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20  ErrMsg;         
8260: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
8270: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
8280: 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f 64  age (UTF-8 encod
8290: 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ed) */.  char *z
82a0: 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20 20  ErrMsg16;       
82b0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
82c0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
82d0: 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63 6f  age (UTF-16 enco
82e0: 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ded) */.  union 
82f0: 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69  {.    volatile i
8300: 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64  nt isInterrupted
8310: 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c  ; /* True if sql
8320: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68  ite3_interrupt h
8330: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
8340: 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74  /.    double not
8350: 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20  Used1;          
8360: 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20    /* Spacer */. 
8370: 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69   } u1;.  Lookasi
8380: 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  de lookaside;   
8390: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73         /* Lookas
83a0: 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69  ide malloc confi
83b0: 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e  guration */.#ifn
83c0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
83d0: 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
83e0: 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69  int (*xAuth)(voi
83f0: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
8400: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
8410: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
8420: 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20   char*);.       
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
8450: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
8460: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
8470: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8490: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
84a0: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
84b0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
84c0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
84d0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
84e0: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
84f0: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
8500: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
8510: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
8520: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
8530: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
8540: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8550: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
8560: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69   callback */.  i
8570: 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  nt nProgressOps;
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8590: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
85a0: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
85b0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
85c0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
85d0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
85e0: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
85f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8600: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
8610: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
8620: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
8630: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
8640: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
8650: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
8660: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
8670: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
8680: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
8690: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
86a0: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
86b0: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
86c0: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
86d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
86e0: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
86f0: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
8700: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
8710: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
8720: 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74   /* Disconnect t
8730: 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c  hese in next sql
8740: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a  ite3_prepare() *
8750: 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44  /.#endif.  FuncD
8760: 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20  efHash aFunc;   
8770: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
8780: 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63   table of connec
8790: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a  tion functions *
87a0: 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65  /.  Hash aCollSe
87b0: 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
87c0: 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69    /* All collati
87d0: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a  ng sequences */.
87e0: 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75    BusyHandler bu
87f0: 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20  syHandler;      
8800: 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b  /* Busy callback
8810: 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74   */.  Db aDbStat
8820: 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  ic[2];          
8830: 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70      /* Static sp
8840: 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65  ace for the 2 de
8850: 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a  fault backends *
8860: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
8870: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
8880: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
8890: 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ive savepoints *
88a0: 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65  /.  int busyTime
88b0: 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  out;            
88c0: 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65    /* Busy handle
88d0: 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73  r timeout, in ms
88e0: 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76  ec */.  int nSav
88f0: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
8900: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8910: 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69  of non-transacti
8920: 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  on savepoints */
8930: 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e  .  int nStatemen
8940: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
8950: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
8960: 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74  sted statement-t
8970: 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a  ransactions  */.
8980: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
8990: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
89a0: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
89b0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73  constraints this
89c0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f   transaction. */
89d0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
89e0: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
89f0: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
8a00: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
8a10: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a  in DbFree() */..
8a20: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
8a30: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
8a40: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
8a50: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
8a60: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
8a70: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
8a80: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
8a90: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
8aa0: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
8ab0: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
8ac0: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
8ad0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
8ae0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
8af0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
8b00: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
8b10: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
8b20: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
8b30: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
8b40: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
8b50: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
8b60: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
8b70: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
8b80: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
8b90: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
8ba0: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
8bb0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
8bc0: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
8bd0: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
8be0: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
8bf0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
8c00: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
8c10: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
8c20: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
8c30: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
8c40: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
8c50: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
8c60: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
8c70: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
8c80: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
8c90: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8cb0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
8cc0: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
8cd0: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
8ce0: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
8cf0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
8d00: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
8d10: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
8d20: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
8d30: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
8d40: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
8d50: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
8d60: 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
8d70: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73  * A macro to dis
8d80: 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69  cover the encodi
8d90: 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ng of a database
8da0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43  ..*/.#define ENC
8db0: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
8dc0: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
8dd0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
8de0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
8df0: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
8e00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8e10: 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20  _VdbeTrace      
8e20: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54  0x00000001  /* T
8e30: 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42  rue to trace VDB
8e40: 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23  E execution */.#
8e50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
8e60: 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30  ternChanges  0x0
8e70: 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f  0000002  /* Unco
8e80: 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62  mmitted Hash tab
8e90: 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  le changes */.#d
8ea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
8eb0: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
8ec0: 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20  000004  /* Show 
8ed0: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
8ee0: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
8ef0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
8f00: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
8f10: 30 30 30 30 30 30 38 20 20 2f 2a 20 53 68 6f 77  0000008  /* Show
8f20: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
8f30: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
8f40: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
8f50: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30        0x00000010
8f60: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
8f70: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
8f80: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
8fc0: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
8fd0: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9000: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
9010: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
9020: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9030: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
9040: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
9050: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
9060: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
9070: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
90a0: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
90b0: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
90c0: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
90d0: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34         0x0000004
90e0: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
90f0: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
9100: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
9110: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
9120: 6e 67 20 20 20 20 30 78 30 30 30 30 30 30 38 30  ng    0x00000080
9130: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
9140: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
9150: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
9160: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
9170: 6d 61 20 20 20 20 30 78 30 30 30 30 30 31 30 30  ma    0x00000100
9180: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
9190: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
91a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
91b0: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
91c0: 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20   0x00000200  /* 
91d0: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
91e0: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
91f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9200: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
9210: 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44  0x00000400  /* D
9220: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
9230: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
9240: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9250: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
9260: 64 20 30 78 30 30 30 30 38 30 30 20 20 2f 2a 20  d 0x0000800  /* 
9270: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
9280: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
9290: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
92a0: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 31 30 30  leFmt  0x0000100
92b0: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
92c0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
92d0: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
92e0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
92f0: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 32 30  nc      0x000020
9300: 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  00  /* Use full 
9310: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
9320: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
9330: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
9340: 53 79 6e 63 20 20 30 78 30 30 30 30 34 30 30 30  Sync  0x00004000
9350: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
9360: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
9370: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
9380: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
9390: 65 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20  e   0x00008000  
93a0: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
93b0: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
93c0: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
93d0: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 31 30  eOrder   0x00010
93e0: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
93f0: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
9400: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9410: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
9420: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
9430: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
9440: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
9450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
9460: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
9470: 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0040000  /* Enfo
9480: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
9490: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
94a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
94b0: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
94c0: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 61  00080000  /* Ena
94d0: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
94e0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
94f0: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
9500: 69 6c 74 69 6e 20 20 30 78 30 30 31 30 30 30 30  iltin  0x0010000
9510: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
9520: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
9530: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
9540: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
9550: 6f 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  on  0x00200000  
9560: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
9570: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
9580: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
9590: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 34 30  eTrigger  0x0040
95a0: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
95b0: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
95c0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20   */../*.** Bits 
95d0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  of the sqlite3.d
95e0: 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20  bOptFlags field 
95f0: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79  that are used by
9600: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
9610: 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
9620: 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
9630: 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20  IMIZATIONS,...) 
9640: 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20  interface to.** 
9650: 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61  selectively disa
9660: 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69  ble various opti
9670: 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  mizations..*/.#d
9680: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
9690: 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30  ryFlattener 0x00
96a0: 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c  01   /* Query fl
96b0: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
96c0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
96d0: 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32  nCache    0x0002
96e0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63     /* Column cac
96f0: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
9700: 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65  LITE_GroupByOrde
9710: 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20  r   0x0004   /* 
9720: 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66  GROUPBY cover of
9730: 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66   ORDERBY */.#def
9740: 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f  ine SQLITE_Facto
9750: 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38  rOutConst 0x0008
9760: 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66     /* Constant f
9770: 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66  actoring */.#def
9780: 69 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65  ine SQLITE_IdxRe
9790: 61 6c 41 73 49 6e 74 20 20 20 30 78 30 30 31 30  alAsInt   0x0010
97a0: 20 20 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c     /* Store REAL
97b0: 20 61 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63   as INT in indic
97c0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
97d0: 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74  LITE_DistinctOpt
97e0: 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20      0x0020   /* 
97f0: 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69  DISTINCT using i
9800: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
9810: 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64  e SQLITE_CoverId
9820: 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20  xScan   0x0040  
9830: 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64   /* Covering ind
9840: 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66  ex scans */.#def
9850: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72  ine SQLITE_Order
9860: 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30  ByIdxJoin 0x0080
9870: 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f     /* ORDER BY o
9880: 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65  f joins via inde
9890: 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  x */.#define SQL
98a0: 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e  ITE_SubqCoroutin
98b0: 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45  e  0x0100   /* E
98c0: 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69  valuate subqueri
98d0: 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73  es as coroutines
98e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
98f0: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
9900: 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72    0x0200   /* Tr
9910: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
9920: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
9930: 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20  SQLITE_AllOpts  
9940: 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f        0xffff   /
9950: 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69  * All optimizati
9960: 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ons */../*.** Ma
9970: 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67  cros for testing
9980: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
9990: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72  optimizations ar
99a0: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
99b0: 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  abled..*/.#ifnde
99c0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
99d0: 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69  ILTIN_TEST.#defi
99e0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
99f0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
9a00: 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74  )  (((db)->dbOpt
9a10: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30  Flags&(mask))!=0
9a20: 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  ).#define Optimi
9a30: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
9a40: 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29  , mask)   (((db)
9a50: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
9a60: 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  sk))==0).#else.#
9a70: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
9a80: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
9a90: 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65  mask)  0.#define
9aa0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
9ab0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
9ac0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
9ad0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
9ae0: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
9af0: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
9b00: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
9b10: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
9b20: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
9b30: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
9b40: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
9b50: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
9b60: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
9b70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9b80: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
9b90: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
9ba0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
9bb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9bc0: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
9bd0: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
9be0: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
9bf0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
9c00: 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20  LITE_MAGIC_SICK 
9c10: 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20      0x4b771290  
9c20: 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61  /* Error and awa
9c30: 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23  iting close */.#
9c40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
9c50: 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66  GIC_BUSY     0xf
9c60: 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61  03b7906  /* Data
9c70: 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69  base currently i
9c80: 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  n use */.#define
9c90: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
9ca0: 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33  ROR    0xb535793
9cb0: 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f  0  /* An SQLITE_
9cc0: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63  MISUSE error occ
9cd0: 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  urred */.#define
9ce0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f   SQLITE_MAGIC_ZO
9cf0: 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37  MBIE   0x64cffc7
9d00: 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68  f  /* Close with
9d10: 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
9d20: 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  close */../*.** 
9d30: 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f  Each SQL functio
9d40: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
9d50: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
9d60: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
9d70: 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f  structure.  A po
9d80: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
9d90: 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65  ructure is store
9da0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  d in the sqlite.
9db0: 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61  aFunc.** hash ta
9dc0: 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69  ble.  When multi
9dd0: 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61  ple functions ha
9de0: 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ve the same name
9df0: 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65  , the hash table
9e00: 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  .** points to a 
9e10: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74  linked list of t
9e20: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e  hese structures.
9e30: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
9e40: 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b  ef {.  i16 nArg;
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9e60: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
9e70: 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e  ts.  -1 means un
9e80: 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38 20  limited */.  u8 
9e90: 69 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20 20  iPrefEnc;       
9ea0: 20 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20 74    /* Preferred t
9eb0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53 51  ext encoding (SQ
9ec0: 4c 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45 2c  LITE_UTF8, 16LE,
9ed0: 20 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20 66   16BE) */.  u8 f
9ee0: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
9ef0: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
9f00: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
9f10: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
9f20: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
9f30: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
9f40: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
9f50: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
9f60: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
9f70: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
9f80: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75   */.  void (*xFu
9f90: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
9fa0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
9fb0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65  _value**); /* Re
9fc0: 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a  gular function *
9fd0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  /.  void (*xStep
9fe0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
9ff0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
a000: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72  alue**); /* Aggr
a010: 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20  egate step */.  
a020: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
a030: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
a040: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
a050: 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
a060: 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20   finalizer */.  
a070: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
a080: 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65       /* SQL name
a090: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
a0a0: 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  . */.  FuncDef *
a0b0: 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e  pHash;      /* N
a0c0: 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65  ext with a diffe
a0d0: 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68  rent name but th
a0e0: 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20  e same hash */. 
a0f0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
a100: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
a110: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
a120: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
a130: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  function */.};..
a140: 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  /*.** This struc
a150: 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65  ture encapsulate
a160: 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  s a user-functio
a170: 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c  n destructor cal
a180: 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e  lback (as.** con
a190: 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72  figured using cr
a1a0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
a1b0: 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65  ()) and a refere
a1c0: 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65  nce counter. Whe
a1d0: 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63  n.** create_func
a1e0: 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c  tion_v2() is cal
a1f0: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
a200: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20  function with a 
a210: 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61  destructor,.** a
a220: 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f   single object o
a230: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
a240: 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65  llocated. FuncDe
a250: 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73  structor.nRef is
a260: 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20   set to .** the 
a270: 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65  number of FuncDe
a280: 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65  f objects create
a290: 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33  d (either 1 or 3
a2a0: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
a2b0: 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74  hether.** or not
a2c0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
a2d0: 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54  ncoding is SQLIT
a2e0: 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63  E_ANY). The Func
a2f0: 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  Def.pDestructor.
a300: 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63  ** member of eac
a310: 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e  h of the new Fun
a320: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
a330: 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
a340: 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  the allocated.**
a350: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
a360: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65  .**.** Thereafte
a370: 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74  r, when one of t
a380: 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  he FuncDef objec
a390: 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74  ts is deleted, t
a3a0: 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20  he reference.** 
a3b0: 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62  count on this ob
a3c0: 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e  ject is decremen
a3d0: 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61  ted. When it rea
a3e0: 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74  ches 0, the dest
a3f0: 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76  ructor.** is inv
a400: 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e  oked and the Fun
a410: 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75  cDestructor stru
a420: 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a  cture freed..*/.
a430: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
a440: 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52  uctor {.  int nR
a450: 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  ef;.  void (*xDe
a460: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a  stroy)(void *);.
a470: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
a480: 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  a;.};../*.** Pos
a490: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
a4a0: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20   FuncDef.flags. 
a4b0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f   Note that the _
a4c0: 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45  LENGTH and _TYPE
a4d0: 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73  OF.** values mus
a4e0: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
a4f0: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
a500: 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
a510: 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a  OFARG.  There.**
a520: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
a530: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
a540: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
a550: 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  his..*/.#define 
a560: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45  SQLITE_FUNC_LIKE
a570: 20 20 20 20 20 30 78 30 31 20 2f 2a 20 43 61 6e       0x01 /* Can
a580: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
a590: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
a5a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a5b0: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
a5c0: 20 30 78 30 32 20 2f 2a 20 43 61 73 65 2d 73 65   0x02 /* Case-se
a5d0: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
a5e0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
a5f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
a600: 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 34 20  C_EPHEM    0x04 
a610: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
a620: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
a630: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a640: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
a650: 30 78 30 38 20 2f 2a 20 73 71 6c 69 74 65 33 47  0x08 /* sqlite3G
a660: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20  etFuncCollSeq() 
a670: 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20  might be called 
a680: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a690: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
a6a0: 30 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0x10 /* Built-in
a6b0: 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67   count(*) aggreg
a6c0: 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ate */.#define S
a6d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45  QLITE_FUNC_COALE
a6e0: 53 43 45 20 30 78 32 30 20 2f 2a 20 42 75 69 6c  SCE 0x20 /* Buil
a6f0: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
a700: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63  or ifnull() func
a710: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
a720: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
a730: 54 48 20 20 20 30 78 34 30 20 2f 2a 20 42 75 69  TH   0x40 /* Bui
a740: 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66  lt-in length() f
a750: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
a760: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  ne SQLITE_FUNC_T
a770: 59 50 45 4f 46 20 20 20 30 78 38 30 20 2f 2a 20  YPEOF   0x80 /* 
a780: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
a790: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  ) function */../
a7a0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
a7b0: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
a7c0: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
a7d0: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
a7e0: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
a7f0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
a800: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
a810: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
a820: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
a830: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
a840: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
a850: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
a860: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
a870: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
a880: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
a890: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
a8a0: 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  e .**     implem
a8b0: 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
a8c0: 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
a8d0: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
a8e0: 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
a8f0: 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
a900: 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
a910: 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
a920: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
a930: 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
a940: 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
a950: 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
a960: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
a970: 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65  f .**     argume
a980: 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20  nt bNC is true, 
a990: 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  then the SQLITE_
a9a0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c  FUNC_NEEDCOLL fl
a9b0: 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
a9c0: 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61     AGGREGATE(zNa
a9d0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
a9e0: 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  bNC, xStep, xFin
a9f0: 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  al).**     Used 
aa00: 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67  to create an agg
aa10: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
aa20: 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65  definition imple
aa30: 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20  mented by.**    
aa40: 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73   the C functions
aa50: 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61   xStep and xFina
aa60: 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75  l. The first fou
aa70: 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20  r parameters.** 
aa80: 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65      are interpre
aa90: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
aaa0: 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74  way as the first
aab0: 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f   4 parameters to
aac0: 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e  .**     FUNCTION
aad0: 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45  ()..**.**   LIKE
aae0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
aaf0: 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a  , pArg, flags).*
ab00: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
ab10: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
ab20: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
ab30: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
ab40: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68  zName .**     th
ab50: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
ab60: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
ab70: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
ab80: 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20  a call to C .** 
ab90: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
aba0: 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
abb0: 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
abc0: 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
abd0: 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
abe0: 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
abf0: 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
ac00: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
ac10: 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
ac20: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
ac30: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
ac40: 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
ac50: 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
ac60: 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
ac70: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
ac80: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
ac90: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
aca0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
acb0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e  SQLITE_UTF8, (bN
acc0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
acd0: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
ace0: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
acf0: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
ad00: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
ad10: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  , 0}.#define FUN
ad20: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
ad30: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ad40: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
ad50: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
ad60: 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43 2a 53  ITE_UTF8, (bNC*S
ad70: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ad80: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
ad90: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
ada0: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
adb0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
adc0: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
add0: 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
ade0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
adf0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
ae00: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
ae10: 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c  TE_UTF8, bNC*SQL
ae20: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ae30: 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  L, \.   pArg, 0,
ae40: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
ae50: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
ae60: 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
ae70: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
ae80: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
ae90: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c   SQLITE_UTF8, fl
aea0: 61 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67  ags, (void *)arg
aeb0: 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
aec0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
aed0: 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  0}.#define AGGRE
aee0: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
aef0: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
af00: 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e  , xFinal) \.  {n
af10: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
af20: 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  , nc*SQLITE_FUNC
af30: 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20  _NEEDCOLL, \.   
af40: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
af50: 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53  R(arg), 0, 0, xS
af60: 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d  tep,xFinal,#zNam
af70: 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  e,0,0}../*.** Al
af80: 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f  l current savepo
af90: 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ints are stored 
afa0: 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  in a linked list
afb0: 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20   starting at.** 
afc0: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
afd0: 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  nt. The first el
afe0: 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73  ement in the lis
aff0: 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65  t is the most re
b000: 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64  cently.** opened
b010: 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65   savepoint. Save
b020: 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64  points are added
b030: 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20   to the list by 
b040: 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53  the vdbe.** OP_S
b050: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
b060: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
b070: 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68  Savepoint {.  ch
b080: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
b090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0a0: 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e    /* Savepoint n
b0b0: 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61  ame (nul-termina
b0c0: 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ted) */.  i64 nD
b0d0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b0f0: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
b100: 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e  red fk violation
b110: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
b120: 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
b130: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
b140: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28  rent savepoint (
b150: 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f  if any) */.};../
b160: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
b170: 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74  ng are used as t
b180: 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
b190: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61  ter to sqlite3Sa
b1a0: 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e  vepoint(),.** an
b1b0: 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75  d as the P1 argu
b1c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53  ment to the OP_S
b1d0: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
b1e0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  tion..*/.#define
b1f0: 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
b200: 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
b210: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
b220: 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  E    1.#define S
b230: 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
b240: 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  K   2.../*.** Ea
b250: 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65  ch SQLite module
b260: 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20   (virtual table 
b270: 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64  definition) is d
b280: 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20  efined by an.** 
b290: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b2a0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
b2b0: 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74  ure, stored in t
b2c0: 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75  he sqlite3.aModu
b2d0: 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  le.** hash table
b2e0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75  ..*/.struct Modu
b2f0: 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  le {.  const sql
b300: 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
b310: 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43  dule;       /* C
b320: 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73  allback pointers
b330: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
b340: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
b350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
b360: 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  me passed to cre
b370: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
b380: 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20    void *pAux;   
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3a0: 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70         /* pAux p
b3b0: 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
b3c0: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
b3d0: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
b3e0: 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20  oid *);         
b3f0: 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73     /* Module des
b400: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
b410: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e   */.};../*.** in
b420: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
b430: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  each column of a
b440: 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68  n SQL table is h
b450: 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e  eld in an instan
b460: 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
b470: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
b480: 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68  ct Column {.  ch
b490: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
b4a0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63  * Name of this c
b4b0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20  olumn */.  Expr 
b4c0: 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
b4d0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
b4e0: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
b4f0: 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20   char *zDflt;   
b500: 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
b510: 78 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  xt of the defaul
b520: 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61  t value */.  cha
b530: 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a  r *zType;     /*
b540: 20 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74   Data type for t
b550: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
b560: 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
b570: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
b580: 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
b590: 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
b5a0: 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
b5b0: 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45  l;      /* An OE
b5c0: 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c  _ code for handl
b5d0: 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ing a NOT NULL c
b5e0: 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63  onstraint */.  c
b5f0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
b600: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
b610: 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
b620: 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 63 6f 6c  ues */.  u16 col
b630: 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 42 6f 6f  Flags;    /* Boo
b640: 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
b650: 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64    See COLFLAG_ d
b660: 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  efines below */.
b670: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
b680: 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e  alues for Column
b690: 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64  .colFlags:.*/.#d
b6a0: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52  efine COLFLAG_PR
b6b0: 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20  IMKEY  0x0001   
b6c0: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61   /* Column is pa
b6d0: 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  rt of the primar
b6e0: 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
b6f0: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20   COLFLAG_HIDDEN 
b700: 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
b710: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69   hidden column i
b720: 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
b730: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  e */../*.** A "C
b740: 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
b750: 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
b760: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
b770: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
b780: 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
b790: 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
b7a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
b7b0: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
b7c0: 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
b7d0: 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
b7e0: 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
b7f0: 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
b800: 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uence..**.** If 
b810: 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20  CollSeq.xCmp is 
b820: 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74  NULL, it means t
b830: 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61  hat the.** colla
b840: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
b850: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64   undefined.  Ind
b860: 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e  ices built on an
b870: 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f   undefined.** co
b880: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b890: 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64   may not be read
b8a0: 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a   or written..*/.
b8b0: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b  struct CollSeq {
b8c0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
b8d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
b8e0: 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   of the collatin
b8f0: 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d  g sequence, UTF-
b900: 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75  8 encoded */.  u
b910: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
b920: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
b930: 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79  oding handled by
b940: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69   xCmp() */.  voi
b950: 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
b960: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
b970: 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
b980: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
b990: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
b9a0: 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
b9b0: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
b9c0: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
b9d0: 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
b9e0: 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
b9f0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f  ../*.** A sort o
ba00: 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68  rder can be eith
ba10: 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a  er ASC or DESC..
ba20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba30: 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30  E_SO_ASC       0
ba40: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
ba50: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
ba60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ba70: 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f  O_DESC      1  /
ba80: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
ba90: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a  ing order */../*
baa0: 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e  .** Column affin
bab0: 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a  ity types..**.**
bac0: 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68   These used to h
bad0: 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d  ave mnemonic nam
bae0: 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53  e like 'i' for S
baf0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
bb00: 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72  R and.** 't' for
bb10: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
bb20: 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61  .  But we can sa
bb30: 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63  ve a little spac
bb40: 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a  e and improve.**
bb50: 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74   the speed a lit
bb60: 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67  tle by numbering
bb70: 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73   the values cons
bb80: 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a  ecutively.  .**.
bb90: 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68  ** But rather th
bba0: 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20  an start with 0 
bbb0: 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77  or 1, we begin w
bbc0: 69 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77  ith 'a'.  That w
bbd0: 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74  ay,.** when mult
bbe0: 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79  iple affinity ty
bbf0: 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e  pes are concaten
bc00: 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69  ated into a stri
bc10: 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61  ng and.** used a
bc20: 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  s the P4 operand
bc30: 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d  , they will be m
bc40: 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a  ore readable..**
bc50: 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68  .** Note also th
bc60: 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  at the numeric t
bc70: 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64  ypes are grouped
bc80: 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61   together so tha
bc90: 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72  t testing.** for
bca0: 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20   a numeric type 
bcb0: 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70  is a single comp
bcc0: 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  arison..*/.#defi
bcd0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
bce0: 58 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69  XT     'a'.#defi
bcf0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ne SQLITE_AFF_NO
bd00: 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69  NE     'b'.#defi
bd10: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
bd20: 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69  MERIC  'c'.#defi
bd30: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
bd40: 54 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69  TEGER  'd'.#defi
bd50: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
bd60: 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66  AL     'e'..#def
bd70: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
bd80: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
bd90: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
bda0: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
bdb0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
bdc0: 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
bdd0: 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
bde0: 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
bdf0: 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
be00: 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  lue. .*/.#define
be10: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
be20: 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a       0x67../*.**
be30: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
be40: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
be50: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
be60: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
be70: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
be80: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a 23 64   affinity..*/.#d
be90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
bea0: 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20  PIFNULL   0x08  
beb0: 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
bec0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
bed0: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
bee0: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
bef0: 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65    0x10  /* Store
bf00: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
bf10: 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
bf20: 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
bf30: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
bf40: 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
bf50: 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  =NULL */../*.** 
bf60: 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
bf70: 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
bf80: 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
bf90: 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
bfa0: 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
bfb0: 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a  ase schema. .**.
bfc0: 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  ** If the databa
bfd0: 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  se schema is sha
bfe0: 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  red, then there 
bff0: 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  is one instance 
c000: 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  of this.** struc
c010: 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61  ture for each da
c020: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
c030: 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61  n (sqlite3*) tha
c040: 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65  t uses the share
c050: 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69  d.** schema. Thi
c060: 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63  s is because eac
c070: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
c080: 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69  ction requires i
c090: 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a  ts own unique.**
c0a0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
c0b0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
c0c0: 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63  andle used to ac
c0d0: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
c0e0: 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65   table .** imple
c0f0: 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
c100: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
c110: 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
c120: 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64  ed between .** d
c130: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
c140: 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74  ons, even when t
c150: 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69  he rest of the i
c160: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
c170: 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  e .** schema is 
c180: 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69  shared, as the i
c190: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
c1a0: 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64  ten stores the d
c1b0: 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
c1c0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73  ction handle pas
c1d0: 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68  sed to it via th
c1e0: 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20  e xConnect() or 
c1f0: 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64  xCreate() method
c200: 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69  .** during initi
c210: 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e  alization intern
c220: 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62  ally. This datab
c230: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
c240: 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65  andle may.** the
c250: 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  n be used by the
c260: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
c270: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
c280: 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62   access real tab
c290: 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74  les .** within t
c2a0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
c2b0: 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
c2c0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
c2d0: 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e  callers .** tran
c2e0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61  saction, these a
c2f0: 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20  ccesses need to 
c300: 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20  be made via the 
c310: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a  same database .*
c320: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20  * connection as 
c330: 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65  that used to exe
c340: 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69  cute SQL operati
c350: 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75  ons on the virtu
c360: 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  al table..**.** 
c370: 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  All VTable objec
c380: 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  ts that correspo
c390: 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74  nd to a single t
c3a0: 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64  able in a shared
c3b0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68  .** database sch
c3c0: 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c  ema are initiall
c3d0: 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  y stored in a li
c3e0: 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65  nked-list pointe
c3f0: 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54  d to by.** the T
c400: 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d  able.pVTable mem
c410: 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20  ber variable of 
c420: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
c430: 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a  g Table object..
c440: 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74  ** When an sqlit
c450: 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65  e3_prepare() ope
c460: 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72  ration is requir
c470: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
c480: 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
c490: 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74  e, it searches t
c4a0: 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20  he list for the 
c4b0: 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72  VTable that corr
c4c0: 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a  esponds to the.*
c4d0: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
c4e0: 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20  ction doing the 
c4f0: 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20  preparing so as 
c500: 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65  to use the corre
c510: 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74  ct.** sqlite3_vt
c520: 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68  ab* handle in th
c530: 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79  e compiled query
c540: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ..**.** When an 
c550: 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20  in-memory Table 
c560: 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65  object is delete
c570: 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77  d (for example w
c580: 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d  hen the.** schem
c590: 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61  a is being reloa
c5a0: 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61  ded for some rea
c5b0: 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65  son), the VTable
c5c0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74   objects are not
c5d0: 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64   .** deleted and
c5e0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
c5f0: 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e  b* handles are n
c600: 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29  ot xDisconnect()
c610: 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ed .** immediate
c620: 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  ly. Instead, the
c630: 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  y are moved from
c640: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
c650: 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e  le list to.** an
c660: 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73  other linked lis
c670: 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20  t headed by the 
c680: 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
c690: 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ect member of th
c6a0: 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
c6b0: 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63  ng sqlite3 struc
c6c0: 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74  ture. They are t
c6d0: 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73  hen deleted/xDis
c6e0: 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65  connected .** ne
c6f0: 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d  xt time a statem
c700: 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
c710: 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74  using said sqlit
c720: 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  e3*. This is don
c730: 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65  e.** to avoid de
c740: 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e  adlock issues in
c750: 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
c760: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
c770: 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72  utexes..** Refer
c780: 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f   to comments abo
c790: 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ve function sqli
c7a0: 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
c7b0: 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  t() for an.** ex
c7c0: 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20  planation as to 
c7d0: 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74  why it is safe t
c7e0: 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74  o add an entry t
c7f0: 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69  o an sqlite3.pDi
c800: 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74  sconnect.** list
c810: 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67   without holding
c820: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
c830: 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  ng sqlite3.mutex
c840: 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   mutex..**.** Th
c850: 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a  e memory for obj
c860: 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70  ects of this typ
c870: 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f  e is always allo
c880: 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c  cated by .** sql
c890: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20  ite3DbMalloc(), 
c8a0: 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
c8b0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72  tion handle stor
c8c0: 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20  ed in VTable.db 
c8d0: 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74  as .** the first
c8e0: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
c8f0: 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
c900: 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
c910: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
c920: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
c930: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
c940: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
c950: 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
c960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
c970: 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
c980: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
c990: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
c9a0: 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
c9b0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
c9c0: 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
c9d0: 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
c9e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c9f0: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
ca00: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
ca10: 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
ca20: 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
ca30: 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
ca40: 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
ca50: 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
ca60: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
ca70: 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
ca80: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
ca90: 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
caa0: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
cab0: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
cac0: 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
cad0: 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
cae0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c  ** Each SQL tabl
caf0: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
cb00: 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
cb10: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
cb20: 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  .** following st
cb30: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
cb40: 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68  able.zName is th
cb50: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
cb60: 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f  ble.  The case o
cb70: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a  f the original.*
cb80: 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  * CREATE TABLE s
cb90: 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72  tatement is stor
cba0: 65 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20  ed, but case is 
cbb0: 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20  not significant 
cbc0: 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  for.** compariso
cbd0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  ns..**.** Table.
cbe0: 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62  nCol is the numb
cbf0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
cc00: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61   this table.  Ta
cc10: 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a  ble.aCol is a.**
cc20: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61   pointer to an a
cc30: 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73  rray of Column s
cc40: 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66  tructures, one f
cc50: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a  or each column..
cc60: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  **.** If the tab
cc70: 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45  le has an INTEGE
cc80: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74  R PRIMARY KEY, t
cc90: 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20  hen Table.iPKey 
cca0: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a  is the index of.
ccb0: 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68  ** the column th
ccc0: 61 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20  at is that key. 
ccd0: 20 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c    Otherwise Tabl
cce0: 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74  e.iPKey is negat
ccf0: 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68  ive.  Note.** th
cd00: 61 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20  at the datatype 
cd10: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
cd20: 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47  EY must be INTEG
cd30: 45 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c  ER for this fiel
cd40: 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20  d to.** be set. 
cd50: 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   An INTEGER PRIM
cd60: 41 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20  ARY KEY is used 
cd70: 61 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  as the rowid for
cd80: 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20   each row of.** 
cd90: 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61  the table.  If a
cda0: 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e   table has no IN
cdb0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
cdc0: 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d  Y, then a random
cdd0: 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e   rowid.** is gen
cde0: 65 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  erated for each 
cdf0: 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65  row of the table
ce00: 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  .  TF_HasPrimary
ce10: 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a  Key is set if.**
ce20: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
ce30: 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ny PRIMARY KEY, 
ce40: 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72  INTEGER or other
ce50: 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  wise..**.** Tabl
ce60: 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61  e.tnum is the pa
ce70: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
ce80: 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67  e root BTree pag
ce90: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  e of the table i
cea0: 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  n the.** databas
ceb0: 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c  e file.  If Tabl
cec0: 65 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64  e.iDb is the ind
ced0: 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
cee0: 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64  se table backend
cef0: 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44  .** in sqlite.aD
cf00: 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74  b[].  0 is for t
cf10: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
cf20: 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68   and 1 is for th
cf30: 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68  e file that.** h
cf40: 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74  olds temporary t
cf50: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
cf60: 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65  s.  If TF_Epheme
cf70: 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68  ral is set.** th
cf80: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  en the table is 
cf90: 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65  stored in a file
cfa0: 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74   that is automat
cfb0: 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a  ically deleted.*
cfc0: 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  * when the VDBE 
cfd0: 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61  cursor to the ta
cfe0: 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20  ble is closed.  
cff0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62  In this case Tab
d000: 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65  le.tnum .** refe
d010: 72 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  rs VDBE cursor n
d020: 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73  umber that holds
d030: 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c   the table open,
d040: 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74   not to the root
d050: 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  .** page number.
d060: 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c    Transient tabl
d070: 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68  es are used to h
d080: 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20  old the results 
d090: 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72  of a.** sub-quer
d0a0: 79 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69  y that appears i
d0b0: 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c  nstead of a real
d0c0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74   table name in t
d0d0: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a  he FROM clause .
d0e0: 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ** of a SELECT s
d0f0: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
d100: 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
d110: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
d120: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
d130: 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
d140: 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
d150: 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
d160: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
d170: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
d180: 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
d190: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
d1a0: 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
d1b0: 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
d1c0: 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
d1d0: 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
d1e0: 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
d1f0: 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
d200: 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
d210: 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
d220: 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
d230: 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
d240: 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
d250: 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
d260: 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
d270: 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
d280: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
d290: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
d2a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d2b0: 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70  OMIT_CHECK.  Exp
d2c0: 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20  rList *pCheck;  
d2d0: 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63    /* All CHECK c
d2e0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65  onstraints */.#e
d2f0: 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e 74 20 6e  ndif.  tRowcnt n
d300: 52 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a 20 45  RowEst;     /* E
d310: 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e  stimated rows in
d320: 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71   table - from sq
d330: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
d340: 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
d350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
d360: 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f  ot BTree node fo
d370: 72 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65  r this table (se
d380: 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f  e note above) */
d390: 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
d3a0: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
d3b0: 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
d3c0: 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
d3d0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
d3e0: 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20  /.  i16 nCol;   
d3f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
d400: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
d410: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
d420: 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20   u16 nRef;      
d430: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d440: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
d450: 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75  his Table */.  u
d460: 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  8 tabFlags;     
d470: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
d480: 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
d490: 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
d4a0: 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
d4b0: 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
d4c0: 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
d4d0: 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69  t on iPKey */.#i
d4e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d4f0: 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
d500: 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b  nt addColOffset;
d510: 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
d520: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
d530: 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  mt to add a new 
d540: 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
d550: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d560: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
d570: 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41  E.  int nModuleA
d580: 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  rg;      /* Numb
d590: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
d5a0: 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f  to the module */
d5b0: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75  .  char **azModu
d5c0: 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20  leArg;  /* Text 
d5d0: 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72  of all module ar
d5e0: 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c  gs. [0] is modul
d5f0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62  e name */.  VTab
d600: 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20  le *pVTable;    
d610: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62   /* List of VTab
d620: 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23  le objects. */.#
d630: 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20  endif.  Trigger 
d640: 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20  *pTrigger;   /* 
d650: 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73  List of triggers
d660: 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65   stored in pSche
d670: 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
d680: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
d690: 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74  Schema that cont
d6a0: 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20  ains this table 
d6b0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78  */.  Table *pNex
d6c0: 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78  tZombie;  /* Nex
d6d0: 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70  t on the Parse.p
d6e0: 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a  ZombieTab list *
d6f0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
d700: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54  wed values for T
d710: 61 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f  abe.tabFlags..*/
d720: 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64  .#define TF_Read
d730: 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31  only        0x01
d740: 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
d750: 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
d760: 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
d770: 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32  meral       0x02
d780: 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
d790: 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
d7a0: 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
d7b0: 72 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20  ryKey   0x04    
d7c0: 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
d7d0: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
d7e0: 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
d7f0: 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20  rement   0x08   
d800: 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d   /* Integer prim
d810: 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69  ary key is autoi
d820: 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66  ncrement */.#def
d830: 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20  ine TF_Virtual  
d840: 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
d850: 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74  * Is a virtual t
d860: 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  able */.../*.** 
d870: 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
d880: 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
d890: 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
d8a0: 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
d8b0: 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
d8c0: 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
d8d0: 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
d8e0: 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
d8f0: 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
d900: 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
d910: 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
d920: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d930: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
d940: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
d950: 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28  tual(X)      (((
d960: 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
d970: 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23  F_Virtual)!=0).#
d980: 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
d990: 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
d9a0: 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
d9b0: 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
d9c0: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
d9d0: 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
d9e0: 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
d9f0: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
da00: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
da10: 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
da20: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
da30: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
da40: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
da50: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
da60: 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
da70: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
da80: 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
da90: 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
daa0: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
dab0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
dac0: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
dad0: 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
dae0: 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
daf0: 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
db00: 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
db10: 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
db20: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
db30: 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
db40: 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
db50: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
db60: 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
db70: 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
db80: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
db90: 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
dba0: 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
dbb0: 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
dbc0: 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
dbd0: 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
dbe0: 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
dbf0: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
dc00: 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
dc10: 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a   is "ex2"..**.**
dc20: 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53   Each REFERENCES
dc30: 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65   clause generate
dc40: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
dc50: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
dc60: 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63  tructure.** whic
dc70: 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  h is attached to
dc80: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
dc90: 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e    The to-table n
dca0: 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68  eed not exist wh
dcb0: 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74  en.** the from-t
dcc0: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
dcd0: 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20    The existence 
dce0: 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  of the to-table 
dcf0: 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a  is not checked..
dd00: 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
dd10: 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
dd20: 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
dd30: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
dd40: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
dd50: 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
dd60: 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
dd70: 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69  ;  /* Next forei
dd80: 67 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20  gn key in pFrom 
dd90: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20  */.  char *zTo; 
dda0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
ddb0: 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  f table that the
ddc0: 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28   key points to (
ddd0: 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a  aka: Parent) */.
dde0: 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b    FKey *pNextTo;
ddf0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65      /* Next fore
de00: 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65  ign key on table
de10: 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20   named zTo */.  
de20: 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
de30: 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 66 6f    /* Previous fo
de40: 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62  reign key on tab
de50: 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a  le named zTo */.
de60: 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
de70: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
de80: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
de90: 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a   key */.  /* EV:
dea0: 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a   R-30323-21917 *
deb0: 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65  /.  u8 isDeferre
dec0: 64 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  d;    /* True if
ded0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63   constraint chec
dee0: 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64  king is deferred
def0: 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a   till COMMIT */.
df00: 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b    u8 aAction[2];
df10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20            /* ON 
df20: 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
df30: 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
df40: 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
df50: 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
df60: 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69 67 67  er[2];  /* Trigg
df70: 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
df80: 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
df90: 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
dfa0: 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63   /* Mapping of c
dfb0: 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20  olumns in pFrom 
dfc0: 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54  to columns in zT
dfd0: 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72  o */.    int iFr
dfe0: 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  om;         /* I
dff0: 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  ndex of column i
e000: 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63  n pFrom */.    c
e010: 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20  har *zCol;      
e020: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
e030: 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
e040: 30 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  0 use PRIMARY KE
e050: 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
e060: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20  ;        /* One 
e070: 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f  entry for each o
e080: 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20  f nCol column s 
e090: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
e0a0: 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
e0b0: 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
e0c0: 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
e0d0: 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
e0e0: 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
e0f0: 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
e100: 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
e110: 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
e120: 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
e130: 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
e140: 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
e150: 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
e160: 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
e170: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
e180: 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
e190: 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
e1a0: 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
e1b0: 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
e1c0: 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
e1d0: 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
e1e0: 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
e1f0: 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
e200: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
e210: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
e220: 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
e230: 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
e240: 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
e250: 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
e260: 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
e270: 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
e280: 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
e290: 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
e2a0: 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
e2b0: 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
e2c0: 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
e2d0: 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
e2e0: 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
e2f0: 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
e300: 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
e310: 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
e320: 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
e330: 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
e340: 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
e350: 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
e360: 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
e370: 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
e380: 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
e390: 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
e3a0: 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
e3b0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
e3c0: 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
e3d0: 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
e3e0: 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
e3f0: 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
e400: 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
e410: 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
e420: 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
e430: 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
e440: 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
e450: 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
e460: 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
e470: 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
e480: 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
e490: 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
e4a0: 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
e4b0: 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
e4c0: 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
e4d0: 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
e4e0: 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
e4f0: 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
e500: 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
e510: 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
e520: 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
e530: 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
e540: 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
e550: 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
e560: 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
e570: 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
e580: 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
e590: 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
e5a0: 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c  ..** .** The fol
e5b0: 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20  lowing symbolic 
e5c0: 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
e5d0: 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20  to record which 
e5e0: 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f  type.** of actio
e5f0: 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64  n to take..*/.#d
e600: 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20  efine OE_None   
e610: 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69    0   /* There i
e620: 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20  s no constraint 
e630: 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66  to check */.#def
e640: 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  ine OE_Rollback 
e650: 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20  1   /* Fail the 
e660: 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f  operation and ro
e670: 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
e680: 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
e690: 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20  e OE_Abort    2 
e6a0: 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68    /* Back out ch
e6b0: 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20  anges but do no 
e6c0: 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
e6d0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e6e0: 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20  OE_Fail     3   
e6f0: 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72  /* Stop the oper
e700: 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20  ation but leave 
e710: 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65  all prior change
e720: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
e730: 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20  Ignore   4   /* 
e740: 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72  Ignore the error
e750: 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20  . Do not do the 
e760: 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
e770: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
e780: 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44  eplace  5   /* D
e790: 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72  elete existing r
e7a0: 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49  ecord, then do I
e7b0: 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
e7c0: 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52  */..#define OE_R
e7d0: 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f  estrict 6   /* O
e7e0: 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45  E_Abort for IMME
e7f0: 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61  DIATE, OE_Rollba
e800: 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  ck for DEFERRED 
e810: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65  */.#define OE_Se
e820: 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65  tNull  7   /* Se
e830: 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  t the foreign ke
e840: 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  y value to NULL 
e850: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65  */.#define OE_Se
e860: 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65  tDflt  8   /* Se
e870: 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  t the foreign ke
e880: 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64  y value to its d
e890: 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  efault */.#defin
e8a0: 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20  e OE_Cascade  9 
e8b0: 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65    /* Cascade the
e8c0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65   changes */..#de
e8d0: 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20  fine OE_Default 
e8e0: 20 39 39 20 20 2f 2a 20 44 6f 20 77 68 61 74 65   99  /* Do whate
e8f0: 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  ver the default 
e900: 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f  action is */.../
e910: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
e920: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
e930: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  g structure is p
e940: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72  assed as the fir
e950: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74  st.** argument t
e960: 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79  o sqlite3VdbeKey
e970: 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75  Compare and is u
e980: 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74  sed to control t
e990: 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  he .** compariso
e9a0: 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
e9b0: 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74 72 75  ex keys..*/.stru
e9c0: 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73  ct KeyInfo {.  s
e9d0: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
e9e0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
e9f0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
ea00: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
ea10: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
ea20: 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66  ncoding - one of
ea30: 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a   the SQLITE_UTF*
ea40: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
ea50: 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
ea60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
ea70: 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d  tries in aColl[]
ea80: 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
ea90: 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
eaa0: 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
eab0: 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20 62 65   column.  May be
eac0: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c 6c 53   NULL */.  CollS
ead0: 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
eae0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
eaf0: 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
eb00: 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
eb10: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
eb20: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
eb30: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
eb40: 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
eb50: 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73  ion about a.** s
eb60: 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f  ingle index reco
eb70: 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
eb80: 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20  ady been parsed 
eb90: 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
eba0: 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ual.** values..*
ebb0: 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
ebc0: 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
ebd0: 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
ebe0: 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
ebf0: 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
ec00: 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
ec10: 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
ec20: 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
ec30: 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
ec40: 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
ec50: 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
ec60: 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
ec70: 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
ec80: 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
ec90: 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
eca0: 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
ecb0: 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
ecc0: 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
ecd0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ode..**.** This 
ece0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
ecf0: 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  a record that ha
ed00: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64  s already been d
ed10: 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69  isassembled.** i
ed20: 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75  nto its constitu
ed30: 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73  ent fields..*/.s
ed40: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
ed50: 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f  cord {.  KeyInfo
ed60: 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20   *pKeyInfo;  /* 
ed70: 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f  Collation and so
ed80: 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61  rt-order informa
ed90: 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46  tion */.  u16 nF
eda0: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
edb0: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
edc0: 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f  es in apMem[] */
edd0: 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20  .  u8 flags;    
ede0: 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61         /* Boolea
edf0: 6e 20 73 65 74 74 69 6e 67 73 2e 20 20 55 4e 50  n settings.  UNP
ee00: 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20  ACKED_... below 
ee10: 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20  */.  i64 rowid; 
ee20: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
ee30: 20 62 79 20 55 4e 50 41 43 4b 45 44 5f 50 52 45   by UNPACKED_PRE
ee40: 46 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20  FIX_SEARCH */.  
ee50: 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20  Mem *aMem;      
ee60: 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f      /* Values */
ee70: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
ee80: 65 64 20 76 61 6c 75 65 73 20 6f 66 20 55 6e 70  ed values of Unp
ee90: 61 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c 61 67  ackedRecord.flag
eea0: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50  s.*/.#define UNP
eeb0: 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 20 20  ACKED_INCRKEY   
eec0: 20 20 20 20 30 78 30 31 20 20 2f 2a 20 4d 61 6b      0x01  /* Mak
eed0: 65 20 74 68 69 73 20 6b 65 79 20 61 6e 20 65 70  e this key an ep
eee0: 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a 2f 0a  silon larger */.
eef0: 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44  #define UNPACKED
ef00: 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 20 20 30  _PREFIX_MATCH  0
ef10: 78 30 32 20 20 2f 2a 20 41 20 70 72 65 66 69 78  x02  /* A prefix
ef20: 20 6d 61 74 63 68 20 69 73 20 63 6f 6e 73 69 64   match is consid
ef30: 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65 66 69  ered OK */.#defi
ef40: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  ne UNPACKED_PREF
ef50: 49 58 5f 53 45 41 52 43 48 20 30 78 30 34 20 20  IX_SEARCH 0x04  
ef60: 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61 6c 20  /* Ignore final 
ef70: 28 72 6f 77 69 64 29 20 66 69 65 6c 64 20 2a 2f  (rowid) field */
ef80: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
ef90: 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
efa0: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
efb0: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
efc0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
efd0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
efe0: 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
eff0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
f000: 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
f010: 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
f020: 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
f030: 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
f040: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
f050: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
f060: 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
f070: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
f080: 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
f090: 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
f0a0: 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
f0b0: 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
f0c0: 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
f0d0: 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
f0e0: 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
f0f0: 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
f100: 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
f110: 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
f120: 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
f130: 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
f140: 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
f150: 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
f160: 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
f170: 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
f180: 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
f190: 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
f1a0: 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
f1b0: 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
f1c0: 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
f1d0: 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
f1e0: 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
f1f0: 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63   the .** first c
f200: 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
f210: 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
f220: 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
f230: 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
f240: 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
f250: 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
f260: 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
f270: 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
f280: 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
f290: 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
f2a0: 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
f2b0: 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
f2c0: 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
f2d0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
f2e0: 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
f2f0: 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
f300: 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
f310: 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
f320: 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
f330: 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
f340: 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
f350: 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
f360: 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
f370: 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
f380: 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
f390: 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
f3a0: 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
f3b0: 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
f3c0: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20   resolution .** 
f3d0: 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
f3e0: 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
f3f0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
f400: 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
f410: 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
f420: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  t..*/.struct Ind
f430: 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
f440: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
f450: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
f460: 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a  index */.  int *
f470: 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
f480: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
f490: 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
f4a0: 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
f4b0: 74 20 69 73 20 30 20 2a 2f 0a 20 20 74 52 6f 77  t is 0 */.  tRow
f4c0: 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
f4d0: 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
f4e0: 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
f4f0: 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
f500: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
f510: 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
f520: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
f530: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
f540: 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
f550: 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
f560: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
f570: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
f580: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
f590: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
f5a0: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
f5b0: 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
f5c0: 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
f5d0: 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
f5e0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
f5f0: 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
f600: 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
f610: 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
f620: 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
f630: 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
f640: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
f650: 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
f660: 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61  se==ASC */.  cha
f670: 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
f680: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
f690: 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
f6a0: 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
f6b0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ndex */.  int tn
f6c0: 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
f6d0: 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
f6e0: 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
f6f0: 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
f700: 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   u16 nColumn;   
f710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f720: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
f730: 6e 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  n table used by 
f740: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f750: 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
f760: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
f770: 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
f780: 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
f790: 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
f7a0: 69 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78 3a  igned autoIndex:
f7b0: 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51  2;    /* 1==UNIQ
f7c0: 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
f7d0: 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
f7e0: 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
f7f0: 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
f800: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
f810: 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
f820: 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
f830: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
f840: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 20 20 69 6e  NABLE_STAT3.  in
f850: 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
f860: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f870: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
f880: 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 74  aSample[] */.  t
f890: 52 6f 77 63 6e 74 20 61 76 67 45 71 3b 20 20 20  Rowcnt avgEq;   
f8a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
f8b0: 67 65 20 6e 45 71 20 76 61 6c 75 65 20 66 6f 72  ge nEq value for
f8c0: 20 6b 65 79 20 76 61 6c 75 65 73 20 6e 6f 74 20   key values not 
f8d0: 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20  in aSample */.  
f8e0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61  IndexSample *aSa
f8f0: 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70  mple;    /* Samp
f900: 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  les of the left-
f910: 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64  most key */.#end
f920: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  if.};../*.** Eac
f930: 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
f940: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
f950: 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
f960: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
f970: 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
f980: 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
f990: 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
f9a0: 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
f9b0: 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
f9c0: 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
f9d0: 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
f9e0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
f9f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
fa00: 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e  Sample {.  union
fa10: 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b 20   {.    char *z; 
fa20: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
fa30: 69 66 20 65 54 79 70 65 20 69 73 20 53 51 4c 49  if eType is SQLI
fa40: 54 45 5f 54 45 58 54 20 6f 72 20 53 51 4c 49 54  TE_TEXT or SQLIT
fa50: 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20 20 64 6f  E_BLOB */.    do
fa60: 75 62 6c 65 20 72 3b 20 20 20 20 20 20 20 2f 2a  uble r;       /*
fa70: 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65 20   Value if eType 
fa80: 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 20  is SQLITE_FLOAT 
fa90: 2a 2f 0a 20 20 20 20 69 36 34 20 69 3b 20 20 20  */.    i64 i;   
faa0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
fab0: 69 66 20 65 54 79 70 65 20 69 73 20 53 51 4c 49  if eType is SQLI
fac0: 54 45 5f 49 4e 54 45 47 45 52 20 2a 2f 0a 20 20  TE_INTEGER */.  
fad0: 7d 20 75 3b 0a 20 20 75 38 20 65 54 79 70 65 3b  } u;.  u8 eType;
fae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49           /* SQLI
faf0: 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f  TE_NULL, SQLITE_
fb00: 49 4e 54 45 47 45 52 20 2e 2e 2e 20 65 74 63 2e  INTEGER ... etc.
fb10: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
fb20: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
fb30: 69 6e 20 62 79 74 65 20 6f 66 20 74 65 78 74 20  in byte of text 
fb40: 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a 20 20 74 52  or blob. */.  tR
fb50: 6f 77 63 6e 74 20 6e 45 71 3b 20 20 20 20 20 20  owcnt nEq;      
fb60: 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
fb70: 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
fb80: 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
fb90: 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
fba0: 77 63 6e 74 20 6e 4c 74 3b 20 20 20 20 20 20 2f  wcnt nLt;      /
fbb0: 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
fbc0: 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
fbd0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
fbe0: 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
fbf0: 6f 77 63 6e 74 20 6e 44 4c 74 3b 20 20 20 20 20  owcnt nDLt;     
fc00: 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
fc10: 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
fc20: 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
fc30: 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
fc40: 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f  ** Each token co
fc50: 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20  ming out of the 
fc60: 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74  lexer is an inst
fc70: 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
fc80: 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65  structure.  Toke
fc90: 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64  ns are also used
fca0: 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   as part of an e
fcb0: 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  xpression..**.**
fcc0: 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a   Note if Token.z
fcd0: 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64  ==0 then Token.d
fce0: 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61  yn and Token.n a
fcf0: 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64  re undefined and
fd00: 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  .** may contain 
fd10: 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20  random values.  
fd20: 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20  Do not make any 
fd30: 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75  assumptions abou
fd40: 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61  t Token.dyn.** a
fd50: 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20  nd Token.n when 
fd60: 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73  Token.z==0..*/.s
fd70: 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
fd80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
fd90: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
fda0: 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
fdb0: 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
fdc0: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
fdd0: 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
fde0: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
fdf0: 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
fe00: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
fe10: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
fe20: 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
fe30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
fe40: 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
fe50: 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
fe60: 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
fe70: 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
fe80: 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
fe90: 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
fea0: 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
feb0: 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
fec0: 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
fed0: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
fee0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
fef0: 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
ff00: 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
ff10: 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
ff20: 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
ff30: 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
ff40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
ff50: 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
ff60: 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
ff70: 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
ff80: 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
ff90: 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
ffa0: 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
ffb0: 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
ffc0: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
ffd0: 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
ffe0: 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
fff0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
10000 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
10010 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
10020 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
10030 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
10040 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
10050 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
10060 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
10070 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
10080 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
10090 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
100a0 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
100b0 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
100d0 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
100e0 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
100f0 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
10100 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
10110 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
10120 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
10130 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
10140 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
10150 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10170 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
10180 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
10190 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
101a0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
101b0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
101c0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
101d0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
101e0 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
101f0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
10200 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
10210 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
10220 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
10230 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
10240 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
10250 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
10260 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
10270 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
10280 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
10290 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
102a0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
102b0 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
102c0 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
102d0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
102e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
102f0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
10300 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
10310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
10320 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
10330 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
10340 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
10350 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
10360 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
10370 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
10380 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
10390 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
103a0 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
103b0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
103c0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
103d0 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
103e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
103f0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
10400 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
10410 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
10420 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
10430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
10440 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
10450 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
10460 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
10470 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
10480 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
10490 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
104a0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
104b0 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
104c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
104d0 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
104e0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
104f0 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
10510 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
10520 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
10530 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
10540 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
10550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
10560 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10570 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
10580 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
10590 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
105a0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
105b0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
105c0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
105d0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
105e0 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
105f0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
10600 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
10610 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
10620 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
10630 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
10640 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10660 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
10670 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
10680 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
10690 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
106a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
106b0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
106c0 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
106d0 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
106e0 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
106f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
10700 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
10710 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
10720 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
10730 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
10740 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
10750 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
10760 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
10770 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
10780 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
10790 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
107a0 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
107b0 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
107c0 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
107d0 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
107e0 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
107f0 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
10800 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
10810 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
10820 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
10830 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
10840 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
10850 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
10860 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
10870 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
10880 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
10890 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
108a0 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
108b0 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
108c0 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
108d0 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
108e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
108f0 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
10900 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
10910 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
10920 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
10930 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
10940 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
10950 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
10960 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
10970 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
10980 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
10990 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
109a0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
109b0 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
109c0 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
109d0 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
109e0 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
109f0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
10a00 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
10a10 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
10a20 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
10a30 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
10a40 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
10a50 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
10a60 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
10a70 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
10a80 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
10a90 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
10aa0 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
10ab0 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
10ac0 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
10ad0 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
10ae0 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
10af0 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
10b00 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
10b10 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
10b20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
10b30 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
10b40 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
10b50 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
10b60 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20  FLOAT, TK_BLOB, 
10b70 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
10b80 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
10b90 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
10ba0 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
10bb0 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
10bc0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
10bd0 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
10be0 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
10bf0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
10c00 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69  ins the .** vari
10c10 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c  able name. Final
10c20 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  ly, if the expre
10c30 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
10c40 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e  function (TK_FUN
10c50 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20  CTION),.** then 
10c60 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
10c70 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ins the name of 
10c80 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
10c90 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20  .** Expr.pRight 
10ca0 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61  and Expr.pLeft a
10cb0 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
10cc0 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73  right subexpress
10cd0 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e  ions of a.** bin
10ce0 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69  ary operator. Ei
10cf0 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79  ther or both may
10d00 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   be NULL..**.** 
10d10 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
10d20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
10d30 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65  nts if the expre
10d40 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
10d50 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43  function,.** a C
10d60 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  ASE expression o
10d70 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69  r an IN expressi
10d80 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  on of the form "
10d90 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c  <lhs> IN (<y>, <
10da0 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72  z>...)"..** Expr
10db0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73  .x.pSelect is us
10dc0 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ed if the expres
10dd0 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
10de0 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65  lect or an expre
10df0 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ssion of.** the 
10e00 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
10e10 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66  SELECT ...)". If
10e20 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63   the EP_xIsSelec
10e30 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  t bit is set in 
10e40 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
10e50 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70  s mask, then Exp
10e60 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  r.x.pSelect is v
10e70 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  alid. Otherwise,
10e80 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
10e90 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a   .** valid..**.*
10ea0 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
10eb0 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
10ec0 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
10ed0 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
10ee0 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
10ef0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
10f00 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
10f10 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
10f20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
10f30 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
10f40 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
10f50 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
10f60 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
10f70 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
10f80 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
10f90 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
10fa0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
10fb0 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
10fc0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
10fd0 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
10fe0 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
10ff0 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
11000 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
11010 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
11020 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
11030 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
11040 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
11050 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
11060 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
11070 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
11080 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
11090 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
110a0 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
110b0 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
110c0 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68  tion mark .** ch
110d0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
110e0 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
110f0 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
11100 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
11110 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72  index .** number
11120 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
11130 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
11140 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
11150 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
11160 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
11170 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
11180 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
11190 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
111a0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
111b0 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
111c0 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
111d0 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
111e0 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
111f0 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
11200 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
11210 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
11220 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
11230 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
11240 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
11250 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
11260 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
11270 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
11280 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
11290 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
112a0 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
112b0 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
112c0 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
112d0 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
112e0 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
112f0 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
11300 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
11310 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
11320 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
11330 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
11340 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
11350 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
11360 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
11370 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
11380 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
11390 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
113a0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
113b0 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
113c0 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
113d0 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
113e0 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
113f0 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
11400 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
11410 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
11420 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
11430 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
11440 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
11450 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
11460 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
11470 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
11480 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
11490 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
114a0 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
114b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
114c0 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
114d0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
114e0 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
114f0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
11500 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
11510 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
11520 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
11530 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
11540 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
11550 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
11560 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
11570 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
11580 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
11590 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
115a0 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
115b0 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
115c0 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
115d0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
115e0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
115f0 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
11600 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
11610 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
11620 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
11630 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
11640 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
11650 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11670 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
11680 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
11690 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
116a0 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
116b0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
116c0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
116d0 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
116e0 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11700 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
11710 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
11720 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
11730 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
11740 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
11750 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
11760 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
11770 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
11780 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
11790 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
117a0 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
117b0 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
117c0 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
117d0 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
117e0 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
117f0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
11800 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
11810 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
11820 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
11830 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
11840 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
11850 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
11860 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
11870 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
11880 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
11890 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   .  ************
118a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
118e0 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
118f0 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
11900 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
11910 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
11920 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
11930 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
11940 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
11950 73 74 3b 20 20 20 20 20 2f 2a 20 46 75 6e 63 74  st;     /* Funct
11960 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 6f 72  ion arguments or
11970 20 69 6e 20 22 3c 65 78 70 72 3e 20 49 4e 20 28   in "<expr> IN (
11980 3c 65 78 70 72 2d 6c 69 73 74 29 22 20 2a 2f 0a  <expr-list)" */.
11990 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
119a0 65 63 74 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  ect;     /* Used
119b0 20 66 6f 72 20 73 75 62 2d 73 65 6c 65 63 74 73   for sub-selects
119c0 20 61 6e 64 20 22 3c 65 78 70 72 3e 20 49 4e 20   and "<expr> IN 
119d0 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a 2f 0a 20  (<select>)" */. 
119e0 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
119f0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
11a00 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
11a10 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
11a20 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
11a30 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
11a40 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
11a50 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
11a60 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
11a70 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
11a80 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
11a90 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
11aa0 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
11ab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11af0 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
11b00 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
11b10 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
11b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
11b30 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
11b40 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
11b50 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
11b60 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
11b70 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
11b80 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
11b90 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
11ba0 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
11bd0 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
11be0 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11c00 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
11c10 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 20  > new, 0 -> old 
11c20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
11c30 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
11c40 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
11c50 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
11c60 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
11c90 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
11ca0 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
11cb0 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
11cc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
11cd0 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
11ce0 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
11cf0 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
11d00 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
11d10 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
11d20 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
11d30 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
11d40 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 66 6c   join */.  u8 fl
11d50 61 67 73 32 3b 20 20 20 20 20 20 20 20 20 20 20  ags2;           
11d60 20 20 2f 2a 20 53 65 63 6f 6e 64 20 73 65 74 20    /* Second set 
11d70 6f 66 20 66 6c 61 67 73 2e 20 20 45 50 32 5f 2e  of flags.  EP2_.
11d80 2e 2e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  .. */.  u8 op2; 
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11da0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
11db0 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
11dc0 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11de0 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
11df0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
11e00 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
11e30 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
11e40 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
11e50 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
11e60 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
11e70 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
11e80 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
11e90 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
11ea0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
11eb0 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
11ec0 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
11ed0 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
11ee0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
11ef0 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
11f00 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
11f10 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
11f20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
11f30 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 31 20 20  mJoin   0x0001  
11f40 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e  /* Originated in
11f50 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
11f60 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
11f70 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
11f80 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f         0x0002  /
11f90 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
11fa0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
11fb0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
11fc0 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65  efine EP_Resolve
11fd0 64 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49  d   0x0004  /* I
11fe0 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  Ds have been res
11ff0 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73  olved to COLUMNs
12000 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
12010 72 72 6f 72 20 20 20 20 20 20 30 78 30 30 30 38  rror      0x0008
12020 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
12030 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
12040 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23  more errors */.#
12050 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
12060 63 74 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  ct   0x0010  /* 
12070 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
12080 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
12090 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
120a0 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
120b0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 70 53 65    0x0020  /* pSe
120c0 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
120d0 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
120e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
120f0 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30 34 30  blQuoted  0x0040
12100 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73    /* token.z was
12110 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
12120 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
12130 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20 30 78  EP_InfixFunc  0x
12140 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 66 6f  0080  /* True fo
12150 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
12160 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
12170 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
12180 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 20 30 78  EP_Collate    0x
12190 30 31 30 30 20 20 2f 2a 20 54 72 65 65 20 63 6f  0100  /* Tree co
121a0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c  ntains a TK_COLL
121b0 41 54 45 20 6f 70 65 61 72 74 6f 72 20 2a 2f 0a  ATE opeartor */.
121c0 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65 64  #define EP_Fixed
121d0 44 65 73 74 20 20 30 78 30 32 30 30 20 20 2f 2a  Dest  0x0200  /*
121e0 20 52 65 73 75 6c 74 20 6e 65 65 64 65 64 20 69   Result needed i
121f0 6e 20 61 20 73 70 65 63 69 66 69 63 20 72 65 67  n a specific reg
12200 69 73 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ister */.#define
12210 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 20 30   EP_IntValue   0
12220 78 30 34 30 30 20 20 2f 2a 20 49 6e 74 65 67 65  x0400  /* Intege
12230 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65  r value containe
12240 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f  d in u.iValue */
12250 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53  .#define EP_xIsS
12260 65 6c 65 63 74 20 20 30 78 30 38 30 30 20 20 2f  elect  0x0800  /
12270 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  * x.pSelect is v
12280 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20  alid (otherwise 
12290 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23  x.pList is) */.#
122a0 64 65 66 69 6e 65 20 45 50 5f 48 69 6e 74 20 20  define EP_Hint  
122b0 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20       0x1000  /* 
122c0 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  Not used */.#def
122d0 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20  ine EP_Reduced  
122e0 20 20 30 78 32 30 30 30 20 20 2f 2a 20 45 78 70    0x2000  /* Exp
122f0 72 20 73 74 72 75 63 74 20 69 73 20 45 58 50 52  r struct is EXPR
12300 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74  _REDUCEDSIZE byt
12310 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
12320 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  ne EP_TokenOnly 
12330 20 30 78 34 30 30 30 20 20 2f 2a 20 45 78 70 72   0x4000  /* Expr
12340 20 73 74 72 75 63 74 20 69 73 20 45 58 50 52 5f   struct is EXPR_
12350 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
12360 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
12370 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
12380 20 20 30 78 38 30 30 30 20 20 2f 2a 20 48 65 6c    0x8000  /* Hel
12390 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
123a0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
123b0 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  lloc() */../*.**
123c0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
123d0 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
123e0 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
123f0 78 70 72 2e 66 6c 61 67 73 32 20 66 69 65 6c 64  xpr.flags2 field
12400 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 32  ..*/.#define EP2
12410 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b 65 6e 20 20  _MallocedToken  
12420 30 78 30 30 30 31 20 20 2f 2a 20 4e 65 65 64 20  0x0001  /* Need 
12430 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
12440 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
12450 2f 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 49 72  /.#define EP2_Ir
12460 72 65 64 75 63 69 62 6c 65 20 20 20 20 30 78 30  reducible    0x0
12470 30 30 32 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 45  002  /* Cannot E
12480 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68  XPRDUP_REDUCE th
12490 69 73 20 45 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a  is Expr */../*.*
124a0 2a 20 54 68 65 20 70 73 65 75 64 6f 2d 72 6f 75  * The pseudo-rou
124b0 74 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  tine sqlite3Expr
124c0 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 20 73  SetIrreducible s
124d0 65 74 73 20 74 68 65 20 45 50 32 5f 49 72 72 65  ets the EP2_Irre
124e0 64 75 63 69 62 6c 65 0a 2a 2a 20 66 6c 61 67 20  ducible.** flag 
124f0 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  on an expression
12500 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 69   structure.  Thi
12510 73 20 66 6c 61 67 20 69 73 20 75 73 65 64 20 66  s flag is used f
12520 6f 72 20 56 56 26 41 20 6f 6e 6c 79 2e 20 20 54  or VV&A only.  T
12530 68 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 69 73  he.** routine is
12540 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   implemented as 
12550 61 20 6d 61 63 72 6f 20 74 68 61 74 20 6f 6e 6c  a macro that onl
12560 79 20 77 6f 72 6b 73 20 77 68 65 6e 20 69 6e 20  y works when in 
12570 64 65 62 75 67 67 69 6e 67 20 6d 6f 64 65 2c 0a  debugging mode,.
12580 2a 2a 20 73 6f 20 61 73 20 6e 6f 74 20 74 6f 20  ** so as not to 
12590 62 75 72 64 65 6e 20 70 72 6f 64 75 63 74 69 6f  burden productio
125a0 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 64 65  n code..*/.#ifde
125b0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
125c0 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 49   define ExprSetI
125d0 72 72 65 64 75 63 69 62 6c 65 28 58 29 20 20 28  rreducible(X)  (
125e0 58 29 2d 3e 66 6c 61 67 73 32 20 7c 3d 20 45 50  X)->flags2 |= EP
125f0 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 23 65  2_Irreducible.#e
12600 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
12610 72 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 28  rSetIrreducible(
12620 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
12630 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
12640 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
12650 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
12660 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
12670 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
12680 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
12690 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
126a0 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
126b0 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
126c0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6e  define ExprHasAn
126d0 79 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  yProperty(E,P)  
126e0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
126f0 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
12700 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
12710 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
12720 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
12730 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
12740 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
12750 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
12760 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
12770 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
12780 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
12790 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
127a0 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e  r .** struct, an
127b0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
127c0 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  h the EP_Reduced
127d0 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70   flag set in Exp
127e0 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20  r.flags .** and 
127f0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
12800 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
12810 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
12820 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
12830 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
12840 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
12850 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
12860 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
12870 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
12880 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
12890 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
128a0 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
128b0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
128c0 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
128d0 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
128e0 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
128f0 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
12900 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
12910 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
12920 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
12930 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
12940 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a  header comment .
12950 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
12960 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
12970 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
12980 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
12990 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
129a0 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
129b0 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
129c0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
129d0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
129e0 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
129f0 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
12a00 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
12a10 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
12a20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
12a30 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
12a40 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
12a50 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
12a60 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
12a70 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
12a80 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
12a90 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
12aa0 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
12ab0 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
12ac0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
12ad0 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
12ae0 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
12af0 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
12b00 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
12b10 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
12b20 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
12b30 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
12b40 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
12b50 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
12b60 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
12b70 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
12b80 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
12b90 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
12ba0 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
12bb0 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
12bc0 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
12bd0 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
12be0 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
12bf0 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
12c00 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
12c10 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
12c20 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
12c30 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
12c40 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
12c50 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
12c60 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
12c70 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
12c80 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
12c90 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
12ca0 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
12cb0 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
12cc0 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
12cd0 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
12ce0 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
12cf0 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
12d00 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
12d10 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
12d20 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
12d30 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
12d40 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
12d50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12d60 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
12d70 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69   the list */.  i
12d80 6e 74 20 69 45 43 75 72 73 6f 72 3b 20 20 20 20  nt iECursor;    
12d90 20 20 20 20 20 20 2f 2a 20 56 44 42 45 20 43 75        /* VDBE Cu
12da0 72 73 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  rsor associated 
12db0 77 69 74 68 20 74 68 69 73 20 45 78 70 72 4c 69  with this ExprLi
12dc0 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
12dd0 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
12de0 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
12df0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
12e00 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
12e10 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
12e20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
12e30 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
12e40 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
12e50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
12e60 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
12e70 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
12e80 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
12e90 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
12ea0 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
12eb0 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
12ec0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
12ed0 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
12ee0 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
12ef0 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
12f00 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
12f10 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
12f20 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
12f30 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
12f40 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
12f50 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
12f60 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
12f70 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
12f80 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
12f90 2f 0a 20 20 20 20 75 31 36 20 69 4f 72 64 65 72  /.    u16 iOrder
12fa0 42 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  ByCol;        /*
12fb0 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
12fc0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
12fd0 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
12fe0 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
12ff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
13000 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
13010 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
13020 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   */.  } *a;     
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13040 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66  Alloc a power of
13050 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20   two greater or 
13060 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a  equal to nExpr *
13070 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
13080 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
13090 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
130a0 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20  d by the parser 
130b0 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a  to record both.*
130c0 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  * the parse tree
130d0 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69   for an expressi
130e0 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20  on and the span 
130f0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f  of input text fo
13100 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  r an.** expressi
13110 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  on..*/.struct Ex
13120 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20  prSpan {.  Expr 
13130 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
13140 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
13150 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f  on parse tree */
13160 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13170 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73  Start;   /* Firs
13180 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69  t character of i
13190 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63  nput text */.  c
131a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b  onst char *zEnd;
131b0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72       /* One char
131c0 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65  acter past the e
131d0 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  nd of input text
131e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
131f0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
13200 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
13210 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
13220 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
13230 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
13240 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
13250 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
13260 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
13270 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
13280 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
13290 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
132a0 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
132b0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
132c0 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
132d0 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
132e0 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
132f0 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
13300 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
13310 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
13320 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
13330 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
13340 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
13350 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
13360 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
13370 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
13380 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
13390 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
133a0 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
133b0 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
133c0 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
133d0 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
133e0 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
133f0 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
13400 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
13410 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
13420 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
13430 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
13440 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
13450 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
13460 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
13470 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
13480 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
13490 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
134a0 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
134b0 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
134c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
134d0 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
134e0 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
134f0 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
13500 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
13510 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
13520 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
13530 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
13540 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
13550 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
13560 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
13570 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
13580 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
13590 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
135a0 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
135b0 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
135c0 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
135d0 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
135e0 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
135f0 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34  ..*/.typedef u64
13600 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a   Bitmask;../*.**
13610 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
13620 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  its in a Bitmask
13630 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22  .  "BMS" means "
13640 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a  BitMask Size"..*
13650 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28  /.#define BMS  (
13660 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74  (int)(sizeof(Bit
13670 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a  mask)*8))../*.**
13680 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
13690 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
136a0 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
136b0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
136c0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
136d0 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
136e0 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
136f0 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
13700 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
13710 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
13720 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
13730 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
13740 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
13750 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
13760 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
13770 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
13780 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
13790 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
137a0 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
137b0 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
137c0 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
137d0 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
137e0 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
137f0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
13800 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
13810 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
13820 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
13830 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
13840 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
13850 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
13860 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
13870 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
13880 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
13890 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
138a0 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
138b0 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
138c0 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
138d0 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
138e0 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
138f0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
13900 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
13910 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
13920 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
13930 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
13940 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
13950 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
13960 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
13970 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
13980 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
13990 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
139a0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
139b0 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
139c0 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
139d0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
139e0 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
139f0 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
13a00 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
13a10 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
13a20 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
13a30 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
13a40 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
13a50 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
13a60 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
13a70 63 4c 69 73 74 20 7b 0a 20 20 69 31 36 20 6e 53  cList {.  i16 nS
13a80 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
13a90 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
13aa0 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
13ab0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
13ac0 2a 2f 0a 20 20 69 31 36 20 6e 41 6c 6c 6f 63 3b  */.  i16 nAlloc;
13ad0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13ae0 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
13af0 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
13b00 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
13b10 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
13b20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
13b30 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
13b40 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
13b50 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
13b60 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
13b70 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
13b80 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
13b90 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
13ba0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
13bb0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
13bc0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
13bd0 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
13be0 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
13bf0 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
13c00 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
13c10 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
13c20 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
13c30 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
13c40 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
13c50 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
13c60 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
13c70 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
13c80 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
13c90 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
13ca0 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
13cb0 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
13cc0 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
13cd0 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
13ce0 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
13cf0 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
13d00 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
13d10 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
13d20 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
13d30 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
13d40 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
13d50 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
13d60 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
13d70 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
13d80 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
13d90 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
13da0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
13db0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
13dc0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
13dd0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
13de0 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
13df0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
13e00 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
13e10 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
13e20 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
13e30 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
13e40 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
13e50 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65 66  utine */.#ifndef
13e60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
13e70 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
13e80 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
13e90 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
13ea0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
13eb0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
13ec0 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
13ed0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
13ee0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13ef0 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
13f00 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
13f10 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
13f20 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
13f30 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
13f40 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
13f50 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
13f60 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
13f70 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
13f80 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
13f90 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
13fa0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
13fb0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
13fc0 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
13fd0 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
13fe0 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
13ff0 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
14000 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
14010 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
14020 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
14030 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
14040 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
14050 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
14060 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
14070 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
14080 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
14090 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
140a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
140b0 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
140c0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
140d0 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
140e0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
140f0 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
14100 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
14110 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
14120 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
14130 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
14140 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
14150 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
14160 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
14170 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
14180 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
14190 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
141a0 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
141b0 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
141c0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
141d0 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
141e0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
141f0 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
14200 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
14210 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
14220 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
14230 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
14240 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
14250 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
14260 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
14270 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
14280 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
14290 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
142a0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68 65 72 65  .../*.** A Where
142b0 50 6c 61 6e 20 6f 62 6a 65 63 74 20 68 6f 6c 64  Plan object hold
142c0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  s information th
142d0 61 74 20 64 65 73 63 72 69 62 65 73 20 61 20 6c  at describes a l
142e0 6f 6f 6b 75 70 0a 2a 2a 20 73 74 72 61 74 65 67  ookup.** strateg
142f0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 62  y..**.** This ob
14300 6a 65 63 74 20 69 73 20 69 6e 74 65 6e 64 65 64  ject is intended
14310 20 74 6f 20 62 65 20 6f 70 61 71 75 65 20 6f 75   to be opaque ou
14320 74 73 69 64 65 20 6f 66 20 74 68 65 20 77 68 65  tside of the whe
14330 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a 20  re.c module..** 
14340 49 74 20 69 73 20 69 6e 63 6c 75 64 65 64 20 68  It is included h
14350 65 72 65 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74  ere only so that
14360 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 72 20 77   that compiler w
14370 69 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ill know how big
14380 20 69 74 0a 2a 2a 20 69 73 2e 20 20 4e 6f 6e 65   it.** is.  None
14390 20 6f 66 20 74 68 65 20 66 69 65 6c 64 73 20 69   of the fields i
143a0 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 68  n this object sh
143b0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 6f 75 74  ould be used out
143c0 73 69 64 65 20 6f 66 0a 2a 2a 20 74 68 65 20 77  side of.** the w
143d0 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a  here.c module..*
143e0 2a 0a 2a 2a 20 57 69 74 68 69 6e 20 74 68 65 20  *.** Within the 
143f0 75 6e 69 6f 6e 2c 20 70 49 64 78 20 69 73 20 6f  union, pIdx is o
14400 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73  nly used when ws
14410 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 44 45  Flags&WHERE_INDE
14420 58 45 44 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20  XED is true..** 
14430 70 54 65 72 6d 20 69 73 20 6f 6e 6c 79 20 75 73  pTerm is only us
14440 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26  ed when wsFlags&
14450 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 69  WHERE_MULTI_OR i
14460 73 20 74 72 75 65 2e 20 20 41 6e 64 20 70 56 74  s true.  And pVt
14470 61 62 49 64 78 0a 2a 2a 20 69 73 20 6f 6e 6c 79  abIdx.** is only
14480 20 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61   used when wsFla
14490 67 73 26 57 48 45 52 45 5f 56 49 52 54 55 41 4c  gs&WHERE_VIRTUAL
144a0 54 41 42 4c 45 20 69 73 20 74 72 75 65 2e 20 20  TABLE is true.  
144b0 49 74 20 69 73 20 6e 65 76 65 72 20 74 68 65 0a  It is never the.
144c0 2a 2a 20 63 61 73 65 20 74 68 61 74 20 6d 6f 72  ** case that mor
144d0 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66 20 74 68  e than one of th
144e0 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20 69  ese conditions i
144f0 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 72 75 63  s true..*/.struc
14500 74 20 57 68 65 72 65 50 6c 61 6e 20 7b 0a 20 20  t WherePlan {.  
14510 75 33 32 20 77 73 46 6c 61 67 73 3b 20 20 20 20  u32 wsFlags;    
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14530 2a 20 57 48 45 52 45 5f 2a 20 66 6c 61 67 73 20  * WHERE_* flags 
14540 74 68 61 74 20 64 65 73 63 72 69 62 65 20 74 68  that describe th
14550 65 20 73 74 72 61 74 65 67 79 20 2a 2f 0a 20 20  e strategy */.  
14560 75 31 36 20 6e 45 71 3b 20 20 20 20 20 20 20 20  u16 nEq;        
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14580 2a 20 4e 75 6d 62 65 72 20 6f 66 20 3d 3d 20 63  * Number of == c
14590 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
145a0 75 31 36 20 6e 4f 42 53 61 74 3b 20 20 20 20 20  u16 nOBSat;     
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
145c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44 45  * Number of ORDE
145d0 52 20 42 59 20 74 65 72 6d 73 20 73 61 74 69 73  R BY terms satis
145e0 66 69 65 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  fied */.  double
145f0 20 6e 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20   nRow;          
14600 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69           /* Esti
14610 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
14620 72 6f 77 73 20 28 66 6f 72 20 45 51 50 29 20 2a  rows (for EQP) *
14630 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
14640 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20  Index *pIdx;    
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14660 2a 20 49 6e 64 65 78 20 77 68 65 6e 20 57 48 45  * Index when WHE
14670 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20 74 72  RE_INDEXED is tr
14680 75 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ue */.    struct
14690 20 57 68 65 72 65 54 65 72 6d 20 2a 70 54 65 72   WhereTerm *pTer
146a0 6d 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52  m;       /* WHER
146b0 45 20 63 6c 61 75 73 65 20 74 65 72 6d 20 66 6f  E clause term fo
146c0 72 20 4f 52 2d 73 65 61 72 63 68 20 2a 2f 0a 20  r OR-search */. 
146d0 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78     sqlite3_index
146e0 5f 69 6e 66 6f 20 2a 70 56 74 61 62 49 64 78 3b  _info *pVtabIdx;
146f0 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
14700 6c 65 20 69 6e 64 65 78 20 74 6f 20 75 73 65 20  le index to use 
14710 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
14720 0a 2a 2a 20 46 6f 72 20 65 61 63 68 20 6e 65 73  .** For each nes
14730 74 65 64 20 6c 6f 6f 70 20 69 6e 20 61 20 57 48  ted loop in a WH
14740 45 52 45 20 63 6c 61 75 73 65 20 69 6d 70 6c 65  ERE clause imple
14750 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 57  mentation, the W
14760 68 65 72 65 49 6e 66 6f 0a 2a 2a 20 73 74 72 75  hereInfo.** stru
14770 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61  cture contains a
14780 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65   single instance
14790 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
147a0 72 65 2e 20 20 54 68 69 73 20 73 74 72 75 63 74  re.  This struct
147b0 75 72 65 0a 2a 2a 20 69 73 20 69 6e 74 65 6e 64  ure.** is intend
147c0 65 64 20 74 6f 20 62 65 20 70 72 69 76 61 74 65  ed to be private
147d0 20 74 6f 20 74 68 65 20 77 68 65 72 65 2e 63 20   to the where.c 
147e0 6d 6f 64 75 6c 65 20 61 6e 64 20 73 68 6f 75 6c  module and shoul
147f0 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63 65  d not be.** acce
14800 73 73 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 62  ss or modified b
14810 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c 65 73 2e  y other modules.
14820 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 49 64 78 49  .**.** The pIdxI
14830 6e 66 6f 20 66 69 65 6c 64 20 69 73 20 75 73 65  nfo field is use
14840 64 20 74 6f 20 68 65 6c 70 20 70 69 63 6b 20 74  d to help pick t
14850 68 65 20 62 65 73 74 20 69 6e 64 65 78 20 6f 6e  he best index on
14860 20 61 0a 2a 2a 20 76 69 72 74 75 61 6c 20 74 61   a.** virtual ta
14870 62 6c 65 2e 20 20 54 68 65 20 70 49 64 78 49 6e  ble.  The pIdxIn
14880 66 6f 20 70 6f 69 6e 74 65 72 20 63 6f 6e 74 61  fo pointer conta
14890 69 6e 73 20 69 6e 64 65 78 69 6e 67 0a 2a 2a 20  ins indexing.** 
148a0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
148b0 74 68 65 20 69 2d 74 68 20 74 61 62 6c 65 20 69  the i-th table i
148c0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
148d0 65 20 62 65 66 6f 72 65 20 72 65 6f 72 64 65 72  e before reorder
148e0 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20 74 68 65 20  ing..** All the 
148f0 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72  pIdxInfo pointer
14900 73 20 61 72 65 20 66 72 65 65 64 20 62 79 20 77  s are freed by w
14910 68 65 72 65 49 6e 66 6f 46 72 65 65 28 29 20 69  hereInfoFree() i
14920 6e 20 77 68 65 72 65 2e 63 2e 0a 2a 2a 20 41 6c  n where.c..** Al
14930 6c 20 6f 74 68 65 72 20 69 6e 66 6f 72 6d 61 74  l other informat
14940 69 6f 6e 20 69 6e 20 74 68 65 20 69 2d 74 68 20  ion in the i-th 
14950 57 68 65 72 65 4c 65 76 65 6c 20 6f 62 6a 65 63  WhereLevel objec
14960 74 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74  t for the i-th t
14970 61 62 6c 65 0a 2a 2a 20 61 66 74 65 72 20 46 52  able.** after FR
14980 4f 4d 20 63 6c 61 75 73 65 20 6f 72 64 65 72 69  OM clause orderi
14990 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68  ng..*/.struct Wh
149a0 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20 57 68 65  ereLevel {.  Whe
149b0 72 65 50 6c 61 6e 20 70 6c 61 6e 3b 20 20 20 20  rePlan plan;    
149c0 20 20 20 2f 2a 20 71 75 65 72 79 20 70 6c 61 6e     /* query plan
149d0 20 66 6f 72 20 74 68 69 73 20 65 6c 65 6d 65 6e   for this elemen
149e0 74 20 6f 66 20 74 68 65 20 46 52 4f 4d 20 63 6c  t of the FROM cl
149f0 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  ause */.  int iL
14a00 65 66 74 4a 6f 69 6e 3b 20 20 20 20 20 20 20 20  eftJoin;        
14a10 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 75  /* Memory cell u
14a20 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
14a30 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e   LEFT OUTER JOIN
14a40 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61 62 43 75   */.  int iTabCu
14a50 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
14a60 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 75  he VDBE cursor u
14a70 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
14a80 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
14a90 20 69 49 64 78 43 75 72 3b 20 20 20 20 20 20 20   iIdxCur;       
14aa0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
14ab0 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63  ursor used to ac
14ac0 63 65 73 73 20 70 49 64 78 20 2a 2f 0a 20 20 69  cess pIdx */.  i
14ad0 6e 74 20 61 64 64 72 42 72 6b 3b 20 20 20 20 20  nt addrBrk;     
14ae0 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
14af0 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f  e to break out o
14b00 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20  f the loop */.  
14b10 69 6e 74 20 61 64 64 72 4e 78 74 3b 20 20 20 20  int addrNxt;    
14b20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
14b30 72 65 20 74 6f 20 73 74 61 72 74 20 74 68 65 20  re to start the 
14b40 6e 65 78 74 20 49 4e 20 63 6f 6d 62 69 6e 61 74  next IN combinat
14b50 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  ion */.  int add
14b60 72 43 6f 6e 74 3b 20 20 20 20 20 20 20 20 20 2f  rCont;         /
14b70 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63  * Jump here to c
14b80 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68 65  ontinue with the
14b90 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79 63 6c 65   next loop cycle
14ba0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 46 69   */.  int addrFi
14bb0 72 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 46  rst;        /* F
14bc0 69 72 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  irst instruction
14bd0 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 6f 66 20   of interior of 
14be0 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75 38  the loop */.  u8
14bf0 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
14c00 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
14c10 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
14c20 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20 6f 70  lause */.  u8 op
14c30 2c 20 70 35 3b 20 20 20 20 20 20 20 20 20 20 20  , p5;           
14c40 20 2f 2a 20 4f 70 63 6f 64 65 20 61 6e 64 20 50   /* Opcode and P
14c50 35 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20  5 of the opcode 
14c60 74 68 61 74 20 65 6e 64 73 20 74 68 65 20 6c 6f  that ends the lo
14c70 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 70 31 2c 20  op */.  int p1, 
14c80 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  p2;           /*
14c90 20 4f 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65   Operands of the
14ca0 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
14cb0 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  ends the loop */
14cc0 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
14cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f           /* Info
14ce0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 64 65 70  rmation that dep
14cf0 65 6e 64 73 20 6f 6e 20 70 6c 61 6e 2e 77 73 46  ends on plan.wsF
14d00 6c 61 67 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  lags */.    stru
14d10 63 74 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ct {.      int n
14d20 49 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  In;             
14d30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
14d40 74 72 69 65 73 20 69 6e 20 61 49 6e 4c 6f 6f 70  tries in aInLoop
14d50 5b 5d 20 2a 2f 0a 20 20 20 20 20 20 73 74 72 75  [] */.      stru
14d60 63 74 20 49 6e 4c 6f 6f 70 20 7b 0a 20 20 20 20  ct InLoop {.    
14d70 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20      int iCur;   
14d80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14d90 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 75 73  e VDBE cursor us
14da0 65 64 20 62 79 20 74 68 69 73 20 49 4e 20 6f 70  ed by this IN op
14db0 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 20 20  erator */.      
14dc0 20 20 69 6e 74 20 61 64 64 72 49 6e 54 6f 70 3b    int addrInTop;
14dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20           /* Top 
14de0 6f 66 20 74 68 65 20 49 4e 20 6c 6f 6f 70 20 2a  of the IN loop *
14df0 2f 0a 20 20 20 20 20 20 20 20 75 38 20 65 45 6e  /.        u8 eEn
14e00 64 4c 6f 6f 70 4f 70 3b 20 20 20 20 20 20 20 20  dLoopOp;        
14e10 20 2f 2a 20 49 4e 20 4c 6f 6f 70 20 74 65 72 6d   /* IN Loop term
14e20 69 6e 61 74 6f 72 2e 20 4f 50 5f 4e 65 78 74 20  inator. OP_Next 
14e30 6f 72 20 4f 50 5f 50 72 65 76 20 2a 2f 0a 20 20  or OP_Prev */.  
14e40 20 20 20 20 7d 20 2a 61 49 6e 4c 6f 6f 70 3b 20      } *aInLoop; 
14e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66            /* Inf
14e60 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
14e70 61 63 68 20 6e 65 73 74 65 64 20 49 4e 20 6f 70  ach nested IN op
14e80 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 7d 20  erator */.    } 
14e90 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
14ea0 20 20 20 20 2f 2a 20 55 73 65 64 20 77 68 65 6e      /* Used when
14eb0 20 70 6c 61 6e 2e 77 73 46 6c 61 67 73 26 57 48   plan.wsFlags&WH
14ec0 45 52 45 5f 49 4e 5f 41 42 4c 45 20 2a 2f 0a 20  ERE_IN_ABLE */. 
14ed0 20 20 20 49 6e 64 65 78 20 2a 70 43 6f 76 69 64     Index *pCovid
14ee0 78 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 73 73  x;       /* Poss
14ef0 69 62 6c 65 20 63 6f 76 65 72 69 6e 67 20 69 6e  ible covering in
14f00 64 65 78 20 66 6f 72 20 57 48 45 52 45 5f 4d 55  dex for WHERE_MU
14f10 4c 54 49 5f 4f 52 20 2a 2f 0a 20 20 7d 20 75 3b  LTI_OR */.  } u;
14f20 0a 20 20 64 6f 75 62 6c 65 20 72 4f 70 74 43 6f  .  double rOptCo
14f30 73 74 3b 20 20 20 20 20 20 2f 2a 20 22 4f 70 74  st;      /* "Opt
14f40 69 6d 61 6c 22 20 63 6f 73 74 20 66 6f 72 20 74  imal" cost for t
14f50 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 0a 20 20  his level */..  
14f60 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
14f70 20 66 69 65 6c 64 20 69 73 20 72 65 61 6c 6c 79   field is really
14f80 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 74 68 65   not part of the
14f90 20 63 75 72 72 65 6e 74 20 6c 65 76 65 6c 2e 20   current level. 
14fa0 20 42 75 74 0a 20 20 2a 2a 20 77 65 20 6e 65 65   But.  ** we nee
14fb0 64 20 61 20 70 6c 61 63 65 20 74 6f 20 63 61 63  d a place to cac
14fc0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
14fd0 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d 61 74 69   index informati
14fe0 6f 6e 20 66 6f 72 20 65 61 63 68 0a 20 20 2a 2a  on for each.  **
14ff0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
15000 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
15010 65 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 4c  e and the WhereL
15020 65 76 65 6c 20 73 74 72 75 63 74 75 72 65 20 69  evel structure i
15030 73 0a 20 20 2a 2a 20 61 20 63 6f 6e 76 65 6e 69  s.  ** a conveni
15040 65 6e 74 20 70 6c 61 63 65 20 73 69 6e 63 65 20  ent place since 
15050 74 68 65 72 65 20 69 73 20 6f 6e 65 20 57 68 65  there is one Whe
15060 72 65 4c 65 76 65 6c 20 66 6f 72 20 65 61 63 68  reLevel for each
15070 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 20 20 2a   FROM clause.  *
15080 2a 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a  * element..  */.
15090 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f    sqlite3_index_
150a0 69 6e 66 6f 20 2a 70 49 64 78 49 6e 66 6f 3b 20  info *pIdxInfo; 
150b0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 66 6f 20 66   /* Index info f
150c0 6f 72 20 6e 2d 74 68 20 73 6f 75 72 63 65 20 74  or n-th source t
150d0 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
150e0 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
150f0 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
15100 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
15110 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
15120 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
15130 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
15140 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
15150 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15160 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
15170 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
15180 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
15190 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
151a0 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
151b0 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
151c0 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
151d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
151e0 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
151f0 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
15200 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
15210 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
15220 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15230 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
15240 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
15250 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
15260 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
15270 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
15280 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
15290 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20  0x0008 /* Ok to 
152a0 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
152b0 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
152c0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49  define WHERE_OMI
152d0 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78  T_OPEN_CLOSE  0x
152e0 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75  0010 /* Table cu
152f0 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64  rsors are alread
15300 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y open */.#defin
15310 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41  e WHERE_FORCE_TA
15320 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20  BLE      0x0020 
15330 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e  /* Do not use an
15340 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72   index-only sear
15350 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ch */.#define WH
15360 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c  ERE_ONETABLE_ONL
15370 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f  Y    0x0040 /* O
15380 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74  nly code the 1st
15390 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69   table in pTabLi
153a0 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  st */.#define WH
153b0 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20  ERE_AND_ONLY    
153c0 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44       0x0080 /* D
153d0 6f 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65 73  on't use indices
153e0 20 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f   for OR terms */
153f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 57 48 45 52  ../*.** The WHER
15400 45 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  E clause process
15410 69 6e 67 20 72 6f 75 74 69 6e 65 20 68 61 73 20  ing routine has 
15420 74 77 6f 20 68 61 6c 76 65 73 2e 20 20 54 68 65  two halves.  The
15430 0a 2a 2a 20 66 69 72 73 74 20 70 61 72 74 20 64  .** first part d
15440 6f 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66  oes the start of
15450 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20   the WHERE loop 
15460 61 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a  and the second.*
15470 2a 20 68 61 6c 66 20 64 6f 65 73 20 74 68 65 20  * half does the 
15480 74 61 69 6c 20 6f 66 20 74 68 65 20 57 48 45 52  tail of the WHER
15490 45 20 6c 6f 6f 70 2e 20 20 41 6e 20 69 6e 73 74  E loop.  An inst
154a0 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
154b0 73 74 72 75 63 74 75 72 65 20 69 73 20 72 65 74  structure is ret
154c0 75 72 6e 65 64 20 62 79 20 74 68 65 20 66 69 72  urned by the fir
154d0 73 74 20 68 61 6c 66 20 61 6e 64 20 70 61 73 73  st half and pass
154e0 65 64 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73  ed.** into the s
154f0 65 63 6f 6e 64 20 68 61 6c 66 20 74 6f 20 67 69  econd half to gi
15500 76 65 20 73 6f 6d 65 20 63 6f 6e 74 69 6e 75 69  ve some continui
15510 74 79 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68  ty..*/.struct Wh
15520 65 72 65 49 6e 66 6f 20 7b 0a 20 20 50 61 72 73  ereInfo {.  Pars
15530 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
15540 20 20 20 20 20 20 2f 2a 20 50 61 72 73 69 6e 67        /* Parsing
15550 20 61 6e 64 20 63 6f 64 65 20 67 65 6e 65 72 61   and code genera
15560 74 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ting context */.
15570 20 20 53 72 63 4c 69 73 74 20 2a 70 54 61 62 4c    SrcList *pTabL
15580 69 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  ist;        /* L
15590 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 69 6e  ist of tables in
155a0 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
155b0 31 36 20 6e 4f 42 53 61 74 3b 20 20 20 20 20 20  16 nOBSat;      
155c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
155d0 65 72 20 6f 66 20 4f 52 44 45 52 20 42 59 20 74  er of ORDER BY t
155e0 65 72 6d 73 20 73 61 74 69 73 66 69 65 64 20 62  erms satisfied b
155f0 79 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 75  y indices */.  u
15600 31 36 20 77 63 74 72 6c 46 6c 61 67 73 3b 20 20  16 wctrlFlags;  
15610 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
15620 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 70 61 73  s originally pas
15630 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 57 68  sed to sqlite3Wh
15640 65 72 65 42 65 67 69 6e 28 29 20 2a 2f 0a 20 20  ereBegin() */.  
15650 75 38 20 6f 6b 4f 6e 65 50 61 73 73 3b 20 20 20  u8 okOnePass;   
15660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6b 20            /* Ok 
15670 74 6f 20 75 73 65 20 6f 6e 65 2d 70 61 73 73 20  to use one-pass 
15680 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 55 50  algorithm for UP
15690 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 20  DATE/DELETE */. 
156a0 20 75 38 20 75 6e 74 65 73 74 65 64 54 65 72 6d   u8 untestedTerm
156b0 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f  s;         /* No
156c0 74 20 61 6c 6c 20 57 48 45 52 45 20 74 65 72 6d  t all WHERE term
156d0 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 6f 75  s resolved by ou
156e0 74 65 72 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75 38  ter loop */.  u8
156f0 20 65 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   eDistinct;     
15700 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
15710 66 20 74 68 65 20 57 48 45 52 45 5f 44 49 53 54  f the WHERE_DIST
15720 49 4e 43 54 5f 2a 20 76 61 6c 75 65 73 20 62 65  INCT_* values be
15730 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 69 54 6f  low */.  int iTo
15740 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
15750 20 20 20 2f 2a 20 54 68 65 20 76 65 72 79 20 62     /* The very b
15760 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
15770 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20  WHERE loop */.  
15780 69 6e 74 20 69 43 6f 6e 74 69 6e 75 65 3b 20 20  int iContinue;  
15790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
157a0 70 20 68 65 72 65 20 74 6f 20 63 6f 6e 74 69 6e  p here to contin
157b0 75 65 20 77 69 74 68 20 6e 65 78 74 20 72 65 63  ue with next rec
157c0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 69 42 72  ord */.  int iBr
157d0 65 61 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  eak;            
157e0 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
157f0 74 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f 66 20  to break out of 
15800 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
15810 74 20 6e 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t nLevel;       
15820 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15830 72 20 6f 66 20 6e 65 73 74 65 64 20 6c 6f 6f 70  r of nested loop
15840 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 57 68 65   */.  struct Whe
15850 72 65 43 6c 61 75 73 65 20 2a 70 57 43 3b 20 20  reClause *pWC;  
15860 2f 2a 20 44 65 63 6f 6d 70 6f 73 69 74 69 6f 6e  /* Decomposition
15870 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 63 6c   of the WHERE cl
15880 61 75 73 65 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  ause */.  double
15890 20 73 61 76 65 64 4e 51 75 65 72 79 4c 6f 6f 70   savedNQueryLoop
158a0 3b 20 20 20 2f 2a 20 70 50 61 72 73 65 2d 3e 6e  ;   /* pParse->n
158b0 51 75 65 72 79 4c 6f 6f 70 20 6f 75 74 73 69 64  QueryLoop outsid
158c0 65 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70  e the WHERE loop
158d0 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 52 6f   */.  double nRo
158e0 77 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  wOut;           
158f0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
15900 62 65 72 20 6f 66 20 6f 75 74 70 75 74 20 72 6f  ber of output ro
15910 77 73 20 2a 2f 0a 20 20 57 68 65 72 65 4c 65 76  ws */.  WhereLev
15920 65 6c 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20  el a[1];        
15930 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
15940 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73 74   about each nest
15950 20 6c 6f 6f 70 20 69 6e 20 57 48 45 52 45 20 2a   loop in WHERE *
15960 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
15970 20 76 61 6c 75 65 73 20 66 6f 72 20 57 68 65 72   values for Wher
15980 65 49 6e 66 6f 2e 65 44 69 73 74 69 6e 63 74 20  eInfo.eDistinct 
15990 61 6e 64 20 44 69 73 74 69 6e 63 74 43 74 78 2e  and DistinctCtx.
159a0 65 54 6e 63 74 54 79 70 65 20 2a 2f 0a 23 64 65  eTnctType */.#de
159b0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
159c0 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
159d0 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
159e0 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
159f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
15a00 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
15a10 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
15a20 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
15a30 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
15a40 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
15a50 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
15a60 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
15a70 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
15a80 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
15a90 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
15aa0 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
15ab0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
15ac0 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
15ad0 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
15ae0 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
15af0 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
15b00 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
15b10 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
15b20 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
15b30 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
15b40 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
15b50 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
15b60 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
15b70 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
15b80 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
15b90 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
15ba0 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
15bb0 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
15bc0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
15bd0 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
15be0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
15bf0 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
15c00 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
15c10 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
15c20 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
15c30 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
15c40 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
15c50 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
15c60 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
15c70 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
15c80 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
15c90 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
15ca0 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
15cb0 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20   inner-most .** 
15cc0 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
15cd0 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
15ce0 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
15cf0 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
15d00 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
15d10 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
15d20 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
15d30 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
15d40 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
15d50 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
15d60 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
15d70 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
15d80 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
15d90 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
15da0 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
15db0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
15dc0 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
15dd0 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
15de0 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
15df0 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
15e00 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45  mented. .**.** E
15e10 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
15e20 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
15e30 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
15e40 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
15e50 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
15e60 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
15e70 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
15e80 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
15e90 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
15ea0 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
15eb0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
15ec0 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
15ed0 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
15ee0 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
15ef0 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
15f00 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
15f10 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
15f20 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
15f30 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
15f40 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
15f50 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
15f60 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
15f70 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
15f80 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
15f90 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
15fa0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
15fb0 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
15fc0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 41 67 67  essions */.  Agg
15fd0 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
15fe0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
15ff0 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
16000 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
16010 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  */.  NameContext
16020 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
16030 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
16040 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
16050 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
16060 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
16070 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16080 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
16090 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
160a0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
160b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
160c0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
160d0 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
160e0 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
160f0 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67 73 3b  */.  u8 ncFlags;
16100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72            /* Zer
16110 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
16120 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
16130 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
16140 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
16150 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
16160 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
16170 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  d..*/.#define NC
16180 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 31 20  _AllowAgg  0x01 
16190 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
161a0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
161b0 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
161c0 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20  efine NC_HasAgg 
161d0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e     0x02    /* On
161e0 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
161f0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65  ate functions se
16200 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
16210 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 34 20  _IsCheck   0x04 
16220 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
16230 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
16240 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
16250 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
16260 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 38  C_InAggFunc 0x08
16270 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
16280 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
16290 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
162a0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
162b0 41 73 4d 61 79 62 65 20 20 20 30 78 31 30 20 20  AsMaybe   0x10  
162c0 20 20 2f 2a 20 52 65 73 6f 6c 76 65 20 74 6f 20    /* Resolve to 
162d0 41 53 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20  AS terms of the 
162e0 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 0a  result set only.
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16310 69 66 20 6e 6f 20 6f 74 68 65 72 20 72 65 73 6f  if no other reso
16320 6c 75 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  lution is availa
16330 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ble */../*.** An
16340 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
16350 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
16360 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c  ture contains al
16370 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  l information.**
16380 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
16390 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73  ate code for a s
163a0 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61  ingle SELECT sta
163b0 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c  tement..**.** nL
163c0 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d  imit is set to -
163d0 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  1 if there is no
163e0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20   LIMIT clause.  
163f0 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74  nOffset is set t
16400 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65  o 0..** If there
16410 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75   is a LIMIT clau
16420 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73  se, the parser s
16430 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68  ets nLimit to th
16440 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a  e value of the.*
16450 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66  * limit and nOff
16460 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
16470 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28   of the offset (
16480 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73  or 0 if there is
16490 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e   not.** offset).
164a0 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20    But later on, 
164b0 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73  nLimit and nOffs
164c0 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65  et become the me
164d0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a  mory locations.*
164e0 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68  * in the VDBE th
164f0 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69  at record the li
16500 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63  mit and offset c
16510 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61  ounters..**.** a
16520 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e  ddrOpenEphm[] en
16530 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68  tries contain th
16540 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  e address of OP_
16550 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
16560 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20  codes..** These 
16570 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62  addresses must b
16580 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74  e stored so that
16590 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20   we can go back 
165a0 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74  and fill in.** t
165b0 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e  he P4_KEYINFO an
165c0 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20  d P2 parameters 
165d0 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20  later.  Neither 
165e0 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a  the KeyInfo nor.
165f0 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
16600 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63   columns in P2 c
16610 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61  an be computed a
16620 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a  t the same time.
16630 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65  ** as the OP_Ope
16640 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f  nEphm instructio
16650 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75  n is coded becau
16660 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68  se not.** enough
16670 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
16680 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  ut the compound 
16690 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61  query is known a
166a0 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a  t that point..**
166b0 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
166c0 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d   addrOpenTran[0]
166d0 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e   and [1] contain
166e0 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
166f0 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65  ences.** for the
16700 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68   result set.  Th
16710 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
16720 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f  drOpenEphm[2] co
16730 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
16740 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f  .** sequences fo
16750 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
16760 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
16770 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72   Select {.  Expr
16780 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
16790 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73     /* The fields
167a0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a   of the result *
167b0 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
167c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
167d0 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54  e of: TK_UNION T
167e0 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45  K_ALL TK_INTERSE
167f0 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a  CT TK_EXCEPT */.
16800 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20    u16 selFlags; 
16810 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
16820 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
16830 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
16840 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
16850 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
16860 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
16870 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
16880 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65  */.  int addrOpe
16890 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20 4f  nEphm[3];   /* O
168a0 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f  P_OpenEphem opco
168b0 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  des related to t
168c0 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20  his select */.  
168d0 64 6f 75 62 6c 65 20 6e 53 65 6c 65 63 74 52 6f  double nSelectRo
168e0 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
168f0 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ted number of re
16900 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53  sult rows */.  S
16910 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20  rcList *pSrc;   
16920 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f        /* The FRO
16930 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  M clause */.  Ex
16940 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
16950 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
16960 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  E clause */.  Ex
16970 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
16980 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55  ;    /* The GROU
16990 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  P BY clause */. 
169a0 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20   Expr *pHaving; 
169b0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48          /* The H
169c0 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a  AVING clause */.
169d0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
169e0 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  erBy;    /* The 
169f0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
16a00 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72  */.  Select *pPr
16a10 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  ior;        /* P
16a20 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61  rior select in a
16a30 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
16a40 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
16a50 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20  Select *pNext;  
16a60 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73         /* Next s
16a70 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66  elect to the lef
16a80 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
16a90 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 52 69  */.  Select *pRi
16aa0 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f 2a 20 52  ghtmost;    /* R
16ab0 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c 65 63 74  ight-most select
16ac0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
16ad0 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
16ae0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69  */.  Expr *pLimi
16af0 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  t;          /* L
16b00 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
16b10 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
16b20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20  used. */.  Expr 
16b30 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20  *pOffset;       
16b40 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72    /* OFFSET expr
16b50 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
16b60 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
16b70 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
16b80 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
16b90 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
16ba0 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
16bb0 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
16bc0 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23  lect Flag"..*/.#
16bd0 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
16be0 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ct        0x0001
16bf0 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
16c00 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
16c10 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
16c20 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78 30  olved        0x0
16c30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  002  /* Identifi
16c40 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
16c50 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
16c60 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
16c70 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
16c80 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
16c90 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
16ca0 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
16cb0 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30 30  phemeral   0x000
16cc0 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  8  /* Uses the O
16cd0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
16ce0 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
16cf0 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
16d00 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71 6c    0x0010  /* sql
16d10 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
16d20 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
16d30 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
16d40 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20  HasTypeInfo     
16d50 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20  0x0020  /* FROM 
16d60 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
16d70 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
16d80 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
16d90 53 6f 72 74 65 72 20 20 20 20 20 20 20 30 78 30  Sorter       0x0
16da0 30 34 30 20 20 2f 2a 20 53 6f 72 74 20 75 73 69  040  /* Sort usi
16db0 6e 67 20 61 20 73 6f 72 74 65 72 20 2a 2f 0a 23  ng a sorter */.#
16dc0 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73  define SF_Values
16dd0 20 20 20 20 20 20 20 20 20 20 30 78 30 30 38 30            0x0080
16de0 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64    /* Synthesized
16df0 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61   from VALUES cla
16e00 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
16e10 46 5f 4d 61 74 65 72 69 61 6c 69 7a 65 20 20 20  F_Materialize   
16e20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 46 6f 72    0x0100  /* For
16e30 63 65 20 6d 61 74 65 72 69 61 6c 69 7a 61 74 69  ce materializati
16e40 6f 6e 20 6f 66 20 76 69 65 77 73 20 2a 2f 0a 23  on of views */.#
16e50 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
16e60 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30  From      0x0200
16e70 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
16e80 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
16e90 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 0a 0a 2f 2a  M clause */.../*
16ea0 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
16eb0 6f 66 20 61 20 73 65 6c 65 63 74 20 63 61 6e 20  of a select can 
16ec0 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
16ed0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2e 20  n several ways. 
16ee0 20 54 68 65 0a 2a 2a 20 22 53 52 54 22 20 70 72   The.** "SRT" pr
16ef0 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45  efix means "SELE
16f00 43 54 20 52 65 73 75 6c 74 20 54 79 70 65 22 2e  CT Result Type".
16f10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
16f20 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
16f30 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
16f40 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
16f50 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
16f60 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
16f70 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
16f80 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
16f90 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
16fa0 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
16fb0 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
16fc0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
16fd0 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
16fe0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
16ff0 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
17000 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
17010 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
17020 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20  /../* The ORDER 
17030 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e  BY clause is ign
17040 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20  ored for all of 
17050 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  the above */.#de
17060 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72  fine IgnorableOr
17070 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44  derby(X) ((X->eD
17080 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 63 61 72  est)<=SRT_Discar
17090 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  d)..#define SRT_
170a0 4f 75 74 70 75 74 20 20 20 20 20 20 20 35 20 20  Output       5  
170b0 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72  /* Output each r
170c0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
170d0 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
170e0 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a 20 53           6  /* S
170f0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
17100 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
17110 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
17120 20 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53           7  /* S
17130 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
17140 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
17150 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
17160 54 61 62 6c 65 20 20 20 20 20 20 20 20 38 20 20  Table        8  
17170 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
17180 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
17190 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
171a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
171b0 70 68 65 6d 54 61 62 20 20 20 20 20 39 20 20 2f  phemTab     9  /
171c0 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
171d0 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
171e0 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
171f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
17200 6f 72 6f 75 74 69 6e 65 20 20 20 31 30 20 20 2f  oroutine   10  /
17210 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
17220 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
17230 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  t */../*.** An i
17240 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
17250 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
17260 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
17270 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
17280 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
17290 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
172a0 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
172b0 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
172c0 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70    /* How to disp
172d0 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ose of the resul
172e0 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a  ts.  On of SRT_*
172f0 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61   above. */.  cha
17300 72 20 61 66 66 53 64 73 74 3b 20 20 20 20 20 2f  r affSdst;     /
17310 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20  * Affinity used 
17320 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f  when eDest==SRT_
17330 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44  Set */.  int iSD
17340 50 61 72 6d 3b 20 20 20 20 20 20 2f 2a 20 41 20  Parm;      /* A 
17350 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62  parameter used b
17360 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70  y the eDest disp
17370 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  osal method */. 
17380 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20   int iSdst;     
17390 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
173a0 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
173b0 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
173c0 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
173d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
173e0 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
173f0 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cated */.};../*.
17400 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
17410 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
17420 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
17430 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
17440 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74  OINCREMENT .** t
17450 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f  ables, the follo
17460 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
17470 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
17480 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f  the Table.u.auto
17490 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72  Inc.p.** pointer
174a0 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63   of each autoinc
174b0 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20  rement table to 
174c0 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65  record some side
174d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
174e0 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65  t.** the code ge
174f0 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20  nerator needs.  
17500 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20  We have to keep 
17510 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e  per-table autoin
17520 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72  crement.** infor
17530 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69  mation in case i
17540 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20  nserts are down 
17550 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
17560 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f    Triggers do no
17570 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  t.** normally co
17580 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61  ordinate their a
17590 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77  ctivities, but w
175a0 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f  e do need to coo
175b0 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c  rdinate the.** l
175c0 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e  oading and savin
175d0 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65  g of autoincreme
175e0 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  nt information..
175f0 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e  */.struct Autoin
17600 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e  cInfo {.  Autoin
17610 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20  cInfo *pNext;   
17620 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f  /* Next info blo
17630 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20  ck in a list of 
17640 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61  them all */.  Ta
17650 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
17660 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69      /* Table thi
17670 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66  s info block ref
17680 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  ers to */.  int 
17690 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
176a0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71    /* Index in sq
176b0 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64  lite3.aDb[] of d
176c0 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
176d0 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65  pTab */.  int re
176e0 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  gCtr;           
176f0 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
17700 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72  er holding the r
17710 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  owid counter */.
17720 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f  };../*.** Size o
17730 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63  f the column cac
17740 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  he.*/.#ifndef SQ
17750 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a  LITE_N_COLCACHE.
17760 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
17770 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65  N_COLCACHE 10.#e
17780 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c  ndif../*.** At l
17790 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63  east one instanc
177a0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
177b0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
177c0 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
177d0 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61   .** trigger tha
177e0 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77  t may be fired w
177f0 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20  hile parsing an 
17800 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
17810 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74  r DELETE.** stat
17820 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20  ement. All such 
17830 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72  objects are stor
17840 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64  ed in the linked
17850 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a   list headed at.
17860 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  ** Parse.pTrigge
17870 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64  rPrg and deleted
17880 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20   once statement 
17890 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20  compilation has 
178a0 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  been.** complete
178b0 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20  d..**.** A Vdbe 
178c0 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74  sub-program that
178d0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
178e0 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c  body and WHEN cl
178f0 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a  ause of trigger.
17900 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54  ** TriggerPrg.pT
17910 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67  rigger, assuming
17920 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f   a default ON CO
17930 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66  NFLICT clause of
17940 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f  .** TriggerPrg.o
17950 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64  rconf, is stored
17960 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50   in the TriggerP
17970 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69  rg.pProgram vari
17980 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72  able..** The Par
17990 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
179a0 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69  ist never contai
179b0 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77  ns two entries w
179c0 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  ith the same.** 
179d0 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20  values for both 
179e0 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63  pTrigger and orc
179f0 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54  onf..**.** The T
17a00 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
17a10 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[0] variable i
17a20 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20  s set to a mask 
17a30 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
17a40 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72  .** accessed (or
17a50 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72   set to 0 for tr
17a60 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20  iggers fired as 
17a70 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45  a result of INSE
17a80 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  RT .** statement
17a90 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
17aa0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
17ab0 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
17ac0 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
17ad0 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
17ae0 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
17af0 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
17b00 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
17b10 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
17b20 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
17b30 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
17b40 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
17b50 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
17b60 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
17b70 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
17b80 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
17b90 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
17ba0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
17bb0 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
17bc0 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
17bd0 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
17be0 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
17c00 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
17c10 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
17c20 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
17c30 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
17c40 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
17c50 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
17c60 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
17c70 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
17c80 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
17c90 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
17ca0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
17cb0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
17cc0 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
17cd0 70 65 64 65 66 20 73 71 6c 69 74 65 33 5f 75 69  pedef sqlite3_ui
17ce0 6e 74 36 34 20 79 44 62 4d 61 73 6b 3b 0a 23 65  nt64 yDbMask;.#e
17cf0 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e  lse.  typedef un
17d00 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61  signed int yDbMa
17d10 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  sk;.#endif../*.*
17d20 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20  * An SQL parser 
17d30 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79  context.  A copy
17d40 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
17d50 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72  re is passed thr
17d60 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  ough.** the pars
17d70 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f  er and down into
17d80 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   all the parser 
17d90 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69  action routine i
17da0 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61  n order to.** ca
17db0 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72  rry around infor
17dc0 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67  mation that is g
17dd0 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74  lobal to the ent
17de0 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a  ire parse..**.**
17df0 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69   The structure i
17e00 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74  s divided into t
17e10 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20  wo parts.  When 
17e20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63  the parser and c
17e30 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20  ode.** generate 
17e40 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20  call themselves 
17e50 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65  recursively, the
17e60 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74   first part of t
17e70 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  he structure.** 
17e80 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20  is constant but 
17e90 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20  the second part 
17ea0 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20  is reset at the 
17eb0 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e  beginning and en
17ec0 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63  d of.** each rec
17ed0 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ursion..**.** Th
17ee0 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64  e nTableLock and
17ef0 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69   aTableLock vari
17f00 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
17f10 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65  sed if the share
17f20 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74  d-cache .** feat
17f30 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ure is enabled (
17f40 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  if sqlite3Tsd()-
17f50 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69  >useSharedData i
17f60 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72  s true). They ar
17f70 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  e.** used to sto
17f80 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61  re the set of ta
17f90 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72  ble-locks requir
17fa0 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
17fb0 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d  ent being.** com
17fc0 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20  piled. Function 
17fd0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
17fe0 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  () is used to ad
17ff0 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  d entries to the
18000 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72  .** list..*/.str
18010 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71  uct Parse {.  sq
18020 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
18030 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64     /* The main d
18040 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72  atabase structur
18050 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  e */.  char *zEr
18060 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
18070 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
18080 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
18090 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
180a0 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
180b0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
180c0 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  tecode */.  int 
180d0 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
180e0 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
180f0 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
18100 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53  /.  u8 colNamesS
18110 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45  et;      /* TRUE
18120 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e   after OP_Column
18130 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73  Name has been is
18140 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f  sued to pVdbe */
18150 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
18160 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
18170 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
18180 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
18190 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
181a0 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
181b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
181c0 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
181d0 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
181e0 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54  rator */.  u8 nT
181f0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
18200 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
18210 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
18220 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
18230 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49 6e 55 73  /.  u8 nTempInUs
18240 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  e;       /* Numb
18250 65 72 20 6f 66 20 61 54 65 6d 70 52 65 67 5b 5d  er of aTempReg[]
18260 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
18270 65 64 20 6f 75 74 20 2a 2f 0a 20 20 75 38 20 6e  ed out */.  u8 n
18280 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20  ColCache;       
18290 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
182a0 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63  tries in aColCac
182b0 68 65 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 43 6f  he[] */.  u8 iCo
182c0 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f  lCache;        /
182d0 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
182e0 61 43 6f 6c 43 61 63 68 65 5b 5d 20 74 6f 20 72  aColCache[] to r
182f0 65 70 6c 61 63 65 20 2a 2f 0a 20 20 75 38 20 69  eplace */.  u8 i
18300 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20  sMultiWrite;    
18310 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
18320 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79  ement may modify
18330 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65  /insert multiple
18340 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61   rows */.  u8 ma
18350 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20  yAbort;         
18360 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
18370 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61  ment may throw a
18380 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
18390 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70  n */.  int aTemp
183a0 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48  Reg[8];     /* H
183b0 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20  olding area for 
183c0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
183d0 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  ers */.  int nRa
183e0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
183f0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
18400 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
18410 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
18420 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
18430 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
18440 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
18450 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
18460 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
18470 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18480 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
18490 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
184a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
184b0 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
184c0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
184d0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
184e0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
184f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18500 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
18510 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
18520 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20  nt nSet;        
18530 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18540 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61   sets used so fa
18550 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65  r */.  int nOnce
18560 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
18570 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65  umber of OP_Once
18580 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f   instructions so
18590 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b   far */.  int ck
185a0 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Base;          /
185b0 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
185c0 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63  of data during c
185d0 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
185e0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
185f0 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
18600 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
18610 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
18620 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
18630 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
18640 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
18650 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
18660 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
18670 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
18680 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43  /.  struct yColC
18690 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69  ache {.    int i
186a0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
186b0 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
186c0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69   number */.    i
186d0 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
186e0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
186f0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  lumn number */. 
18700 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20     u8 tempReg;  
18710 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67           /* iReg
18720 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73   is a temp regis
18730 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74  ter that needs t
18740 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20  o be freed */.  
18750 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
18760 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69          /* Nesti
18770 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  ng level */.    
18780 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20  int iReg;       
18790 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74        /* Reg wit
187a0 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  h value of this 
187b0 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20  column. 0 means 
187c0 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  none. */.    int
187d0 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20   lru;           
187e0 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65     /* Least rece
187f0 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20  ntly used entry 
18800 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  has the smallest
18810 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43   value */.  } aC
18820 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e  olCache[SQLITE_N
18830 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20  _COLCACHE];  /* 
18840 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  One for each col
18850 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20  umn cache entry 
18860 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69  */.  yDbMask wri
18870 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61  teMask;   /* Sta
18880 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  rt a write trans
18890 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20  action on these 
188a0 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79  databases */.  y
188b0 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73  DbMask cookieMas
188c0 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f  k;  /* Bitmask o
188d0 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65  f schema verifie
188e0 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  d databases */. 
188f0 20 69 6e 74 20 63 6f 6f 6b 69 65 47 6f 74 6f 3b   int cookieGoto;
18900 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
18910 20 6f 66 20 4f 50 5f 47 6f 74 6f 20 74 6f 20 63   of OP_Goto to c
18920 6f 6f 6b 69 65 20 76 65 72 69 66 69 65 72 20 73  ookie verifier s
18930 75 62 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 69  ubroutine */.  i
18940 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53  nt cookieValue[S
18950 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
18960 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65  ED+2];  /* Value
18970 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20  s of cookies to 
18980 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20  verify */.  int 
18990 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
189a0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
189b0 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
189c0 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
189d0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
189e0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
189f0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
18a00 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
18a10 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
18a20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
18a30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
18a40 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
18a50 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
18a60 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
18a70 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69    Token constrai
18a80 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f  ntName;/* Name o
18a90 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
18aa0 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
18ab0 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64   parsed */.#ifnd
18ac0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
18ad0 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e  HARED_CACHE.  in
18ae0 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20  t nTableLock;   
18af0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18b00 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c  f locks in aTabl
18b10 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65  eLock */.  Table
18b20 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b  Lock *aTableLock
18b30 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61  ; /* Required ta
18b40 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68  ble locks for sh
18b50 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
18b60 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f  */.#endif.  Auto
18b70 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20  incInfo *pAinc; 
18b80 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
18b90 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d  about AUTOINCREM
18ba0 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  ENT counters */.
18bb0 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  .  /* Informatio
18bc0 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64  n used while cod
18bd0 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67  ing trigger prog
18be0 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65  rams. */.  Parse
18bf0 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
18c00 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
18c10 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
18c20 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
18c30 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
18c40 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
18c50 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
18c60 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
18c70 0a 20 20 64 6f 75 62 6c 65 20 6e 51 75 65 72 79  .  double nQuery
18c80 4c 6f 6f 70 3b 20 20 20 2f 2a 20 45 73 74 69 6d  Loop;   /* Estim
18c90 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 69  ated number of i
18ca0 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
18cb0 75 65 72 79 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  uery */.  u32 ol
18cc0 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
18cd0 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
18ce0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
18cf0 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
18d00 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
18d10 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
18d20 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
18d30 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
18d40 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
18d50 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
18d60 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
18d70 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
18d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
18d90 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
18da0 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
18db0 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
18dc0 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
18dd0 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
18de0 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
18df0 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f 76 65 20 69  */..  /* Above i
18e00 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
18e10 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
18e20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
18e30 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
18e40 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
18e50 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56  ion */..  int nV
18e60 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
18e70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18e80 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
18e90 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
18ea0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
18eb0 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
18ec0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18ed0 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74  f available slot
18ee0 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a  s in azVar[] */.
18ef0 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
18f00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
18f10 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41  rue if the EXPLA
18f20 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64  IN flag is found
18f30 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f   on the query */
18f40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
18f50 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
18f60 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74  E.  u8 declareVt
18f70 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
18f80 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20   True if inside 
18f90 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
18fa0 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20  vtab() */.  int 
18fb0 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  nVtabLock;      
18fc0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18fd0 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
18fe0 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e  s to lock */.#en
18ff0 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73  dif.  int nAlias
19000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19010 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69  /* Number of ali
19020 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ased result set 
19030 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74  columns */.  int
19040 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
19050 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
19060 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
19070 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
19080 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
19090 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
190a0 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c  PLAIN.  int iSel
190b0 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20  ectId;          
190c0 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65    /* ID of curre
190d0 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58  nt select for EX
190e0 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
190f0 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63    int iNextSelec
19100 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  tId;        /* N
19110 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
19120 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c  lect ID for EXPL
19130 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  AIN output */.#e
19140 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a  ndif.  char **az
19150 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
19160 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20   /* Pointers to 
19170 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74  names of paramet
19180 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
19190 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
191a0 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
191b0 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
191c0 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
191d0 2f 0a 20 20 69 6e 74 20 2a 61 41 6c 69 61 73 3b  /.  int *aAlias;
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
191f0 20 52 65 67 69 73 74 65 72 20 75 73 65 64 20 74   Register used t
19200 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65 64 20 72  o hold aliased r
19210 65 73 75 6c 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  esult */.  const
19220 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
19230 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
19240 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
19250 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
19260 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
19270 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
19280 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
19290 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
192a0 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
192b0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
192c0 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
192d0 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
192e0 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
192f0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
19300 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
19310 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
19320 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
19330 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
19340 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
19350 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
19360 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
19370 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
19380 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
19390 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
193a0 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
193b0 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
193c0 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
193d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
193e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
193f0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19410 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
19420 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
19430 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
19440 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
19450 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
19460 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
19470 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
19480 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
19490 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
194a0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
194b0 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
194c0 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
194d0 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
194e0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
194f0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
19500 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
19510 69 67 67 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  iggers */.};../*
19520 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
19530 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
19540 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
19550 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
19560 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
19570 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
19580 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
19590 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
195a0 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
195b0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
195c0 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c  AB (pParse->decl
195d0 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a  areVtab).#endif.
195e0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
195f0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
19600 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
19610 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
19620 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
19630 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
19640 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
19650 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
19660 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
19670 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
19680 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
19690 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
196a0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
196b0 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
196c0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
196d0 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
196e0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
196f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
19700 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
19710 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
19720 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
19730 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
19740 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23  us opcodes..*/.#
19750 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
19760 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
19770 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
19780 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65  date db->nChange
19790 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
197a0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
197b0 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20   0x02    /* Set 
197c0 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
197d0 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
197e0 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
197f0 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
19800 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
19810 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
19820 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
19830 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
19840 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
19850 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
19860 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
19870 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
19880 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
19890 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
198a0 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
198b0 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
198c0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43  #define OPFLAG_C
198d0 4c 45 41 52 43 41 43 48 45 20 20 20 20 30 78 32  LEARCACHE    0x2
198e0 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73  0    /* Clear ps
198f0 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65  eudo-table cache
19900 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f   in OP_Column */
19910 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
19920 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78  LENGTHARG     0x
19930 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  40    /* OP_Colu
19940 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
19950 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65   length() */.#de
19960 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45  fine OPFLAG_TYPE
19970 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20  OFARG     0x80  
19980 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
19990 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70  nly used for typ
199a0 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  eof() */.#define
199b0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
199c0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
199d0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20   OP_Open** used 
199e0 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72  to open bulk cur
199f0 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  sor */.#define O
19a00 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
19a10 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50      0x02    /* P
19a20 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
19a30 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
19a40 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
19a50 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
19a60 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
19a70 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
19a80 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
19a90 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
19aa0 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
19ab0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
19ac0 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
19ad0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
19ae0 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
19af0 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74  er. . *. * Point
19b00 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73  ers to instances
19b10 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
19b20 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  er are stored in
19b30 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e   two ways.. * 1.
19b40 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73   In the "trigHas
19b50 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70  h" hash table (p
19b60 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74  art of the sqlit
19b70 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65  e3* that represe
19b80 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64  nts the . *    d
19b90 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61  atabase). This a
19ba0 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74  llows Trigger st
19bb0 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72  ructures to be r
19bc0 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65  etrieved by name
19bd0 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67  .. * 2. All trig
19be0 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20  gers associated 
19bf0 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61  with a single ta
19c00 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ble form a linke
19c10 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68  d list, using th
19c20 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65  e. *    pNext me
19c30 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54  mber of struct T
19c40 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65  rigger. A pointe
19c50 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
19c60 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a  lement of the. *
19c70 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20      linked list 
19c80 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65  is stored as the
19c90 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62   "pTrigger" memb
19ca0 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69  er of the associ
19cb0 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63  ated. *    struc
19cc0 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54  t Table.. *. * T
19cd0 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
19ce0 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  ember points to 
19cf0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
19d00 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t of a linked li
19d10 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67  st. * containing
19d20 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
19d30 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73  nts specified as
19d40 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
19d50 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74  gram.. */.struct
19d60 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61   Trigger {.  cha
19d70 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
19d80 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65       /* The name
19d90 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20   of the trigger 
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19db0 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72         */.  char
19dc0 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20   *table;        
19dd0 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65      /* The table
19de0 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
19df0 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70  h the trigger ap
19e00 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70  plies */.  u8 op
19e10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19e20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
19e30 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
19e40 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20  E, TK_INSERT    
19e50 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f       */.  u8 tr_
19e60 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  tm;             
19e70 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47    /* One of TRIG
19e80 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47  GER_BEFORE, TRIG
19e90 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45  GER_AFTER */.  E
19ea0 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20  xpr *pWhen;     
19eb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
19ec0 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  EN clause of the
19ed0 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79   expression (may
19ee0 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49   be NULL) */.  I
19ef0 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b  dList *pColumns;
19f00 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69         /* If thi
19f10 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f  s is an UPDATE O
19f20 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  F <column-list> 
19f30 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20  trigger,.       
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f50 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d        the <colum
19f60 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65  n-list> is store
19f70 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  d here */.  Sche
19f80 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
19f90 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
19fa0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
19fb0 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61  gger */.  Schema
19fc0 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20   *pTabSchema;   
19fd0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
19fe0 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
19ff0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1a000 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a  p *step_list; /*
1a010 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72   Link list of tr
1a020 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74  igger program st
1a030 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20  eps             
1a040 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1a050 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1a060 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73  Next trigger ass
1a070 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1a080 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   table */.};../*
1a090 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73  .** A trigger is
1a0a0 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45   either a BEFORE
1a0b0 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69   or an AFTER tri
1a0c0 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  gger.  The follo
1a0d0 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  wing constants.*
1a0e0 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  * determine whic
1a0f0 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  h. .**.** If the
1a100 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
1a110 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
1a120 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
1a130 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
1a140 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
1a150 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
1a160 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
1a170 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
1a180 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
1a190 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
1a1a0 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
1a1b0 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
1a1c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
1a1d0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
1a1e0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
1a1f0 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
1a200 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
1a210 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
1a220 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a  igger-program. .
1a230 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
1a240 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1a250 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
1a260 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
1a270 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
1a280 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
1a290 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
1a2a0 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
1a2b0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
1a2c0 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73  er of the . * as
1a2d0 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20  sociated struct 
1a2e0 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65  Trigger instance
1a2f0 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
1a300 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  ent of the linke
1a310 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65  d list is. * the
1a320 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74   first step of t
1a330 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  he trigger-progr
1a340 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22  am.. * . * The "
1a350 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
1a360 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
1a370 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
1a380 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
1a390 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
1a3a0 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
1a3b0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
1a3c0 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
1a3d0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
1a3e0 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f   the . * value o
1a3f0 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77  f "op" as follow
1a400 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  s:. *. * (op == 
1a410 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72  TK_INSERT). * or
1a420 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65  conf    -> store
1a430 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  s the ON CONFLIC
1a440 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70  T algorithm. * p
1a450 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74  Select   -> If t
1a460 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1a470 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54   INTO ... SELECT
1a480 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
1a490 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
1a4a0 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
1a4b0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
1a4c0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1a4d0 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  nt. Otherwise NU
1a4e0 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20  LL.. * target   
1a4f0 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
1a500 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
1a510 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1a520 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
1a530 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
1a540 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1a550 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
1a560 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
1a570 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1a580 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1a590 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
1a5a0 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
1a5b0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1a5c0 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
1a5d0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1a5e0 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
1a5f0 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
1a600 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20  ES ... . *      
1a610 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e          statemen
1a620 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f  t, then this sto
1a630 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e  res the column-n
1a640 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20  ames to be. *   
1a650 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72             inser
1a660 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20  ted into.. *. * 
1a670 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45  (op == TK_DELETE
1a680 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  ). * target    -
1a690 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
1a6a0 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
1a6b0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1a6c0 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
1a6d0 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
1a6e0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1a6f0 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
1a700 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
1a710 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
1a730 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1a740 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
1a750 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20  DATE). * target 
1a760 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1a770 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1a780 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1a790 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77  le to update row
1a7a0 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20  s of.. * pWhere 
1a7b0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1a7c0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
1a7d0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
1a7e0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1a7f0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1a800 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1a810 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
1a820 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
1a830 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
1a840 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
1a850 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
1a860 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1a870 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
1a880 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
1a890 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
1a8a0 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
1a8b0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
1a8c0 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72  ent.. * . */.str
1a8d0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1a8e0 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
1a8f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1a900 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1a910 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1a920 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
1a930 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
1a940 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
1a950 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
1a960 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
1a970 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
1a980 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
1a990 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
1a9a0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
1a9b0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
1a9c0 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72  LECT statment or
1a9d0 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49   RHS of INSERT I
1a9e0 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  NTO .. SELECT ..
1a9f0 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72  . */.  Token tar
1aa00 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  get;        /* T
1aa10 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20  arget table for 
1aa20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20  DELETE, UPDATE, 
1aa30 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72  INSERT */.  Expr
1aa40 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1aa50 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
1aa60 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20  ause for DELETE 
1aa70 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20  or UPDATE steps 
1aa80 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1aa90 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54  ExprList; /* SET
1aaa0 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41   clause for UPDA
1aab0 54 45 2e 20 20 56 41 4c 55 45 53 20 63 6c 61 75  TE.  VALUES clau
1aac0 73 65 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  se for INSERT */
1aad0 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1aae0 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1aaf0 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1ab00 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1ab10 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1ab20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1ab30 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1ab40 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1ab50 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1ab60 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1ab70 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1ab80 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1ab90 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1aba0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1abb0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1abc0 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1abd0 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1abe0 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1abf0 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1ac00 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1ac10 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1ac20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1ac30 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1ac40 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1ac50 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1ac60 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1ac70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1ac80 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1ac90 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1aca0 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1acb0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1acc0 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1acd0 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1ace0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1acf0 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
1ad00 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
1ad10 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
1ad20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
1ad30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1ad40 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
1ad50 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1ad60 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1ad70 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1ad80 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
1ad90 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
1ada0 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
1adb0 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
1adc0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
1add0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
1ade0 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
1adf0 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
1ae00 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
1ae10 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
1ae20 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
1ae30 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
1ae40 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
1ae50 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
1ae60 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
1ae70 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1ae80 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
1ae90 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
1aea0 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
1aeb0 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61  L */.  char *zBa
1aec0 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  se;         /* A
1aed0 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
1aee0 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c  .  Not from mall
1aef0 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  oc. */.  char *z
1af00 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
1af10 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
1af20 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
1af30 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20    int  nChar;   
1af40 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
1af50 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
1af60 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
1af70 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
1af80 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61  /* Amount of spa
1af90 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  ce allocated in 
1afa0 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20  zText */.  int  
1afb0 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  mxAlloc;        
1afc0 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77  /* Maximum allow
1afd0 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  ed string length
1afe0 20 2a 2f 0a 20 20 75 38 20 20 20 6d 61 6c 6c 6f   */.  u8   mallo
1aff0 63 46 61 69 6c 65 64 3b 20 20 20 2f 2a 20 42 65  cFailed;   /* Be
1b000 63 6f 6d 65 73 20 74 72 75 65 20 69 66 20 61 6e  comes true if an
1b010 79 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  y memory allocat
1b020 69 6f 6e 20 66 61 69 6c 73 20 2a 2f 0a 20 20 75  ion fails */.  u
1b030 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20  8   useMalloc;  
1b040 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20      /* 0: none, 
1b050 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c   1: sqlite3DbMal
1b060 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74 65 33  loc,  2: sqlite3
1b070 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20  _malloc */.  u8 
1b080 20 20 74 6f 6f 42 69 67 3b 20 20 20 20 20 20 20    tooBig;       
1b090 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75    /* Becomes tru
1b0a0 65 20 69 66 20 73 74 72 69 6e 67 20 73 69 7a 65  e if string size
1b0b0 20 65 78 63 65 65 64 73 20 6c 69 6d 69 74 73 20   exceeds limits 
1b0c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 70  */.};../*.** A p
1b0d0 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
1b0e0 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
1b0f0 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
1b100 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66  information.** f
1b110 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20  rom sqlite3Init 
1b120 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65  and OP_ParseSche
1b130 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69  ma into the sqli
1b140 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e  te3InitCallback.
1b150 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1b160 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ct {.  sqlite3 *
1b170 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
1b180 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  e database being
1b190 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1b1a0 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
1b1b0 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d  g;    /* Error m
1b1c0 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65  essage stored he
1b1d0 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  re */.  int iDb;
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
1b1f0 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
1b200 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
1b210 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
1b220 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  d */.  int rc;  
1b230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1b240 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64  sult code stored
1b250 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44   here */.} InitD
1b260 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  ata;../*.** Stru
1b270 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
1b280 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72   global configur
1b290 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74  ation data for t
1b2a0 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
1b2b0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  y..**.** This st
1b2c0 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e  ructure also con
1b2d0 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65  tains some state
1b2e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1b2f0 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  .struct Sqlite3C
1b300 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d  onfig {.  int bM
1b310 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20  emstat;         
1b320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b330 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  rue to enable me
1b340 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20  mory status */. 
1b350 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b   int bCoreMutex;
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b370 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1b380 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69  able core mutexi
1b390 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c  ng */.  int bFul
1b3a0 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  lMutex;         
1b3b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1b3c0 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c  e to enable full
1b3d0 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1b3e0 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20  nt bOpenUri;    
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65   /* True to inte
1b410 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20  rpret filenames 
1b420 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74  as URIs */.  int
1b430 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20   bUseCis;       
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b450 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69  * Use covering i
1b460 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d  ndices for full-
1b470 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d  scans */.  int m
1b480 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20  xStrlen;        
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b4a0 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c  Maximum string l
1b4b0 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 73  ength */.  int s
1b4c0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b4e0 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1b4f0 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
1b500 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
1b510 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1b520 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1b530 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1b540 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69   count */.  sqli
1b550 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1b560 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1b570 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
1b580 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
1b590 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1b5a0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1b5b0 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
1b5c0 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
1b5d0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1b5e0 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
1b5f0 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
1b600 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
1b610 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
1b620 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
1b630 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1b640 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
1b650 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
1b660 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1b690 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
1b6a0 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
1b6b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b6c0 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
1b6d0 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
1b6e0 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
1b6f0 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
1b700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1b710 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
1b720 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
1b730 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
1b740 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
1b750 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
1b760 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
1b770 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
1b780 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b790 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
1b7a0 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1b7b0 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b7d0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
1b7e0 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
1b7f0 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b810 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b820 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
1b830 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
1b840 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b850 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
1b860 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
1b870 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1b8a0 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
1b8b0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
1b8c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1b8d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b8e0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
1b8f0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
1b900 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
1b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b920 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
1b930 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
1b940 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
1b950 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
1b960 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
1b970 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
1b980 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
1b990 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76  */.  /* The abov
1b9a0 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69  e might be initi
1b9b0 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65  alized to non-ze
1b9c0 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ro.  The followi
1b9d0 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79  ng need to alway
1b9e0 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79  s.  ** initially
1b9f0 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65   be zero, howeve
1ba00 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e  r. */.  int isIn
1ba10 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1ba20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ba30 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69  e after initiali
1ba40 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73  zation has finis
1ba50 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50  hed */.  int inP
1ba60 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20  rogress;        
1ba70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ba80 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c  ue while initial
1ba90 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  ization in progr
1baa0 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  ess */.  int isM
1bab0 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20  utexInit;       
1bac0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1bad0 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73  ue after mutexes
1bae0 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
1baf0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c   */.  int isMall
1bb00 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  ocInit;         
1bb10 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1bb20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
1bb30 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1bb40 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69   int isPCacheIni
1bb50 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1bb60 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1bb70 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
1bb80 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69  alized */.  sqli
1bb90 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
1bba0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
1bbb0 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
1bbc0 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
1bbd0 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  e() */.  int nRe
1bbe0 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
1bbf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1bc00 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
1bc10 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
1bc20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f   void (*xLog)(vo
1bc30 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
1bc40 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f  ar*); /* Functio
1bc50 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f  n for logging */
1bc60 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67  .  void *pLogArg
1bc70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bc80 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
1bc90 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f   argument to xLo
1bca0 67 28 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f  g() */.  int bLo
1bcb0 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
1bcc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1bcd0 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
1bce0 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
1bcf0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1bd00 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
1bd10 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
1bd20 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
1bd30 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
1bd40 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
1bd50 67 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  g;.#endif.};../*
1bd60 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
1bd70 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
1bd80 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
1bd90 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
1bda0 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20   Walker {.  int 
1bdb0 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
1bdc0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
1bdd0 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
1bde0 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
1bdf0 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
1be00 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
1be10 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
1be20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1be30 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61   SELECTs */.  Pa
1be40 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65          /* Parse
1be70 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20  r context.  */. 
1be80 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68   int walkerDepth
1be90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1beb0 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69  mber of subqueri
1bec0 65 73 20 2a 2f 0a 20 20 75 38 20 62 53 65 6c 65  es */.  u8 bSele
1bed0 63 74 44 65 70 74 68 46 69 72 73 74 3b 20 20 20  ctDepthFirst;   
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bef0 20 20 2f 2a 20 44 6f 20 73 75 62 71 75 65 72 69    /* Do subqueri
1bf00 65 73 20 66 69 72 73 74 20 2a 2f 0a 20 20 75 6e  es first */.  un
1bf10 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
1bf40 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
1bf50 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
1bf60 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
1bf90 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
1bfa0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfc0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
1bfd0 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  ger value */.   
1bfe0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1bff0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
1c000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1c010 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1c020 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
1c030 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
1c040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c050 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
1c060 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1c070 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
1c080 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
1c090 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
1c0a0 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
1c0b0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1c0c0 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
1c0d0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
1c0e0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1c0f0 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
1c100 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1c110 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1c120 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
1c130 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1c140 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1c150 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
1c160 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  elect*);../*.** 
1c170 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1c180 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
1c190 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
1c1a0 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
1c1b0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
1c1c0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
1c1d0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
1c1e0 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
1c1f0 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
1c200 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
1c210 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
1c220 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
1c230 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
1c240 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
1c250 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
1c260 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
1c270 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
1c280 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
1c290 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
1c2a0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1c2b0 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
1c2c0 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
1c2d0 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
1c2e0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1c2f0 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
1c300 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
1c310 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
1c320 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c340 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
1c350 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
1c360 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1c380 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
1c390 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
1c3a0 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
1c3b0 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3f0 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
1c400 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
1c410 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
1c420 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
1c430 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
1c440 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
1c450 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
1c460 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
1c470 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
1c480 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
1c490 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
1c4a0 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
1c4b0 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
1c4c0 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
1c4d0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
1c4e0 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
1c4f0 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
1c500 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
1c510 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
1c520 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
1c530 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
1c540 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
1c550 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
1c560 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
1c570 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1c580 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
1c590 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
1c5a0 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
1c5b0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
1c5c0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
1c5d0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
1c5e0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
1c5f0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
1c600 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
1c610 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
1c620 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
1c630 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a  __LINE__).../*.*
1c640 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
1c650 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
1c660 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
1c670 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
1c680 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
1c690 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
1c6a0 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
1c6b0 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c  usion we also al
1c6c0 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
1c6d0 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
1c6e0 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
1c6f0 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c 49   alisse for SQLI
1c700 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
1c710 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1c720 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c730 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
1c740 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c750 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
1c760 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23  TE_ENABLE_FTS3.#
1c770 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1c780 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
1c790 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
1c7a0 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
1c7b0 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
1c7c0 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
1c7d0 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
1c7e0 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
1c7f0 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
1c800 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1c810 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
1c820 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
1c830 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
1c840 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1c850 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
1c860 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
1c870 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1c880 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1c890 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
1c8a0 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
1c8b0 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
1c8c0 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
1c8d0 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
1c8e0 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
1c8f0 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
1c900 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
1c910 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
1c920 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
1c930 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
1c940 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
1c950 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
1c960 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
1c970 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
1c980 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
1c990 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1c9a0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c9b0 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
1c9c0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
1c9d0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1c9e0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1c9f0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
1ca00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ca10 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
1ca20 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1ca30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1ca40 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
1ca50 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
1ca60 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1ca70 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1ca80 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
1ca90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1caa0 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
1cab0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1cac0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1cad0 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
1cae0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
1caf0 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
1cb00 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1cb10 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
1cb20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1cb30 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
1cb40 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
1cb50 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
1cb60 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20  r)(x)]).#else.# 
1cb70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1cb80 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70  upper(x)   toupp
1cb90 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
1cba0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1cbb0 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
1cbc0 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73  )   isspace((uns
1cbd0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1cbe0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cbf0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61  Isalnum(x)   isa
1cc00 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63  lnum((unsigned c
1cc10 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1cc20 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
1cc30 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75  (x)   isalpha((u
1cc40 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1cc50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1cc60 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69  e3Isdigit(x)   i
1cc70 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  sdigit((unsigned
1cc80 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1cc90 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
1cca0 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74  git(x)  isxdigit
1ccb0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1ccc0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1ccd0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1cce0 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67    tolower((unsig
1ccf0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65  ned char)(x)).#e
1cd00 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
1cd10 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
1cd20 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66  ototypes.*/.#def
1cd30 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49 43  ine sqlite3StrIC
1cd40 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  mp sqlite3_stric
1cd50 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  mp.int sqlite3St
1cd60 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
1cd70 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
1cd80 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
1cd90 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
1cda0 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
1cdb0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
1cdc0 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
1cdd0 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
1cde0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74  qlite3Malloc(int
1cdf0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1ce00 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b  MallocZero(int);
1ce10 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1ce20 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
1ce30 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  e3*, int);.void 
1ce40 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
1ce50 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Raw(sqlite3*, in
1ce60 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
1ce70 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
1ce80 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
1ce90 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
1cea0 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
1ceb0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1cec0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1ced0 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
1cee0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1cef0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
1cf00 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
1cf10 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  id *, int);.void
1cf20 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1cf30 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
1cf40 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  id *, int);.void
1cf50 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
1cf60 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
1cf70 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
1cf80 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
1cf90 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
1cfa0 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
1cfb0 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
1cfc0 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c  qlite3ScratchMal
1cfd0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
1cfe0 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65  qlite3ScratchFre
1cff0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  e(void*);.void *
1d000 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f  sqlite3PageMallo
1d010 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
1d020 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69  ite3PageFree(voi
1d030 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
1d040 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76  3MemSetDefault(v
1d050 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1d060 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
1d070 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
1d080 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
1d090 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d));.int sqlite3
1d0a0 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
1d0b0 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
1d0c0 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
1d0d0 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
1d0e0 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
1d0f0 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
1d100 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
1d110 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
1d120 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
1d130 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
1d140 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
1d150 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
1d160 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
1d170 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
1d180 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
1d190 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
1d1a0 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
1d1b0 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
1d1c0 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
1d1d0 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
1d1e0 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
1d1f0 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
1d200 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
1d210 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
1d220 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
1d230 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
1d240 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1d250 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
1d260 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
1d270 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
1d280 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1d290 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
1d2a0 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65       .#else.# de
1d2b0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1d2c0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
1d2d0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1d2e0 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
1d2f0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1d300 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
1d310 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
1d320 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
1d330 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
1d340 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
1d350 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
1d360 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
1d370 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
1d380 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
1d390 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
1d3a0 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
1d3b0 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
1d3c0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1d3d0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
1d3e0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
1d3f0 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
1d400 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
1d410 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
1d420 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
1d430 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
1d440 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1d450 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
1d460 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
1d470 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
1d480 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
1d490 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
1d4a0 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
1d4b0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
1d4c0 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
1d4d0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
1d4e0 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
1d4f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
1d500 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
1d510 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
1d520 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74  3StatusValue(int
1d530 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1d540 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e  tatusAdd(int, in
1d550 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d560 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69  StatusSet(int, i
1d570 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  nt);..#ifndef SQ
1d580 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
1d590 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
1d5a0 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
1d5b0 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
1d5c0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
1d5d0 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 76  (X)  0.#endif..v
1d5e0 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69  oid sqlite3VXPri
1d5f0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 69  ntf(StrAccum*, i
1d600 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
1d610 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 6e 64   va_list);.#ifnd
1d620 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
1d630 52 41 43 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  RACE.void sqlite
1d640 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  3XPrintf(StrAccu
1d650 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  m*, const char*,
1d660 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 63 68   ...);.#endif.ch
1d670 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
1d680 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
1d690 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
1d6a0 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
1d6b0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
1d6c0 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
1d6d0 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  st);.char *sqlit
1d6e0 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74  e3MAppendf(sqlit
1d6f0 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20  e3*,char*,const 
1d700 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20  char*,...);.#if 
1d710 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1d720 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
1d730 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
1d740 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
1d750 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
1d760 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
1d770 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1d780 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
1d790 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
1d7a0 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
1d7b0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ar*);.#endif../*
1d7c0 20 4f 75 74 70 75 74 20 66 6f 72 6d 61 74 74 69   Output formatti
1d7d0 6e 67 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ng for SQLITE_TE
1d7e0 53 54 43 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a  STCTRL_EXPLAIN *
1d7f0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
1d800 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45  LITE_ENABLE_TREE
1d810 5f 45 58 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64  _EXPLAIN).  void
1d820 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
1d830 65 67 69 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76  egin(Vdbe*);.  v
1d840 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d850 69 6e 50 72 69 6e 74 66 28 56 64 62 65 2a 2c 20  inPrintf(Vdbe*, 
1d860 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1d870 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d880 33 45 78 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a  3ExplainNL(Vdbe*
1d890 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d8a0 33 45 78 70 6c 61 69 6e 50 75 73 68 28 56 64 62  3ExplainPush(Vdb
1d8b0 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
1d8c0 74 65 33 45 78 70 6c 61 69 6e 50 6f 70 28 56 64  te3ExplainPop(Vd
1d8d0 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
1d8e0 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73  ite3ExplainFinis
1d8f0 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  h(Vdbe*);.  void
1d900 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
1d910 65 6c 65 63 74 28 56 64 62 65 2a 2c 20 53 65 6c  elect(Vdbe*, Sel
1d920 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
1d930 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1d940 28 56 64 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  (Vdbe*, Expr*);.
1d950 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d960 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 56 64  plainExprList(Vd
1d970 62 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  be*, ExprList*);
1d980 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  .  const char *s
1d990 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e  qlite3VdbeExplan
1d9a0 61 74 69 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65  ation(Vdbe*);.#e
1d9b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1d9c0 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e  ite3ExplainBegin
1d9d0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1d9e0 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63  ite3ExplainSelec
1d9f0 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  t(A,B).# define 
1da00 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
1da10 70 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  pr(A,B).# define
1da20 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
1da30 78 70 72 4c 69 73 74 28 41 2c 42 29 0a 23 20 64  xprList(A,B).# d
1da40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1da50 6c 61 69 6e 46 69 6e 69 73 68 28 58 29 0a 23 20  lainFinish(X).# 
1da60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
1da70 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29  beExplanation(X)
1da80 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64   0.#endif...void
1da90 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
1daa0 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
1dab0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
1dac0 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
1dad0 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
1dae0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
1daf0 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69  , ...);.int sqli
1db00 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
1db10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
1db20 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
1db30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
1db40 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1db50 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
1db60 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1db70 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
1db80 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
1db90 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
1dba0 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
1dbb0 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
1dbc0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
1dbd0 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
1dbe0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1dbf0 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
1dc00 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1dc10 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
1dc20 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
1dc30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1dc40 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
1dc50 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70  che(Parse*);.Exp
1dc60 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
1dc70 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
1dc80 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
1dc90 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
1dca0 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
1dcb0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1dcc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1dcd0 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
1dce0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
1dcf0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
1dd00 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
1dd10 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
1dd20 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  r*, Expr*, const
1dd30 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a   Token*);.Expr *
1dd40 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73  sqlite3ExprAnd(s
1dd50 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45  qlite3*,Expr*, E
1dd60 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
1dd70 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
1dd80 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1dd90 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
1dda0 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69   sqlite3ExprAssi
1ddb0 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73  gnVarNumber(Pars
1ddc0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
1ddd0 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
1dde0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
1ddf0 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
1de00 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
1de10 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
1de20 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
1de30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1de40 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
1de50 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
1de60 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1de70 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
1de80 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
1de90 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
1dea0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1deb0 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
1dec0 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
1ded0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
1dee0 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
1def0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
1df00 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
1df10 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
1df20 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73   char**);.void s
1df30 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
1df40 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1df50 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
1df60 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
1df70 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
1df80 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
1df90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1dfa0 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
1dfb0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
1dfc0 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
1dfd0 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
1dfe0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
1dff0 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28  lite3BeginParse(
1e000 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
1e010 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
1e020 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
1e030 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20  qlite3*);.Table 
1e040 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
1e050 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
1e060 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
1e070 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
1e080 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
1e090 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e0a0 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
1e0b0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1e0c0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
1e0d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e0e0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
1e0f0 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
1e100 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
1e110 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
1e120 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
1e130 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
1e140 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
1e150 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e160 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
1e170 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
1e180 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
1e190 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
1e1a0 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Type(Parse*,Toke
1e1b0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1e1c0 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
1e1d0 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e  (Parse*,ExprSpan
1e1e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e1f0 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
1e200 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
1e210 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
1e220 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
1e230 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74  n*,Token*,Select
1e240 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  *);.int sqlite3P
1e250 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68  arseUri(const ch
1e260 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
1e270 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20  unsigned int*,. 
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e290 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a     sqlite3_vfs**
1e2a0 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29  ,char**,char **)
1e2b0 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  ;.Btree *sqlite3
1e2c0 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
1e2d0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1e2e0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1e2f0 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a  CodeOnce(Parse *
1e300 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  );..Bitvec *sqli
1e310 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
1e320 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
1e330 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
1e340 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
1e350 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28  qlite3BitvecSet(
1e360 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76  Bitvec*, u32);.v
1e370 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
1e380 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20  cClear(Bitvec*, 
1e390 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  u32, void*);.voi
1e3a0 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44  d sqlite3BitvecD
1e3b0 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b  estroy(Bitvec*);
1e3c0 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76  .u32 sqlite3Bitv
1e3d0 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b  ecSize(Bitvec*);
1e3e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1e3f0 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e  ecBuiltinTest(in
1e400 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74  t,int*);..RowSet
1e410 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49   *sqlite3RowSetI
1e420 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  nit(sqlite3*, vo
1e430 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e  id*, unsigned in
1e440 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e450 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53  RowSetClear(RowS
1e460 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  et*);.void sqlit
1e470 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52  e3RowSetInsert(R
1e480 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e  owSet*, i64);.in
1e490 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  t sqlite3RowSetT
1e4a0 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 75 38 20  est(RowSet*, u8 
1e4b0 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e  iBatch, i64);.in
1e4c0 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  t sqlite3RowSetN
1e4d0 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ext(RowSet*, i64
1e4e0 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
1e4f0 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73  3CreateView(Pars
1e500 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1e510 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c  ,Token*,Select*,
1e520 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
1e530 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1e540 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
1e550 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1e560 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
1e570 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
1e580 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
1e590 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
1e5a0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1e5b0 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
1e5c0 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
1e5d0 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
1e5e0 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61  ite3DropTable(Pa
1e5f0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1e600 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1e610 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54  sqlite3CodeDropT
1e620 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62  able(Parse*, Tab
1e630 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
1e640 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
1e650 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
1e660 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64  , Table*);.#ifnd
1e670 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
1e680 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76  UTOINCREMENT.  v
1e690 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
1e6a0 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61  ncrementBegin(Pa
1e6b0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20  rse *pParse);.  
1e6c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
1e6d0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72  incrementEnd(Par
1e6e0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c  se *pParse);.#el
1e6f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1e700 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1e710 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
1e720 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
1e730 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e  rementEnd(X).#en
1e740 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
1e750 6f 64 65 43 6f 72 6f 75 74 69 6e 65 28 50 61 72  odeCoroutine(Par
1e760 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
1e770 6c 65 63 74 44 65 73 74 2a 29 3b 0a 76 6f 69 64  lectDest*);.void
1e780 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
1e790 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1e7a0 20 45 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65   ExprList*, Sele
1e7b0 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
1e7c0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1e7d0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
1e7e0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
1e7f0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
1e800 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
1e810 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
1e820 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
1e830 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
1e840 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
1e850 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
1e860 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1e870 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
1e880 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
1e890 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
1e8a0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
1e8b0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
1e8c0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
1e8d0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1e8e0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
1e8f0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
1e900 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
1e910 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
1e920 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e950 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
1e960 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
1e970 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e980 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
1e990 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
1e9a0 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69  t *, Token *);.i
1e9b0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65  nt sqlite3Indexe
1e9c0 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20  dByLookup(Parse 
1e9d0 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  *, struct SrcLis
1e9e0 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20  t_item *);.void 
1e9f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
1ea00 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c  iftJoinType(SrcL
1ea10 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1ea20 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e  te3SrcListAssign
1ea30 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20  Cursors(Parse*, 
1ea40 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
1ea50 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c  sqlite3IdListDel
1ea60 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  ete(sqlite3*, Id
1ea70 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
1ea80 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74  ite3SrcListDelet
1ea90 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
1eaa0 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  ist*);.Index *sq
1eab0 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78  lite3CreateIndex
1eac0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1ead0 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  oken*,SrcList*,E
1eae0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b  xprList*,int,Tok
1eaf0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
1eb10 65 6e 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  en*, int, int);.
1eb20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1eb30 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72  Index(Parse*, Sr
1eb40 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  cList*, int);.in
1eb50 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  t sqlite3Select(
1eb60 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
1eb70 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53   SelectDest*);.S
1eb80 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
1eb90 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45  lectNew(Parse*,E
1eba0 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  xprList*,SrcList
1ebb0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1ebc0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
1ebe0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
1ebf0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  Expr*,Expr*);.vo
1ec00 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
1ec10 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1ec20 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65   Select*);.Table
1ec30 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1ec40 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53  Lookup(Parse*, S
1ec50 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
1ec60 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28  lite3IsReadOnly(
1ec70 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1ec80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1ec90 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73  e3OpenTable(Pars
1eca0 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e  e*, int iCur, in
1ecb0 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69  t iDb, Table*, i
1ecc0 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  nt);.#if defined
1ecd0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  (SQLITE_ENABLE_U
1ece0 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
1ecf0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
1ed00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
1ed10 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69  UERY).Expr *sqli
1ed20 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61  te3LimitWhere(Pa
1ed30 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
1ed40 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
1ed50 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29  pr*,Expr*,char*)
1ed60 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
1ed70 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28  lite3DeleteFrom(
1ed80 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1ed90 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1eda0 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72  qlite3Update(Par
1edb0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
1edc0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
1edd0 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f   int);.WhereInfo
1ede0 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65   *sqlite3WhereBe
1edf0 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  gin(Parse*,SrcLi
1ee00 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
1ee10 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31  st*,ExprList*,u1
1ee20 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  6,int);.void sql
1ee30 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65  ite3WhereEnd(Whe
1ee40 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
1ee50 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
1ee60 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
1ee70 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
1ee80 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
1ee90 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
1eea0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
1eeb0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
1eec0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1eed0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1eee0 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
1eef0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1ef00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1ef10 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
1ef20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1ef30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1ef40 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
1ef50 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1ef60 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
1ef70 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1ef80 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1ef90 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c  heRemove(Parse*,
1efa0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1efb0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1efc0 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a  eClear(Parse*);.
1efd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1efe0 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61  CacheAffinityCha
1eff0 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  nge(Parse*, int,
1f000 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1f010 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65  e3ExprCode(Parse
1f020 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1f030 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1f040 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
1f050 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
1f060 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1f070 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
1f080 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
1f090 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1f0a0 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c  AndCache(Parse*,
1f0b0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
1f0c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1f0d0 64 65 43 6f 6e 73 74 61 6e 74 73 28 50 61 72 73  deConstants(Pars
1f0e0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  e*, Expr*);.int 
1f0f0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
1f100 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
1f110 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
1f120 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f130 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
1f140 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
1f150 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f160 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
1f170 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1f180 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
1f190 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
1f1a0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1f1b0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1f1c0 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
1f1d0 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
1f1e0 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
1f1f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
1f200 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
1f210 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
1f220 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
1f230 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75  ,int isView,stru
1f240 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
1f250 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
1f260 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69  e3FindIndex(sqli
1f270 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1f280 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
1f290 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
1f2a0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
1f2b0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1f2c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1f2d0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
1f2e0 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c  dDeleteIndex(sql
1f2f0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
1f300 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
1f310 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65  ite3Vacuum(Parse
1f320 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
1f330 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c  unVacuum(char**,
1f340 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72   sqlite3*);.char
1f350 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
1f360 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
1f370 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
1f380 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
1f390 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  (Expr*, Expr*);.
1f3a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
1f3b0 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
1f3c0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ist*, ExprList*)
1f3d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1f3e0 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
1f3f0 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
1f400 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1f410 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
1f420 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
1f430 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
1f440 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e  ;.int sqlite3Fun
1f450 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63  ctionUsesThisSrc
1f460 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a  (Expr*, SrcList*
1f470 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33  );.Vdbe *sqlite3
1f480 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b  GetVdbe(Parse*);
1f490 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
1f4a0 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
1f4b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
1f4c0 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
1f4d0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1f4e0 65 33 50 72 6e 67 52 65 73 65 74 53 74 61 74 65  e3PrngResetState
1f4f0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1f500 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
1f510 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
1f520 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
1f530 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
1f540 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1f550 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
1f560 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
1f570 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
1f580 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
1f590 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
1f5a0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
1f5b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
1f5c0 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  mitTransaction(P
1f5d0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1f5e0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e  ite3RollbackTran
1f5f0 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
1f600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76  .void sqlite3Sav
1f610 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  epoint(Parse*, i
1f620 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nt, Token*);.voi
1f630 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
1f640 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
1f650 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
1f660 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c  3LeaveMutexAndCl
1f670 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65  oseZombie(sqlite
1f680 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
1f690 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
1f6a0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1f6b0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
1f6c0 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
1f6d0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
1f6e0 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
1f6f0 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ion(Expr*);.int 
1f700 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74  sqlite3ExprIsInt
1f710 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a  eger(Expr*, int*
1f720 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f730 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73  prCanBeNull(cons
1f740 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  t Expr*);.void s
1f750 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 49 73  qlite3ExprCodeIs
1f760 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a 2c 20  NullJump(Vdbe*, 
1f770 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69 6e 74  const Expr*, int
1f780 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1f790 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
1f7a0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
1f7b0 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
1f7c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
1f7d0 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
1f7e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
1f7f0 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
1f800 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1f810 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 54  int, int, int, T
1f820 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 29 3b 0a  rigger *, int);.
1f830 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
1f840 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
1f850 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
1f860 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69  *, int, int*);.i
1f870 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
1f880 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
1f890 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
1f8a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1f8b0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
1f8c0 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
1f8d0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
1f8e0 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f900 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2a              int*
1f910 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
1f920 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
1f930 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
1f940 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 54 61  rtion(Parse*, Ta
1f950 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1f960 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  int*, int, int, 
1f970 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1f980 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
1f990 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ices(Parse*, Tab
1f9a0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
1f9b0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1f9c0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
1f9d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1f9e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
1f9f0 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
1fa00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
1fa10 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
1fa20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
1fa30 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
1fa40 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
1fa50 61 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  ar*, int);.Expr 
1fa60 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28  *sqlite3ExprDup(
1fa70 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
1fa80 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  nt);.ExprList *s
1fa90 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75  qlite3ExprListDu
1faa0 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c  p(sqlite3*,ExprL
1fab0 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69  ist*,int);.SrcLi
1fac0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1fad0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53  stDup(sqlite3*,S
1fae0 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64  rcList*,int);.Id
1faf0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
1fb00 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
1fb10 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74  IdList*);.Select
1fb20 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44   *sqlite3SelectD
1fb30 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  up(sqlite3*,Sele
1fb40 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ct*,int);.void s
1fb50 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73  qlite3FuncDefIns
1fb60 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a  ert(FuncDefHash*
1fb70 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e  , FuncDef*);.Fun
1fb80 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
1fb90 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
1fba0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
1fbb0 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  nt,int,u8,u8);.v
1fbc0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
1fbd0 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
1fbe0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ons(sqlite3*);.v
1fbf0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
1fc00 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
1fc10 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
1fc20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1fc30 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28  GlobalFunctions(
1fc40 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
1fc50 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
1fc60 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
1fc70 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
1fc80 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
1fc90 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
1fca0 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
1fcb0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
1fcc0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1fcd0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
1fce0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1fcf0 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
1fd00 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
1fd10 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
1fd20 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
1fd30 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
1fd40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1fd50 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
1fd60 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
1fd70 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
1fd80 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
1fd90 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
1fda0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdc0 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
1fdd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
1fde0 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
1fdf0 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
1fe00 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
1fe10 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
1fe20 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
1fe30 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
1fe40 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1fe50 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
1fe60 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
1fe70 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
1fe80 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
1fe90 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
1fea0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
1feb0 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
1fec0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
1fed0 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
1fee0 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
1fef0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
1ff00 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
1ff10 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
1ff20 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1ff30 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff50 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
1ff60 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
1ff70 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
1ff80 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
1ff90 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
1ffa0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
1ffb0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
1ffc0 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
1ffd0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1ffe0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
1fff0 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
20000 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
20010 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
20020 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
20030 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
20040 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
20050 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
20060 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54  3*,Select*);.  T
20070 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
20080 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74  te3TriggerInsert
20090 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
200a0 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20  ken*, IdList*,. 
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 20 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 2a         ExprList*
200e0 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20  ,Select*,u8);.  
200f0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
20100 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
20110 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
20120 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
20130 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54   Expr*, u8);.  T
20140 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
20150 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65  te3TriggerDelete
20160 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
20170 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20  ken*, Expr*);.  
20180 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
20190 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
201a0 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
201b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
201c0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
201d0 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
201e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
201f0 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
20200 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
20210 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
20220 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
20230 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
20240 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
20250 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
20260 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
20270 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
20280 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  )).#else.# defin
20290 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
202a0 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
202b0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
202c0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
202d0 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
202e0 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
202f0 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
20300 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
20310 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
20320 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
20330 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
20340 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
20350 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
20360 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
20370 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
20380 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
20390 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
203a0 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
203b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
203c0 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
203d0 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
203e0 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
203f0 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
20400 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
20410 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
20420 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
20430 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
20440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
20450 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
20460 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
20470 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
20480 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
20490 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
204a0 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
204b0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
204c0 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
204d0 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
204e0 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
204f0 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
20500 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
20510 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
20520 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
20530 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
20540 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
20550 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
20560 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
20570 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
20580 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
20590 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
205a0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
205b0 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
205c0 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
205d0 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
205e0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
205f0 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
20600 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
20610 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
20620 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
20630 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20640 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
20650 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
20660 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
20670 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
20680 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
20690 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
206a0 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
206b0 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
206c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
206d0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
206e0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
206f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
20700 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
20710 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
20720 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
20730 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
20740 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
20750 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
20760 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
20770 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
20780 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
20790 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
207a0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
207b0 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
207c0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
207d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
207e0 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
207f0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
20800 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
20810 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
20820 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
20830 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
20840 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
20850 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
20860 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
20870 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
20880 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
20890 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
208a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
208b0 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
208c0 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
208d0 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
208e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
208f0 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
20900 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
20910 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
20920 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
20930 73 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  st u8**);../*.**
20940 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
20950 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
20960 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
20970 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
20980 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
20990 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
209a0 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
209b0 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
209c0 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
209d0 66 69 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75  file.  Code shou
209e0 6c 64 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f  ld use the MACRO
209f0 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73   forms below, as
20a00 20 74 68 65 20 56 61 72 69 6e 74 33 32 20 76 65   the Varint32 ve
20a10 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f  rsions.** are co
20a20 64 65 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68  ded to assume th
20a30 65 20 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61  e single byte ca
20a40 73 65 20 69 73 20 61 6c 72 65 61 64 79 20 68 61  se is already ha
20a50 6e 64 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a  ndled (which .**
20a60 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20   the MACRO form 
20a70 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  does)..*/.int sq
20a80 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
20a90 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
20aa0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
20ab0 50 75 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69  PutVarint32(unsi
20ac0 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29  gned char*, u32)
20ad0 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
20ae0 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
20af0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
20b00 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
20b10 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
20b20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
20b30 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
20b40 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
20b50 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
20b60 65 20 68 65 61 64 65 72 20 6f 66 20 61 20 72 65  e header of a re
20b70 63 6f 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66  cord consists of
20b80 20 61 20 73 65 71 75 65 6e 63 65 20 76 61 72 69   a sequence vari
20b90 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
20ba0 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69  gers..** These i
20bb0 6e 74 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f  ntegers are almo
20bc0 73 74 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20  st always small 
20bd0 61 6e 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20  and are encoded 
20be0 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  as a single byte
20bf0 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ..** The followi
20c00 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61  ng macros take a
20c10 64 76 61 6e 74 61 67 65 20 74 68 69 73 20 66 61  dvantage this fa
20c20 63 74 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20  ct to provide a 
20c30 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61  fast encode.** a
20c40 6e 64 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65  nd decode of the
20c50 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72   integers in a r
20c60 65 63 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49  ecord header.  I
20c70 74 20 69 73 20 66 61 73 74 65 72 20 66 6f 72 20  t is faster for 
20c80 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61  the common.** ca
20c90 73 65 20 77 68 65 72 65 20 74 68 65 20 69 6e 74  se where the int
20ca0 65 67 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65  eger is a single
20cb0 20 62 79 74 65 2e 20 20 49 74 20 69 73 20 61 20   byte.  It is a 
20cc0 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68  little slower wh
20cd0 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  en the.** intege
20ce0 72 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65  r is two or more
20cf0 20 62 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65   bytes.  But ove
20d00 72 61 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65  rall it is faste
20d10 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  r..**.** The fol
20d20 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f  lowing expressio
20d30 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e  ns are equivalen
20d40 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d  t:.**.**     x =
20d50 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
20d60 74 33 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a  t32( A, &B );.**
20d70 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
20d80 50 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  PutVarint32( A, 
20d90 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78  B );.**.**     x
20da0 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 20   = getVarint32( 
20db0 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78  A, B );.**     x
20dc0 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 20   = putVarint32( 
20dd0 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64  A, B );.**.*/.#d
20de0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
20df0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
20e00 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
20e10 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
20e20 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
20e30 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
20e40 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
20e50 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
20e60 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
20e70 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
20e80 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
20e90 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
20ea0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
20eb0 33 32 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  32((A),(B))).#de
20ec0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
20ed0 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
20ee0 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
20ef0 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
20f00 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
20f10 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
20f20 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56  dexAffinityStr(V
20f30 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  dbe *, Index *);
20f40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
20f50 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  leAffinityStr(Vd
20f60 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  be *, Table *);.
20f70 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
20f80 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
20f90 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
20fa0 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
20fb0 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
20fc0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
20fd0 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
20fe0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
20ff0 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
21000 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
21010 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
21020 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
21030 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
21040 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
21050 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
21060 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a  ar*,...);.void *
21070 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
21080 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
21090 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
210a0 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
210b0 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
210c0 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
210d0 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
210e0 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
210f0 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64  oken **);..#if d
21100 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
21110 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
21120 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
21130 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
21140 4c 49 54 45 5f 44 45 42 55 47 5f 4f 53 5f 54 52  LITE_DEBUG_OS_TR
21150 41 43 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  ACE).const char 
21160 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
21170 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  int);.#endif..co
21180 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
21190 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
211a0 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
211b0 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
211c0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
211d0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
211e0 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
211f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
21200 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
21210 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
21220 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
21230 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
21240 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
21250 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
21260 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
21270 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
21280 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
21290 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
212a0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
212b0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  *, Token*);.Expr
212c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
212d0 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
212e0 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
212f0 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
21300 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
21310 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
21320 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
21330 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
21340 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
21350 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
21360 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
21370 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
21380 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
21390 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
213a0 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
213b0 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
213c0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
213d0 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
213e0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
213f0 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
21400 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
21410 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
21420 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
21430 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
21440 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
21450 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
21460 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
21470 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
21480 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
21490 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
214a0 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
214b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e  const char *z,in
214c0 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  t);..const void 
214d0 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78  *sqlite3ValueTex
214e0 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t(sqlite3_value*
214f0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
21500 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c  e3ValueBytes(sql
21510 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
21520 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
21530 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65  lueSetStr(sqlite
21540 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63  3_value*, int, c
21550 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20  onst void *,u8, 
21560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21570 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29           void(*)
21580 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
21590 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
215a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
215b0 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
215c0 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
215d0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72  sqlite3 *);.char
215e0 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
215f0 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
21600 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
21610 38 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  8);.#ifdef SQLIT
21620 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 63  E_ENABLE_STAT3.c
21630 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 38  har *sqlite3Utf8
21640 74 6f 31 36 28 73 71 6c 69 74 65 33 20 2a 2c 20  to16(sqlite3 *, 
21650 75 38 2c 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  u8, char *, int,
21660 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a   int *);.#endif.
21670 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
21680 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
21690 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
216a0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
216b0 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
216c0 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
216d0 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
216e0 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
216f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
21700 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
21710 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
21720 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
21730 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
21740 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
21750 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
21760 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
21770 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
21780 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
21790 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
217a0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
217b0 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
217c0 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
217d0 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
217e0 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
217f0 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
21800 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46  ern SQLITE_WSD F
21810 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
21820 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  e3GlobalFunction
21830 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
21840 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
21850 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
21860 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
21870 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
21880 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
21890 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
218a0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
218b0 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
218c0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
218d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
218e0 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
218f0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
21900 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
21910 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
21920 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
21930 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
21940 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
21950 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
21960 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
21970 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
21980 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
21990 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
219a0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
219b0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
219c0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
219d0 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
219e0 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
219f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
21a00 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
21a10 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
21a20 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
21a30 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
21a40 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
21a50 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
21a60 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
21a70 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
21a80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
21a90 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
21aa0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
21ab0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21ac0 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
21ad0 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
21ae0 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
21af0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
21b00 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
21b10 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
21b20 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
21b30 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
21b40 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
21b50 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
21b60 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
21b70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21b80 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
21b90 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
21ba0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
21bb0 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
21bc0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
21bd0 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
21be0 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
21bf0 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
21c00 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
21c10 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
21c20 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
21c30 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
21c40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21c50 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54  nalyze(Parse*, T
21c60 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
21c70 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
21c80 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
21c90 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20  yHandler*);.int 
21ca0 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71  sqlite3FindDb(sq
21cb0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
21cc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
21cd0 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  DbName(sqlite3 *
21ce0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
21cf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c  .int sqlite3Anal
21d00 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33  ysisLoad(sqlite3
21d10 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64  *,int iDB);.void
21d20 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e   sqlite3DeleteIn
21d30 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74  dexSamples(sqlit
21d40 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  e3*,Index*);.voi
21d50 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74  d sqlite3Default
21d60 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a  RowEst(Index*);.
21d70 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
21d80 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
21d90 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  s(sqlite3*, int)
21da0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c  ;.int sqlite3IsL
21db0 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  ikeFunction(sqli
21dc0 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c  te3*,Expr*,int*,
21dd0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21de0 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46  ite3MinimumFileF
21df0 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e  ormat(Parse*, in
21e00 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21e10 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
21e20 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
21e30 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
21e40 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
21e50 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
21e60 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
21e70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
21e80 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
21e90 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 4b 65   *sqlite3IndexKe
21ea0 79 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c 20 49  yinfo(Parse *, I
21eb0 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndex *);.int sql
21ec0 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
21ed0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
21ee0 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
21ef0 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
21f00 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
21f10 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
21f20 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
21f30 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
21f40 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
21f50 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
21f60 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
21f70 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
21f80 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
21f90 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e  Destructor.);.in
21fa0 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
21fb0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
21fc0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
21fd0 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
21fe0 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
21ff0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
22000 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  nit(StrAccum*, c
22010 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
22020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
22030 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
22040 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
22050 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
22060 69 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28  ite3AppendSpace(
22070 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a  StrAccum*,int);.
22080 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
22090 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41  AccumFinish(StrA
220a0 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
220b0 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65  ite3StrAccumRese
220c0 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  t(StrAccum*);.vo
220d0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
220e0 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
220f0 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
22100 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
22110 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
22120 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
22130 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
22140 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
22150 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
22160 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
22170 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
22180 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
22190 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
221a0 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  st u8 *);../*.**
221b0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
221c0 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65  o the LEMON-gene
221d0 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a  rated parser.*/.
221e0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
221f0 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
22200 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64  )(size_t));.void
22210 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
22220 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
22230 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
22240 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
22250 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
22260 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
22270 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
22280 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
22290 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
222a0 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
222b0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
222c0 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
222d0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
222e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
222f0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
22300 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
22310 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
22320 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
22330 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
22340 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
22350 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
22360 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
22370 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
22380 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
22390 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
223a0 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
223b0 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
223c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
223d0 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
223e0 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
223f0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
22400 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
22410 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
22420 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
22430 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
22440 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
22450 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
22460 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
22470 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
22480 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
22490 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
224a0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
224b0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
224c0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
224d0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
224e0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
224f0 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
22500 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
22510 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73  (X) .#  define s
22520 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
22530 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
22540 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
22550 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
22560 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
22570 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
22580 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
22590 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
225a0 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
225b0 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
225c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
225d0 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
225e0 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
225f0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
22600 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
22610 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
22620 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
22630 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
22640 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a 29 3b 0a   *db, char **);.
22650 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
22660 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
22670 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
22680 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
22690 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
226a0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
226b0 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
226c0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
226d0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
226e0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
226f0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
22700 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
22710 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
22720 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
22730 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
22740 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
22750 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
22760 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
22770 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ;.#  define sqli
22780 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
22790 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73  ) ((db)->nVTrans
227a0 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72  >0 && (db)->aVTr
227b0 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76  ans==0).#endif.v
227c0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d  oid sqlite3VtabM
227d0 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72 73  akeWritable(Pars
227e0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64  e*,Table*);.void
227f0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
22800 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  nParse(Parse*, T
22810 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
22820 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oken*, int);.voi
22830 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e  d sqlite3VtabFin
22840 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ishParse(Parse*,
22850 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
22860 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e 69  qlite3VtabArgIni
22870 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
22880 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45 78  sqlite3VtabArgEx
22890 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b  tend(Parse*, Tok
228a0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
228b0 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28  3VtabCallCreate(
228c0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
228d0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61  onst char *, cha
228e0 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  r **);.int sqlit
228f0 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63  e3VtabCallConnec
22900 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  t(Parse*, Table*
22910 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
22920 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71  abCallDestroy(sq
22930 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
22940 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
22950 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
22960 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62  (sqlite3 *, VTab
22970 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  le *);.FuncDef *
22980 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c  sqlite3VtabOverl
22990 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  oadFunction(sqli
229a0 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20  te3 *,FuncDef*, 
229b0 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29  int nArg, Expr*)
229c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
229d0 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71  validFunction(sq
229e0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
229f0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
22a00 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
22a10 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
22a20 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
22a30 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
22a40 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
22a50 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
22a60 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
22a70 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74 20 73 71  _stmt *);.int sq
22a80 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
22a90 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
22aa0 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
22ab0 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
22ac0 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
22ad0 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
22ae0 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
22af0 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
22b00 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
22b10 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
22b20 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
22b30 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
22b40 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
22b50 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
22b60 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
22b70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
22b80 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
22b90 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
22ba0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
22bb0 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
22bc0 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
22bd0 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
22be0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
22bf0 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ,int);.#endif../
22c00 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66  * Declarations f
22c10 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  or functions in 
22c20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74  fkey.c. All of t
22c30 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65  hese are replace
22c40 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61  d by.** no-op ma
22c50 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52  cros if OMIT_FOR
22c60 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69  EIGN_KEY is defi
22c70 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ned. In this cas
22c80 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20  e no foreign.** 
22c90 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  key functionalit
22ca0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  y is available. 
22cb0 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  If OMIT_TRIGGER 
22cc0 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a  is defined but.*
22cd0 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  * OMIT_FOREIGN_K
22ce0 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20  EY is not, only 
22cf0 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  some of the func
22d00 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65  tions are no-ope
22d10 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61  d. In.** this ca
22d20 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  se foreign keys 
22d30 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20  are parsed, but 
22d40 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f  no other functio
22d50 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72  nality is .** pr
22d60 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d  ovided (enforcem
22d70 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72  ent of FK constr
22d80 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74  aints requires t
22d90 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d  he triggers sub-
22da0 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20  system)..*/.#if 
22db0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22dc0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
22dd0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
22de0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
22df0 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  R).  void sqlite
22e00 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  3FkCheck(Parse*,
22e10 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22e20 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
22e30 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
22e40 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
22e50 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
22e60 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
22e70 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
22e80 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
22e90 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22ea0 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
22eb0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
22ec0 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
22ed0 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
22ee0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
22ef0 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
22f00 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
22f10 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
22f20 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
22f30 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 29 0a 20  tions(a,b,c,d). 
22f40 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22f50 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 29  FkCheck(a,b,c,d)
22f60 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22f70 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
22f80 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
22f90 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
22fa0 61 2c 62 29 20 20 20 20 20 20 30 0a 20 20 23 64  a,b)      0.  #d
22fb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52  efine sqlite3FkR
22fc0 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29  equired(a,b,c,d)
22fd0 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
22fe0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
22ff0 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
23000 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
23010 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
23020 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
23030 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
23040 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
23050 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
23060 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
23070 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
23080 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
23090 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
230a0 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
230b0 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
230c0 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
230d0 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
230e0 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
230f0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
23100 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
23110 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
23120 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
23130 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
23140 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
23150 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
23160 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
23170 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
23180 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
23190 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
231a0 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
231b0 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
231c0 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
231d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
231e0 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
231f0 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
23200 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23210 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
23220 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
23230 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
23240 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
23250 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
23260 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
23270 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
23280 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
23290 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
232a0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
232b0 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
232c0 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  ..#define IN_IND
232d0 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
232e0 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f     1.#define IN_
232f0 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
23300 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20        2.#define 
23310 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
23320 53 43 20 20 20 20 20 20 20 33 0a 23 64 65 66 69  SC       3.#defi
23330 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
23340 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a 69 6e  X_DESC      4.in
23350 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
23360 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
23370 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69  pr *, int*);..#i
23380 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
23390 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a  LE_ATOMIC_WRITE.
233a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
233b0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
233c0 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
233d0 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
233e0 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
233f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
23400 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
23410 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20  3_vfs *);.  int 
23420 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
23430 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
23440 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  e *);.  int sqli
23450 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
23460 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
23470 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
23480 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
23490 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56  lSize(pVfs) ((pV
234a0 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20  fs)->szOsFile). 
234b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
234c0 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29  JournalExists(p)
234d0 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   1.#endif..void 
234e0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
234f0 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
23500 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  le *);.int sqlit
23510 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65  e3MemJournalSize
23520 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
23530 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28  te3IsMemJournal(
23540 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
23550 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
23560 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
23570 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23580 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20  SetHeight(Parse 
23590 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
235a0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
235b0 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
235c0 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
235d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
235e0 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
235f0 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
23600 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
23610 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29  prSetHeight(x,y)
23620 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23630 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
23640 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
23650 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
23660 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
23670 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
23680 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
23690 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
236a0 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
236b0 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
236c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
236d0 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
236e0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
236f0 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
23700 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
23710 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
23720 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
23730 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
23740 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
23750 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
23760 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
23770 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
23780 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
23790 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
237a0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
237b0 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
237c0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
237d0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
237e0 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
237f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
23800 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
23810 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
23820 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
23830 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
23840 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
23850 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
23860 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
23870 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
23880 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
23890 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
238a0 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
238b0 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
238c0 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
238d0 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65  sages. .*/.#ifde
238e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
238f0 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
23900 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
23910 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
23920 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
23930 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
23940 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
23950 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
23960 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
23970 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
23980 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
23990 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
239a0 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
239b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
239c0 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
239d0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
239e0 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
239f0 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
23a00 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
23a10 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
23a20 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
23a30 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
23a40 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
23a50 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
23a60 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
23a70 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
23a80 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
23a90 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
23aa0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23ab0 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
23ac0 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
23ad0 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
23ae0 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
23af0 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
23b00 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
23b10 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
23b20 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
23b30 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
23b40 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
23b50 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
23b60 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
23b70 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
23b80 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
23b90 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
23ba0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
23bb0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
23bc0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
23bd0 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
23be0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
23bf0 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
23c00 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
23c10 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
23c20 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
23c30 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
23c40 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
23c50 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
23c60 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
23c70 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
23c80 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
23c90 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
23ca0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
23cb0 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
23cc0 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
23cd0 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
23ce0 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
23cf0 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
23d00 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
23d10 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
23d20 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
23d30 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
23d40 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
23d50 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
23d60 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
23d70 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
23d80 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
23d90 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
23da0 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
23db0 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
23dc0 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
23dd0 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
23de0 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
23df0 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
23e00 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
23e10 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
23e20 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
23e30 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
23e40 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
23e50 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
23e60 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
23e70 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
23e80 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
23e90 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
23ea0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
23eb0 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
23ec0 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
23ed0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
23ee0 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
23ef0 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
23f00 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
23f10 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
23f20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
23f30 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
23f40 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
23f50 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
23f60 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
23f70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
23f80 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
23f90 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
23fa0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
23fb0 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
23fc0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
23fd0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
23fe0 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
23ff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
24000 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
24010 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
24020 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24030 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
24040 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
24050 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
24060 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
24070 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
24080 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
24090 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
240a0 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
240b0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
240c0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
240d0 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74    0x02  /* Might
240e0 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
240f0 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23  side memory */.#
24100 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53  define MEMTYPE_S
24110 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20  CRATCH    0x04  
24120 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63  /* Scratch alloc
24130 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
24140 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
24150 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61       0x08  /* Pa
24160 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
24170 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
24180 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20  MEMTYPE_DB      
24190 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73     0x10  /* Uses
241a0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
241b0 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c  , not sqlite_mal
241c0 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f  loc */..#endif /
241d0 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
241e0 2a 2f 0a                                         */.