/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 9819b45610abeca390176243a9a31758c1f0ac7a:


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 2f 2a 0a 2a 2a 20 49 6e 63  endif../*.** Inc
08a0: 6c 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65  lude standard he
08b0: 61 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65  ader files as ne
08c0: 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65  cessary.*/.#ifde
08d0: 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a  f HAVE_STDINT_H.
08e0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74  #include <stdint
08f0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h>.#endif.#ifde
0900: 66 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f  f HAVE_INTTYPES_
0910: 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74  H.#include <intt
0920: 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  ypes.h>.#endif..
0930: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
0940: 20 6f 66 20 73 61 6d 70 6c 65 73 20 6f 66 20 61   of samples of a
0950: 6e 20 69 6e 64 65 78 20 74 68 61 74 20 53 51 4c  n index that SQL
0960: 69 74 65 20 74 61 6b 65 73 20 69 6e 20 6f 72 64  ite takes in ord
0970: 65 72 20 74 6f 20 0a 2a 2a 20 63 6f 6e 73 74 72  er to .** constr
0980: 75 63 74 20 61 20 68 69 73 74 6f 67 72 61 6d 20  uct a histogram 
0990: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e  of the table con
09a0: 74 65 6e 74 20 77 68 65 6e 20 72 75 6e 6e 69 6e  tent when runnin
09b0: 67 20 41 4e 41 4c 59 5a 45 0a 2a 2a 20 61 6e 64  g ANALYZE.** and
09c0: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 45 4e 41   with SQLITE_ENA
09d0: 42 4c 45 5f 53 54 41 54 32 0a 2a 2f 0a 23 64 65  BLE_STAT2.*/.#de
09e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45  fine SQLITE_INDE
09f0: 58 5f 53 41 4d 50 4c 45 53 20 31 30 0a 0a 2f 2a  X_SAMPLES 10../*
0a00: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0a10: 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65  g macros are use
0a20: 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65  d to cast pointe
0a30: 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61  rs to integers a
0a40: 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74  nd.** integers t
0a50: 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65  o pointers.  The
0a60: 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73   way you do this
0a70: 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65   varies from one
0a80: 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20   compiler.** to 
0a90: 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20  the next, so we 
0aa0: 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74  have developed t
0ab0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74  he following set
0ac0: 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e   of #if statemen
0ad0: 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74  ts.** to generat
0ae0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61  e appropriate ma
0af0: 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20  cros for a wide 
0b00: 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65  range of compile
0b10: 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  rs..**.** The co
0b20: 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61 79  rrect "ANSI" way
0b30: 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74   to do this is t
0b40: 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74 72  o use the intptr
0b50: 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e 66  _t type. .** Unf
0b60: 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61 74  ortunately, that
0b70: 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74 20   typedef is not 
0b80: 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c  available on all
0b90: 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a   compilers, or.*
0ba0: 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  * if it is avail
0bb0: 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72 65  able, it require
0bc0: 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66  s an #include of
0bd0: 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65 72   specific header
0be0: 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20 66  s.** that vary f
0bf0: 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20  rom one machine 
0c00: 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a  to the next..**.
0c10: 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30 3a  ** Ticket #3860:
0c20: 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34    The llvm-gcc-4
0c30: 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d  .2 compiler from
0c40: 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e   Apple chokes on
0c50: 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a 29  .** the ((void*)
0c60: 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29 20  &((char*)0)[X]) 
0c70: 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74 20  construct.  But 
0c80: 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28  MSVC chokes on (
0c90: 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20  (void*)(X))..** 
0ca0: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64 65  So we have to de
0cb0: 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73 20  fine the macros 
0cc0: 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61 79  in different way
0cd0: 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  s depending on t
0ce0: 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a  he.** compiler..
0cf0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
0d00: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0d10: 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20 73    /* This case s
0d20: 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47  hould work for G
0d30: 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  CC */.# define S
0d40: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
0d50: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f  (X)  ((void*)(__
0d60: 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28  PTRDIFF_TYPE__)(
0d70: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
0d80: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
0d90: 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52 44  )  ((int)(__PTRD
0da0: 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a  IFF_TYPE__)(X)).
0db0: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 5f  #elif !defined(_
0dc0: 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20 2f  _GNUC__)       /
0dd0: 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70  * Works for comp
0de0: 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61 6e  ilers other than
0df0: 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e   LLVM */.# defin
0e00: 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f  e SQLITE_INT_TO_
0e10: 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29  PTR(X)  ((void*)
0e20: 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a  &((char*)0)[X]).
0e30: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
0e40: 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28  PTR_TO_INT(X)  (
0e50: 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58 29  (int)(((char*)X)
0e60: 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c 69  -(char*)0)).#eli
0e70: 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53  f defined(HAVE_S
0e80: 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73  TDINT_H)   /* Us
0e90: 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20 77  e this case if w
0ea0: 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61 64  e have ANSI head
0eb0: 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  ers */.# define 
0ec0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0ed0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 69  R(X)  ((void*)(i
0ee0: 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20 64  ntptr_t)(X)).# d
0ef0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f00: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f10: 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29  t)(intptr_t)(X))
0f20: 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20 20  .#else          
0f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f40: 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20 77  /* Generates a w
0f50: 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74 20  arning - but it 
0f60: 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a  always works */.
0f70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
0f80: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
0f90: 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64 65  (void*)(X)).# de
0fa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f  fine SQLITE_PTR_
0fb0: 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74  TO_INT(X)  ((int
0fc0: 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )(X)).#endif../*
0fd0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54  .** The SQLITE_T
0fe0: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20  HREADSAFE macro 
0ff0: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
1000: 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  as either 0 or 1
1010: 2e 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69  ..** Older versi
1020: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73  ons of SQLite us
1030: 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54  ed an optional T
1040: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e  HREADSAFE macro.
1050: 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74  .** We support t
1060: 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79 0a 2a  hat for legacy.*
1070: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
1080: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1090: 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28 54 48  ).#if defined(TH
10a0: 52 45 41 44 53 41 46 45 29 0a 23 20 64 65 66 69  READSAFE).# defi
10b0: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
10c0: 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45 0a  SAFE THREADSAFE.
10d0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
10e0: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
10f0: 20 31 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66   1.#endif.#endif
1100: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
1110: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54  TE_DEFAULT_MEMST
1120: 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74 20  ATUS macro must 
1130: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65 69  be defined as ei
1140: 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 20  ther 0 or 1..** 
1150: 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  It determines wh
1160: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1170: 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74 65   features relate
1180: 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45 5f  d to .** SQLITE_
1190: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
11a0: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62   are available b
11b0: 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f 74  y default or not
11c0: 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  . This value can
11d0: 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64 65  .** be overridde
11e0: 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  n at runtime usi
11f0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ng the sqlite3_c
1200: 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f 0a  onfig() API..*/.
1210: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1220: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
1230: 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20  TATUS).# define 
1240: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
1250: 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69  EMSTATUS 1.#endi
1260: 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79  f../*.** Exactly
1270: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1280: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73  owing macros mus
1290: 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20  t be defined in 
12a0: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63  order to.** spec
12b0: 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79  ify which memory
12c0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73   allocation subs
12d0: 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a  ystem to use..**
12e0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53  .**     SQLITE_S
12f0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20  YSTEM_MALLOC    
1300: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72        // Use nor
1310: 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f  mal system mallo
1320: 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  c().**     SQLIT
1330: 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20  E_MEMDEBUG      
1340: 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75           // Debu
1350: 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66  gging version of
1360: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
1370: 0a 2a 2a 0a 2a 2a 20 28 48 69 73 74 6f 72 69 63  .**.** (Historic
1380: 61 6c 20 6e 6f 74 65 3a 20 20 54 68 65 72 65 20  al note:  There 
1390: 75 73 65 64 20 74 6f 20 62 65 20 73 65 76 65 72  used to be sever
13a0: 61 6c 20 6f 74 68 65 72 20 6f 70 74 69 6f 6e 73  al other options
13b0: 2c 20 62 75 74 20 77 65 27 76 65 0a 2a 2a 20 70  , but we've.** p
13c0: 61 72 65 64 20 69 74 20 64 6f 77 6e 20 74 6f 20  ared it down to 
13d0: 6a 75 73 74 20 74 68 65 73 65 20 74 77 6f 2e 29  just these two.)
13e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
13f0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1400: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
1410: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
1420: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
1430: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
1440: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1450: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 2b 64  SYSTEM_MALLOC)+d
1460: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
1470: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
1480: 72 20 22 41 74 20 6d 6f 73 74 20 6f 6e 65 20 6f  r "At most one o
1490: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14a0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
14b0: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
14c0: 6e 73 5c 0a 20 69 73 20 61 6c 6c 6f 77 73 3a 20  ns\. is allows: 
14d0: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
14e0: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d  LLOC, SQLITE_MEM
14f0: 44 45 42 55 47 22 0a 23 65 6e 64 69 66 0a 23 69  DEBUG".#endif.#i
1500: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1510: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 2b  _SYSTEM_MALLOC)+
1520: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1530: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
1540: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
1550: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
1560: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
1570: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
1580: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
1590: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
15a0: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
15b0: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
15c0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
15d0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
15e0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
15f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1600: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1610: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1620: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
1630: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
1640: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
1650: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
1660: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
1670: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
1680: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
1690: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
16a0: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 2e 20  t Unix systems. 
16b0: 20 42 75 74 20 4d 61 63 20 4f 53 20 58 20 69 73   But Mac OS X is
16c0: 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2a 20 54   different..** T
16d0: 68 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  he _XOPEN_SOURCE
16e0: 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70   define causes p
16f0: 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20  roblems for Mac 
1700: 4f 53 20 58 20 77 65 20 61 72 65 20 74 6f 6c 64  OS X we are told
1710: 2c 0a 2a 2a 20 73 6f 20 69 74 20 69 73 20 6f 6d  ,.** so it is om
1720: 69 74 74 65 64 20 74 68 65 72 65 2e 20 20 53 65  itted there.  Se
1730: 65 20 74 69 63 6b 65 74 20 23 32 36 37 33 2e 0a  e ticket #2673..
1740: 2a 2a 0a 2a 2a 20 4c 61 74 65 72 20 77 65 20 6c  **.** Later we l
1750: 65 61 72 6e 20 74 68 61 74 20 5f 58 4f 50 45 4e  earn that _XOPEN
1760: 5f 53 4f 55 52 43 45 20 69 73 20 70 6f 6f 72 6c  _SOURCE is poorl
1770: 79 20 6f 72 20 69 6e 63 6f 72 72 65 63 74 6c 79  y or incorrectly
1780: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  .** implemented 
1790: 6f 6e 20 73 6f 6d 65 20 73 79 73 74 65 6d 73 2e  on some systems.
17a0: 20 20 53 6f 20 77 65 20 61 76 6f 69 64 20 64 65    So we avoid de
17b0: 66 69 6e 69 6e 67 20 69 74 20 61 74 20 61 6c 6c  fining it at all
17c0: 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61 6c 72  .** if it is alr
17d0: 65 61 64 79 20 64 65 66 69 6e 65 64 20 6f 72 20  eady defined or 
17e0: 69 66 20 69 74 20 69 73 20 75 6e 6e 65 65 64 65  if it is unneede
17f0: 64 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65  d because we are
1800: 0a 2a 2a 20 6e 6f 74 20 64 6f 69 6e 67 20 61 20  .** not doing a 
1810: 74 68 72 65 61 64 73 61 66 65 20 62 75 69 6c 64  threadsafe build
1820: 2e 20 20 54 69 63 6b 65 74 20 23 32 36 38 31 2e  .  Ticket #2681.
1830: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
1840: 74 69 63 6b 65 74 20 23 32 37 34 31 2e 0a 2a 2f  ticket #2741..*/
1850: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
1860: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
1870: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
1880: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
1890: 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 53  (__APPLE__) && S
18a0: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
18b0: 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45  .#  define _XOPE
18c0: 4e 5f 53 4f 55 52 43 45 20 35 30 30 20 20 2f 2a  N_SOURCE 500  /*
18d0: 20 4e 65 65 64 65 64 20 74 6f 20 65 6e 61 62 6c   Needed to enabl
18e0: 65 20 70 74 68 72 65 61 64 20 72 65 63 75 72 73  e pthread recurs
18f0: 69 76 65 20 6d 75 74 65 78 65 73 20 2a 2f 0a 23  ive mutexes */.#
1900: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1910: 20 54 43 4c 20 68 65 61 64 65 72 73 20 61 72 65   TCL headers are
1920: 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 77 68 65   only needed whe
1930: 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20  n compiling the 
1940: 54 43 4c 20 62 69 6e 64 69 6e 67 73 2e 0a 2a 2f  TCL bindings..*/
1950: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1960: 49 54 45 5f 54 43 4c 29 20 7c 7c 20 64 65 66 69  ITE_TCL) || defi
1970: 6e 65 64 28 54 43 4c 53 48 29 0a 23 20 69 6e 63  ned(TCLSH).# inc
1980: 6c 75 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 65 6e  lude <tcl.h>.#en
1990: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6e 79 20  dif../*.** Many 
19a0: 70 65 6f 70 6c 65 20 61 72 65 20 66 61 69 6c 69  people are faili
19b0: 6e 67 20 74 6f 20 73 65 74 20 2d 44 4e 44 45 42  ng to set -DNDEB
19c0: 55 47 3d 31 20 77 68 65 6e 20 63 6f 6d 70 69 6c  UG=1 when compil
19d0: 69 6e 67 20 53 51 4c 69 74 65 2e 0a 2a 2a 20 53  ing SQLite..** S
19e0: 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61  etting NDEBUG ma
19f0: 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61  kes the code sma
1a00: 6c 6c 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73  ller and run fas
1a10: 74 65 72 2e 20 20 53 6f 20 74 68 65 20 66 6f 6c  ter.  So the fol
1a20: 6c 6f 77 69 6e 67 0a 2a 2a 20 6c 69 6e 65 73 20  lowing.** lines 
1a30: 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 75 74  are added to aut
1a40: 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 74 20 4e  omatically set N
1a50: 44 45 42 55 47 20 75 6e 6c 65 73 73 20 74 68 65  DEBUG unless the
1a60: 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47 3d   -DSQLITE_DEBUG=
1a70: 31 0a 2a 2a 20 6f 70 74 69 6f 6e 20 69 73 20 73  1.** option is s
1a80: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
1a90: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
1aa0: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
1ab0: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
1ac0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
1ad0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1ae0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1af0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
1b00: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
1b10: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73  f../*.** The tes
1b20: 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73  tcase() macro is
1b30: 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e 20   used to aid in 
1b40: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
1b50: 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e  .  When .** doin
1b60: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
1b70: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
1b80: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
1b90: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
1ba0: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
1bb0: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
1bc0: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
1bd0: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
1be0: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
1bf0: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
1c00: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
1c10: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
1c20: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
1c30: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
1c40: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
1c50: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
1c60: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
1c70: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
1c80: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
1c90: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
1ca0: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
1cb0: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
1cc0: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
1cd0: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
1ce0: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
1cf0: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
1d00: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
1d10: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
1d20: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
1d30: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
1d40: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
1d50: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
1d60: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
1d70: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
1d80: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
1d90: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
1da0: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
1db0: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
1dc0: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
1dd0: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
1de0: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
1df0: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
1e00: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
1e10: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
1e20: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
1e30: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
1e40: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
1e50: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
1e60: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1e70: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
1e80: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
1e90: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
1ea0: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
1eb0: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
1ec0: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
1ed0: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
1ee0: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
1ef0: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
1f00: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
1f10: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
1f20: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
1f30: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
1f40: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
1f50: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
1f60: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
1f70: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
1f80: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
1f90: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
1fa0: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
1fb0: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
1fc0: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
1fd0: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
1fe0: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
1ff0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
2000: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
2010: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
2020: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
2030: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
2040: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
2050: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
2060: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
2070: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
2080: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
2090: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
20a0: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
20b0: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
20c0: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
20d0: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
20e0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
20f0: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
2100: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
2110: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
2120: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
2130: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
2140: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
2150: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
2160: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
2170: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
2180: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2190: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
21a0: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
21b0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
21c0: 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a 2a 20 61  ions which .** a
21d0: 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61  re intended to a
21e0: 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72  lways be true or
21f0: 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69   false, respecti
2200: 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65  vely.  Such.** e
2210: 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64  xpressions could
2220: 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   be omitted from
2230: 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65   the code comple
2240: 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a  tely.  But they.
2250: 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ** are included 
2260: 69 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69  in a few cases i
2270: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e  n order to enhan
2280: 63 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63  ce the resilienc
2290: 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74  e.** of SQLite t
22a0: 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68  o unexpected beh
22b0: 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20  avior - to make 
22c0: 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68  the code "self-h
22d0: 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64  ealing".** or "d
22e0: 75 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74  uctile" rather t
22f0: 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74  han being "britt
2300: 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67  le" and crashing
2310: 20 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   at the first.**
2320: 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e   hint of unplann
2330: 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a  ed behavior..**.
2340: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
2350: 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  s, ALWAYS and NE
2360: 56 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f  VER are added fo
2370: 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65  r defensive code
2380: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69  ..**.** When doi
2390: 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  ng coverage test
23a0: 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  ing ALWAYS and N
23b0: 45 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f  EVER are hard-co
23c0: 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75  ded to.** be tru
23d0: 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74  e and false so t
23e0: 68 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61  hat the unreacha
23f0: 62 6c 65 20 63 6f 64 65 20 74 68 65 6e 20 73 70  ble code then sp
2400: 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  ecify will.** no
2410: 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20  t be counted as 
2420: 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a  untested code..*
2430: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
2440: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
2450: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
2460: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
2470: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
2480: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
2490: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
24a0: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
24b0: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
24c0: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
24d0: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
24e0: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
24f0: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
2500: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
2510: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
2520: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
2530: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
2540: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  dif../*.** The m
2550: 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20  acro unlikely() 
2560: 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73  is a hint that s
2570: 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65  urrounds a boole
2580: 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
2590: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
25a0: 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c   false.  Macro l
25b0: 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64  ikely() surround
25c0: 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65  s.** a boolean e
25d0: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
25e0: 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20  s usually true. 
25f0: 20 47 43 43 20 69 73 20 61 62 6c 65 20 74 6f 0a   GCC is able to.
2600: 2a 2a 20 75 73 65 20 74 68 65 73 65 20 68 69 6e  ** use these hin
2610: 74 73 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  ts to generate b
2620: 65 74 74 65 72 20 63 6f 64 65 2c 20 73 6f 6d 65  etter code, some
2630: 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  times..*/.#if de
2640: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
2650: 26 26 20 30 0a 23 20 64 65 66 69 6e 65 20 6c 69  && 0.# define li
2660: 6b 65 6c 79 28 58 29 20 20 20 20 5f 5f 62 75 69  kely(X)    __bui
2670: 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c  ltin_expect((X),
2680: 31 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c 69  1).# define unli
2690: 6b 65 6c 79 28 58 29 20 20 5f 5f 62 75 69 6c 74  kely(X)  __built
26a0: 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c 30 29  in_expect((X),0)
26b0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26c0: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 21 21 28  likely(X)    !!(
26d0: 58 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c 69  X).# define unli
26e0: 6b 65 6c 79 28 58 29 20 20 21 21 28 58 29 0a 23  kely(X)  !!(X).#
26f0: 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20  endif..#include 
2700: 22 73 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e 63  "sqlite3.h".#inc
2710: 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69  lude "hash.h".#i
2720: 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22  nclude "parse.h"
2730: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f  .#include <stdio
2740: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
2750: 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  dlib.h>.#include
2760: 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63   <string.h>.#inc
2770: 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a  lude <assert.h>.
2780: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66  #include <stddef
2790: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  .h>../*.** If co
27a0: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
27b0: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
27c0: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
27d0: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
27e0: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
27f0: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
2800: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
2810: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
2820: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
2830: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
2840: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
2850: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
2860: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
2870: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
2880: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
2890: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
28a0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
28b0: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
28c0: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
28d0: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
28e0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
28f0: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
2900: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2910: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
2920: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
2930: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
2940: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
2950: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
2960: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2970: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
2980: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
2990: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
29a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
29b0: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
29c0: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
29d0: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
29e0: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
29f0: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
2a00: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
2a10: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
2a20: 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20   C compiler .** 
2a30: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
2a40: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
2a50: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
2a60: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
2a70: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
2a80: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
2a90: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
2aa0: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
2ab0: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
2ac0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2ad0: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
2ae0: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
2af0: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
2b00: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
2b10: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
2b20: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
2b30: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
2b40: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
2b50: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
2b60: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
2b70: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
2b80: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
2b90: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
2ba0: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
2bb0: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
2bc0: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
2bd0: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
2be0: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
2bf0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
2c00: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
2c10: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
2c20: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 31 0a  T_FILE_FORMAT 1.
2c30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
2c40: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
2c50: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
2c60: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
2c70: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
2c80: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
2c90: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
2ca0: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
2cb0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
2cc0: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
2cd0: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
2ce0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
2cf0: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
2d00: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
2d10: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
2d20: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
2d30: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
2d40: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
2d50: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
2d60: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
2d70: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2d80: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
2d90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
2da0: 50 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69 66  P_STORE 1.#endif
2db0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
2dc0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
2dd0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
2de0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
2df0: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
2e00: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
2e10: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
2e20: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
2e30: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
2e40: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
2e50: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
2e60: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
2e70: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
2e80: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
2e90: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
2ea0: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
2eb0: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
2ec0: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
2ed0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
2ee0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
2ef0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
2f00: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
2f10: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
2f20: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
2f30: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
2f40: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
2f50: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
2f60: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
2f70: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
2f80: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
2f90: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
2fa0: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
2fb0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
2fc0: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
2fd0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
2fe0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
2ff0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
3000: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
3010: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
3020: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
3030: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
3040: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
3050: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
3060: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
3070: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
3080: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
3090: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
30a0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
30b0: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
30c0: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
30d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
30e0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
30f0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
3100: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
3110: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
3120: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3130: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
3140: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
3150: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3160: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
3170: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
3180: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
3190: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
31a0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
31b0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
31c0: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
31d0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
31e0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
31f0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
3200: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
3210: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
3220: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
3230: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
3240: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
3250: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
3260: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3270: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
3280: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
3290: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
32a0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
32b0: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
32c0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
32d0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
32e0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
32f0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
3300: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
3310: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
3320: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
3330: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
3340: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3350: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
3360: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
3370: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
3380: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3390: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
33a0: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
33b0: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
33c0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
33d0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
33e0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
33f0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
3400: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3410: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
3420: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
3430: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
3440: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3450: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
3460: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
3470: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
3480: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3490: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
34a0: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
34b0: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
34c0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
34d0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
34e0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
34f0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
3500: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
3510: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
3520: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
3530: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
3540: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
3550: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
3560: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
3570: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
3580: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
3590: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
35a0: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
35b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
35c0: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
35d0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
35e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
35f0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
3600: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
3610: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
3620: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
3630: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
3640: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
3650: 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65  ian,.** evaluate
3660: 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f  d at runtime..*/
3670: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
3680: 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73  MALGAMATION.cons
3690: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
36a0: 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65   = 1;.#else.exte
36b0: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
36c0: 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a  ite3one;.#endif.
36d0: 23 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36  #if defined(i386
36e0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69  ) || defined(__i
36f0: 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  386__) || define
3700: 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20  d(_M_IX86)\.    
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3720: 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65 66 69           || defi
3730: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
3740: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
3750: 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  4__).# define SQ
3760: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
3770: 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    0.# define SQL
3780: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
3790: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
37a0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
37b0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23  SQLITE_UTF16LE.#
37c0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51  else.# define SQ
37d0: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
37e0: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
37f0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
3800: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
3810: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
3820: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
3830: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
3840: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
3850: 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e  VE (SQLITE_BIGEN
3860: 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31  DIAN?SQLITE_UTF1
3870: 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36  6BE:SQLITE_UTF16
3880: 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  LE).#endif../*.*
3890: 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20  * Constants for 
38a0: 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20  the largest and 
38b0: 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c  smallest possibl
38c0: 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  e 64-bit signed 
38d0: 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
38e0: 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65  se macros are de
38f0: 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63  signed to work c
3900: 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68  orrectly on both
3910: 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62   32-bit and 64-b
3920: 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e  it.** compilers.
3930: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47  .*/.#define LARG
3940: 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66  EST_INT64  (0xff
3950: 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78  ffffff|(((i64)0x
3960: 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a  7fffffff)<<32)).
3970: 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54  #define SMALLEST
3980: 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31  _INT64 (((i64)-1
3990: 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ) - LARGEST_INT6
39a0: 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64  4)../* .** Round
39b0: 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20   up a number to 
39c0: 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20  the next larger 
39d0: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20  multiple of 8.  
39e0: 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20  This is used.** 
39f0: 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20  to force 8-byte 
3a00: 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d  alignment on 64-
3a10: 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65  bit architecture
3a20: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f  s..*/.#define RO
3a30: 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78  UND8(x)     (((x
3a40: 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  )+7)&~7)../*.** 
3a50: 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68  Round down to th
3a60: 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70  e nearest multip
3a70: 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69  le of 8.*/.#defi
3a80: 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29  ne ROUNDDOWN8(x)
3a90: 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a   ((x)&~7)../*.**
3aa0: 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
3ab0: 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c   pointer X is al
3ac0: 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79  igned to an 8-by
3ad0: 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68  te boundary.  Th
3ae0: 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  is.** macro is u
3af0: 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20  sed only within 
3b00: 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69  assert() to veri
3b10: 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  fy that the code
3b20: 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69   gets.** all ali
3b30: 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69  gnment restricti
3b40: 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a  ons correct..**.
3b50: 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51  ** Except, if SQ
3b60: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
3b70: 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65  NED_MALLOC is de
3b80: 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  fined, then the.
3b90: 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61  ** underlying ma
3ba0: 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74  lloc() implement
3bb0: 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e  ion might return
3bc0: 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e   us 4-byte align
3bd0: 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20  ed.** pointers. 
3be0: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f   In that case, o
3bf0: 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74  nly verify 4-byt
3c00: 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a  e alignment..*/.
3c10: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f  #ifdef SQLITE_4_
3c20: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
3c30: 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47  LOC.# define EIG
3c40: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
3c50: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
3c60: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
3c70: 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  &3)==0).#else.# 
3c80: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
3c90: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
3ca0: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
3cb0: 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30   (char*)0)&7)==0
3cc0: 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ).#endif.../*.**
3cd0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
3ce0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
3cf0: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
3d00: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
3d10: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
3d20: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
3d30: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
3d40: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
3d50: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
3d60: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
3d70: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
3d80: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
3d90: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
3da0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
3db0: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
3dc0: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
3dd0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
3de0: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
3df0: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
3e00: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
3e10: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
3e20: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
3e30: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
3e40: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
3e50: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
3e60: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
3e70: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
3e80: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
3e90: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
3ea0: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
3eb0: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
3ec0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
3ed0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
3ee0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
3ef0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
3f00: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
3f10: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
3f20: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
3f30: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
3f40: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
3f50: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
3f60: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
3f70: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
3f80: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
3f90: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
3fa0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
3fb0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
3fc0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
3fd0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
3fe0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
3ff0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
4000: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
4010: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
4020: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
4030: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
4040: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
4050: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
4060: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
4070: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
4080: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
4090: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
40a0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
40b0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
40c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
40d0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
40e0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
40f0: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
4100: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
4110: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
4120: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
4130: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
4140: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
4150: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
4160: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
4170: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
4180: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
4190: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
41a0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
41b0: 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64 65  ng value as a de
41c0: 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74  structor means t
41d0: 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62 46  o use sqlite3DbF
41e0: 72 65 65 28 29 2e 0a 2a 2a 20 54 68 69 73 20 69  ree()..** This i
41f0: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 65 78  s an internal ex
4200: 74 65 6e 73 69 6f 6e 20 74 6f 20 53 51 4c 49 54  tension to SQLIT
4210: 45 5f 53 54 41 54 49 43 20 61 6e 64 20 53 51 4c  E_STATIC and SQL
4220: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
4230: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4240: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
4250: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
4260: 74 79 70 65 29 73 71 6c 69 74 65 33 44 62 46 72  type)sqlite3DbFr
4270: 65 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20  ee)../*.** When 
4280: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20  SQLITE_OMIT_WSD 
4290: 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d  is defined, it m
42a0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74 61  eans that the ta
42b0: 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f  rget platform do
42c0: 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72  es.** not suppor
42d0: 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74 69  t Writable Stati
42e0: 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75 63  c Data (WSD) suc
42f0: 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20  h as global and 
4300: 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 73  static variables
4310: 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c  ..** All variabl
4320: 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20 62  es must either b
4330: 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f  e on the stack o
4340: 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  r dynamically al
4350: 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20  located from.** 
4360: 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20  the heap.  When 
4370: 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74  WSD is unsupport
4380: 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65  ed, the variable
4390: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63   declarations sc
43a0: 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75  attered.** throu
43b0: 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65  ghout the SQLite
43c0: 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d   code must becom
43d0: 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74  e constants inst
43e0: 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45  ead.  The SQLITE
43f0: 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73  _WSD.** macro is
4400: 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20 70   used for this p
4410: 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73  urpose.  And ins
4420: 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63  tead of referenc
4430: 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c 65  ing the variable
4440: 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65  .** directly, we
4450: 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e   use its constan
4460: 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f  t as a key to lo
4470: 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d  okup the run-tim
4480: 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62  e allocated.** b
4490: 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73  uffer that holds
44a0: 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20   real variable. 
44b0: 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73   The constant is
44c0: 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61   also the initia
44d0: 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65  lizer.** for the
44e0: 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61   run-time alloca
44f0: 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a  ted buffer..**.*
4500: 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63  * In the usual c
4510: 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69 73  ase where WSD is
4520: 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20   supported, the 
4530: 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47  SQLITE_WSD and G
4540: 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20  LOBAL.** macros 
4550: 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e  become no-ops an
4560: 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66  d have zero perf
4570: 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a  ormance impact..
4580: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4590: 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66  _OMIT_WSD.  #def
45a0: 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63  ine SQLITE_WSD c
45b0: 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47  onst.  #define G
45c0: 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a  LOBAL(t,v) (*(t*
45d0: 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  )sqlite3_wsd_fin
45e0: 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73  d((void*)&(v), s
45f0: 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65  izeof(v))).  #de
4600: 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62  fine sqlite3Glob
4610: 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28  alConfig GLOBAL(
4620: 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
4630: 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e  nfig, sqlite3Con
4640: 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  fig).  int sqlit
4650: 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20  e3_wsd_init(int 
4660: 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69  N, int J);.  voi
4670: 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66  d *sqlite3_wsd_f
4680: 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74  ind(void *K, int
4690: 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   L);.#else.  #de
46a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
46b0: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
46c0: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
46d0: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
46e0: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
46f0: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
4700: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4710: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
4720: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
4730: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
4740: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
4750: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
4760: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
4770: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
4780: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
4790: 79 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65  y .** left unuse
47a0: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  d within the bod
47b0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e  y of a function.
47c0: 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61   This usually ha
47d0: 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20  ppens when.** a 
47e0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c  function is call
47f0: 65 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f  ed via a functio
4800: 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65  n pointer. For e
4810: 78 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69  xample the .** i
4820: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
4830: 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74   an SQL aggregat
4840: 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20  e step callback 
4850: 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a  may not use the.
4860: 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64  ** parameter ind
4870: 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62  icating the numb
4880: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
4890: 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67  passed to the ag
48a0: 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69  gregate,.** if i
48b0: 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69  t knows that thi
48c0: 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c  s is enforced el
48d0: 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57  sewhere..**.** W
48e0: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
48f0: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
4900: 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68  used at all with
4910: 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61  in the body of a
4920: 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74   function,.** it
4930: 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61   is generally na
4940: 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72  med "NotUsed" or
4950: 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d   "NotUsed2" to m
4960: 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20  ake things even 
4970: 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65  clearer..** Howe
4980: 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f  ver, these macro
4990: 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73  s may also be us
49a0: 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77  ed to suppress w
49b0: 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20  arnings related 
49c0: 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73  to.** parameters
49d0: 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79   that may or may
49e0: 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70   not be used dep
49f0: 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c  ending on compil
4a00: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a  ation options..*
4a10: 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  * For example th
4a20: 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f  ose parameters o
4a30: 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65  nly used in asse
4a40: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
4a50: 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73   In these.** cas
4a60: 65 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  es the parameter
4a70: 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70  s are named as p
4a80: 65 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e  er the usual con
4a90: 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  ventions..*/.#de
4aa0: 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41  fine UNUSED_PARA
4ab0: 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28  METER(x) (void)(
4ac0: 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  x).#define UNUSE
4ad0: 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79  D_PARAMETER2(x,y
4ae0: 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  ) UNUSED_PARAMET
4af0: 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52  ER(x),UNUSED_PAR
4b00: 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a  AMETER(y)../*.**
4b10: 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e   Forward referen
4b20: 63 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65  ces to structure
4b30: 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  s.*/.typedef str
4b40: 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49  uct AggInfo AggI
4b50: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
4b60: 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
4b70: 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70  AuthContext;.typ
4b80: 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f  edef struct Auto
4b90: 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49  incInfo AutoincI
4ba0: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
4bb0: 75 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65  uct Bitvec Bitve
4bc0: 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  c;.typedef struc
4bd0: 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65  t CollSeq CollSe
4be0: 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  q;.typedef struc
4bf0: 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b  t Column Column;
4c00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4c10: 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73  Db Db;.typedef s
4c20: 74 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68  truct Schema Sch
4c30: 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ema;.typedef str
4c40: 75 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74  uct Expr Expr;.t
4c50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
4c60: 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b  prList ExprList;
4c70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4c80: 45 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61  ExprSpan ExprSpa
4c90: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
4ca0: 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70  t FKey FKey;.typ
4cb0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
4cc0: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
4cd0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
4ce0: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
4cf0: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
4d00: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
4d10: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
4d20: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
4d30: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
4d40: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
4d50: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
4d60: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
4d70: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
4d80: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
4d90: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
4da0: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
4db0: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
4dc0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
4dd0: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
4de0: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
4df0: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
4e00: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
4e10: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
4e20: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
4e30: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
4e40: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
4e50: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
4e60: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
4e70: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
4e80: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
4e90: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
4ea0: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
4eb0: 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  ef struct SrcLis
4ec0: 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64  t SrcList;.typed
4ed0: 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63  ef struct StrAcc
4ee0: 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70  um StrAccum;.typ
4ef0: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
4f00: 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66  e Table;.typedef
4f10: 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63   struct TableLoc
4f20: 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70  k TableLock;.typ
4f30: 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65  edef struct Toke
4f40: 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  n Token;.typedef
4f50: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
4f60: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
4f70: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
4f80: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
4f90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
4fa0: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
4fb0: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
4fc0: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
4fd0: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
4fe0: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
4ff0: 75 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c  uct VTable VTabl
5000: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
5010: 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b  t Walker Walker;
5020: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5030: 57 68 65 72 65 50 6c 61 6e 20 57 68 65 72 65 50  WherePlan WhereP
5040: 6c 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lan;.typedef str
5050: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
5060: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
5070: 20 73 74 72 75 63 74 20 57 68 65 72 65 4c 65 76   struct WhereLev
5080: 65 6c 20 57 68 65 72 65 4c 65 76 65 6c 3b 0a 0a  el WhereLevel;..
5090: 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72  /*.** Defer sour
50a0: 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20  cing vdbe.h and 
50b0: 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66  btree.h until af
50c0: 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64  ter the "u8" and
50d0: 20 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65   .** "BusyHandle
50e0: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
50f0: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
5100: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
5110: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
5120: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
5130: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
5140: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
5150: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
5160: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
5170: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
5180: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
5190: 2e 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f  .h"..#include "o
51a0: 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d  s.h".#include "m
51b0: 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20  utex.h".../*.** 
51c0: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  Each database fi
51d0: 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65  le to be accesse
51e0: 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20  d by the system 
51f0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
5200: 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * of the followi
5210: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  ng structure.  T
5220: 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  here are normall
5230: 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73  y two of these s
5240: 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20  tructures.** in 
5250: 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d  the sqlite.aDb[]
5260: 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20   array.  aDb[0] 
5270: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
5280: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a  base file and.**
5290: 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64   aDb[1] is the d
52a0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
52b0: 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72  d to hold tempor
52c0: 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64  ary tables.  Add
52d0: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62  itional.** datab
52e0: 61 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61  ases may be atta
52f0: 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ched..*/.struct 
5300: 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  Db {.  char *zNa
5310: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
5320: 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61  ame of this data
5330: 62 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20  base */.  Btree 
5340: 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f  *pBt;          /
5350: 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72  * The B*Tree str
5360: 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20  ucture for this 
5370: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
5380: 0a 20 20 75 38 20 69 6e 54 72 61 6e 73 3b 20 20  .  u8 inTrans;  
5390: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f          /* 0: no
53a0: 74 20 77 72 69 74 61 62 6c 65 2e 20 20 31 3a 20  t writable.  1: 
53b0: 54 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 32 3a  Transaction.  2:
53c0: 20 43 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 20   Checkpoint */. 
53d0: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
53e0: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
53f0: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
5400: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
5410: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
5420: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
5430: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
5440: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
5450: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
5460: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
5470: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
5480: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
5490: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
54a0: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
54b0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 76 69   there are no vi
54c0: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 63 6f 6e  rtual tables con
54d0: 66 69 67 75 72 65 64 20 69 6e 20 74 68 69 73 20  figured in this 
54e0: 73 63 68 65 6d 61 2c 20 74 68 65 0a 2a 2a 20 53  schema, the.** S
54f0: 63 68 65 6d 61 2e 64 62 20 76 61 72 69 61 62 6c  chema.db variabl
5500: 65 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  e is set to NULL
5510: 2e 20 41 66 74 65 72 20 74 68 65 20 66 69 72 73  . After the firs
5520: 74 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a  t virtual table.
5530: 2a 2a 20 68 61 73 20 62 65 65 6e 20 61 64 64 65  ** has been adde
5540: 64 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  d, it is set to 
5550: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 64 61 74  point to the dat
5560: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
5570: 20 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65   .** used to cre
5580: 61 74 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ate the connecti
5590: 6f 6e 2e 20 4f 6e 63 65 20 61 20 76 69 72 74 75  on. Once a virtu
55a0: 61 6c 20 74 61 62 6c 65 20 68 61 73 20 62 65 65  al table has bee
55b0: 6e 0a 2a 2a 20 61 64 64 65 64 20 74 6f 20 74 68  n.** added to th
55c0: 65 20 53 63 68 65 6d 61 20 73 74 72 75 63 74 75  e Schema structu
55d0: 72 65 20 61 6e 64 20 74 68 65 20 53 63 68 65 6d  re and the Schem
55e0: 61 2e 64 62 20 76 61 72 69 61 62 6c 65 20 70 6f  a.db variable po
55f0: 70 75 6c 61 74 65 64 2c 20 0a 2a 2a 20 6f 6e 6c  pulated, .** onl
5600: 79 20 74 68 61 74 20 64 61 74 61 62 61 73 65 20  y that database 
5610: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 79 20 75  connection may u
5620: 73 65 20 74 68 65 20 53 63 68 65 6d 61 20 74 6f  se the Schema to
5630: 20 70 72 65 70 61 72 65 20 0a 2a 2a 20 73 74 61   prepare .** sta
5640: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 73 74 72 75  tements..*/.stru
5650: 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e  ct Schema {.  in
5660: 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b  t schema_cookie;
5670: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73     /* Database s
5680: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75  chema version nu
5690: 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69  mber for this fi
56a0: 6c 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c  le */.  Hash tbl
56b0: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
56c0: 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78  All tables index
56d0: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
56e0: 48 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20  Hash idxHash;   
56f0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d       /* All (nam
5700: 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65  ed) indices inde
5710: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
5720: 20 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20   Hash trigHash; 
5730: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69        /* All tri
5740: 67 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79  ggers indexed by
5750: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
5760: 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20  fkeyHash;       
5770: 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  /* All foreign k
5780: 65 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65  eys by reference
5790: 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  d table name */.
57a0: 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62    Table *pSeqTab
57b0: 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71  ;      /* The sq
57c0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
57d0: 62 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f  ble used by AUTO
57e0: 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75  INCREMENT */.  u
57f0: 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  8 file_format;  
5800: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f      /* Schema fo
5810: 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  rmat version for
5820: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
5830: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
5840: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
5850: 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68  oding used by th
5860: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
5870: 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20   u16 flags;     
5880: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61        /* Flags a
5890: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
58a0: 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
58b0: 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20  int cache_size; 
58c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
58d0: 66 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69  f pages to use i
58e0: 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 23  n the cache */.#
58f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5900: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
5910: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
5920: 20 20 20 20 20 20 20 2f 2a 20 22 4f 77 6e 65 72         /* "Owner
5930: 22 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 53 65  " connection. Se
5940: 65 20 63 6f 6d 6d 65 6e 74 20 61 62 6f 76 65 20  e comment above 
5950: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
5960: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
5970: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
5980: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
5990: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
59a0: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
59b0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
59c0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
59d0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
59e0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
59f0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50  Schema->flags&(P
5a00: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
5a10: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
5a20: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
5a30: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
5a40: 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
5a50: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
5a60: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
5a70: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
5a80: 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29  hema->flags|=(P)
5a90: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
5aa0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
5ab0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
5ac0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28  chema->flags&=~(
5ad0: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
5ae0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
5af0: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
5b00: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
5b10: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
5b20: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
5b30: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
5b40: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
5b50: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
5b60: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
5b70: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
5b80: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
5b90: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
5ba0: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
5bb0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
5bc0: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
5bd0: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
5be0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
5bf0: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
5c00: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
5c10: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
5c20: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
5c30: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
5c40: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
5c50: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
5c60: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
5c70: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
5c80: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
5c90: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
5ca0: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
5cb0: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
5cc0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
5cd0: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
5ce0: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
5cf0: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
5d00: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
5d10: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
5d20: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
5d30: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
5d40: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
5d50: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
5d60: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
5d70: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
5d80: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
5d90: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
5da0: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
5db0: 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29  TRIGGER_DEPTH+1)
5dc0: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
5dd0: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
5de0: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
5df0: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
5e00: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
5e10: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
5e20: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
5e30: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
5e40: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
5e50: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
5e60: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
5e70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5e80: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
5e90: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
5ea0: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
5eb0: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
5ec0: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
5ed0: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
5ee0: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
5ef0: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
5f00: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
5f10: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
5f20: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
5f30: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
5f40: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
5f50: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
5f60: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
5f70: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
5f80: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
5f90: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
5fa0: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
5fb0: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
5fc0: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
5fd0: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
5fe0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
5ff0: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
6000: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
6010: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
6020: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
6030: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
6040: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
6050: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
6060: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
6070: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
6080: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
6090: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
60a0: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
60b0: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
60c0: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
60d0: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
60e0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
60f0: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
6100: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
6110: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
6120: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
6130: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
6140: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
6150: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
6160: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
6170: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
6180: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
6190: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
61a0: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
61b0: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
61c0: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
61d0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
61e0: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
61f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
6200: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
6210: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
6220: 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20   bEnabled;      
6230: 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74        /* False t
6240: 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f  o disable new lo
6250: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
6260: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  ons */.  u8 bMal
6270: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
6280: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
6290: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
62a0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
62b0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b  ) */.  int nOut;
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
62d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66  * Number of buff
62e0: 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68  ers currently ch
62f0: 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69  ecked out */.  i
6300: 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20  nt mxOut;       
6310: 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61         /* Highwa
6320: 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75  ter mark for nOu
6330: 74 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  t */.  Lookaside
6340: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
6350: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
6360: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
6370: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
6380: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
6390: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
63a0: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
63b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
63c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
63d0: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
63e0: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
63f0: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
6400: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
6410: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
6420: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
6430: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
6440: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
6450: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
6460: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
6470: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
6480: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a  n definitions..*
6490: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
64a0: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
64b0: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
64c0: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
64d0: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
64e0: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
64f0: 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63   FuncDef.pHash c
6500: 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  hain..*/.struct 
6510: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
6520: 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20  FuncDef *a[23]; 
6530: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
6540: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
6550: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  s */.};../*.** E
6560: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
6570: 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e  nection is an in
6580: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
6590: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
65a0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  e..**.** The sql
65b0: 69 74 65 2e 6c 61 73 74 52 6f 77 69 64 20 72 65  ite.lastRowid re
65c0: 63 6f 72 64 73 20 74 68 65 20 6c 61 73 74 20 69  cords the last i
65d0: 6e 73 65 72 74 20 72 6f 77 69 64 20 67 65 6e 65  nsert rowid gene
65e0: 72 61 74 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  rated by an.** i
65f0: 6e 73 65 72 74 20 73 74 61 74 65 6d 65 6e 74 2e  nsert statement.
6600: 20 20 49 6e 73 65 72 74 73 20 6f 6e 20 76 69 65    Inserts on vie
6610: 77 73 20 64 6f 20 6e 6f 74 20 61 66 66 65 63 74  ws do not affect
6620: 20 69 74 73 20 76 61 6c 75 65 2e 20 20 45 61 63   its value.  Eac
6630: 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 68 61 73  h.** trigger has
6640: 20 69 74 73 20 6f 77 6e 20 63 6f 6e 74 65 78 74   its own context
6650: 2c 20 73 6f 20 74 68 61 74 20 6c 61 73 74 52 6f  , so that lastRo
6660: 77 69 64 20 63 61 6e 20 62 65 20 75 70 64 61 74  wid can be updat
6670: 65 64 20 69 6e 73 69 64 65 0a 2a 2a 20 74 72 69  ed inside.** tri
6680: 67 67 65 72 73 20 61 73 20 75 73 75 61 6c 2e 20  ggers as usual. 
6690: 20 54 68 65 20 70 72 65 76 69 6f 75 73 20 76 61   The previous va
66a0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74  lue will be rest
66b0: 6f 72 65 64 20 6f 6e 63 65 20 74 68 65 20 74 72  ored once the tr
66c0: 69 67 67 65 72 0a 2a 2a 20 65 78 69 74 73 2e 20  igger.** exits. 
66d0: 20 55 70 6f 6e 20 65 6e 74 65 72 69 6e 67 20 61   Upon entering a
66e0: 20 62 65 66 6f 72 65 20 6f 72 20 69 6e 73 74 65   before or inste
66f0: 61 64 20 6f 66 20 74 72 69 67 67 65 72 2c 20 6c  ad of trigger, l
6700: 61 73 74 52 6f 77 69 64 20 69 73 20 6e 6f 0a 2a  astRowid is no.*
6710: 2a 20 6c 6f 6e 67 65 72 20 28 73 69 6e 63 65 20  * longer (since 
6720: 61 66 74 65 72 20 76 65 72 73 69 6f 6e 20 32 2e  after version 2.
6730: 38 2e 31 32 29 20 72 65 73 65 74 20 74 6f 20 2d  8.12) reset to -
6740: 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  1..**.** The sql
6750: 69 74 65 2e 6e 43 68 61 6e 67 65 20 64 6f 65 73  ite.nChange does
6760: 20 6e 6f 74 20 63 6f 75 6e 74 20 63 68 61 6e 67   not count chang
6770: 65 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  es within trigge
6780: 72 73 20 61 6e 64 20 6b 65 65 70 73 20 6e 6f 0a  rs and keeps no.
6790: 2a 2a 20 63 6f 6e 74 65 78 74 2e 20 20 49 74 20  ** context.  It 
67a0: 69 73 20 72 65 73 65 74 20 61 74 20 73 74 61 72  is reset at star
67b0: 74 20 6f 66 20 73 71 6c 69 74 65 33 5f 65 78 65  t of sqlite3_exe
67c0: 63 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  c..** The sqlite
67d0: 2e 6c 73 43 68 61 6e 67 65 20 72 65 70 72 65 73  .lsChange repres
67e0: 65 6e 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  ents the number 
67f0: 6f 66 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  of changes made 
6800: 62 79 20 74 68 65 20 6c 61 73 74 0a 2a 2a 20 69  by the last.** i
6810: 6e 73 65 72 74 2c 20 75 70 64 61 74 65 2c 20 6f  nsert, update, o
6820: 72 20 64 65 6c 65 74 65 20 73 74 61 74 65 6d 65  r delete stateme
6830: 6e 74 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  nt.  It remains 
6840: 63 6f 6e 73 74 61 6e 74 20 74 68 72 6f 75 67 68  constant through
6850: 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 65 6e 67 74  out the.** lengt
6860: 68 20 6f 66 20 61 20 73 74 61 74 65 6d 65 6e 74  h of a statement
6870: 20 61 6e 64 20 69 73 20 74 68 65 6e 20 75 70 64   and is then upd
6880: 61 74 65 64 20 62 79 20 4f 50 5f 53 65 74 43 6f  ated by OP_SetCo
6890: 75 6e 74 73 2e 20 20 49 74 20 6b 65 65 70 73 20  unts.  It keeps 
68a0: 61 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 73 74 61  a.** context sta
68b0: 63 6b 20 6a 75 73 74 20 6c 69 6b 65 20 6c 61 73  ck just like las
68c0: 74 52 6f 77 69 64 20 73 6f 20 74 68 61 74 20 74  tRowid so that t
68d0: 68 65 20 63 6f 75 6e 74 20 6f 66 20 63 68 61 6e  he count of chan
68e0: 67 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  ges.** within a 
68f0: 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20 73  trigger is not s
6900: 65 65 6e 20 6f 75 74 73 69 64 65 20 74 68 65 20  een outside the 
6910: 74 72 69 67 67 65 72 2e 20 20 43 68 61 6e 67 65  trigger.  Change
6920: 73 20 74 6f 20 76 69 65 77 73 20 64 6f 20 6e 6f  s to views do no
6930: 74 0a 2a 2a 20 61 66 66 65 63 74 20 74 68 65 20  t.** affect the 
6940: 76 61 6c 75 65 20 6f 66 20 6c 73 43 68 61 6e 67  value of lsChang
6950: 65 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  e..** The sqlite
6960: 2e 63 73 43 68 61 6e 67 65 20 6b 65 65 70 73 20  .csChange keeps 
6970: 74 72 61 63 6b 20 6f 66 20 74 68 65 20 6e 75 6d  track of the num
6980: 62 65 72 20 6f 66 20 63 75 72 72 65 6e 74 20 63  ber of current c
6990: 68 61 6e 67 65 73 20 28 73 69 6e 63 65 0a 2a 2a  hanges (since.**
69a0: 20 74 68 65 20 6c 61 73 74 20 73 74 61 74 65 6d   the last statem
69b0: 65 6e 74 29 20 61 6e 64 20 69 73 20 75 73 65 64  ent) and is used
69c0: 20 74 6f 20 75 70 64 61 74 65 20 73 71 6c 69 74   to update sqlit
69d0: 65 5f 6c 73 43 68 61 6e 67 65 2e 0a 2a 2a 0a 2a  e_lsChange..**.*
69e0: 2a 20 54 68 65 20 6d 65 6d 62 65 72 20 76 61 72  * The member var
69f0: 69 61 62 6c 65 73 20 73 71 6c 69 74 65 2e 65 72  iables sqlite.er
6a00: 72 43 6f 64 65 2c 20 73 71 6c 69 74 65 2e 7a 45  rCode, sqlite.zE
6a10: 72 72 4d 73 67 20 61 6e 64 20 73 71 6c 69 74 65  rrMsg and sqlite
6a20: 2e 7a 45 72 72 4d 73 67 31 36 0a 2a 2a 20 73 74  .zErrMsg16.** st
6a30: 6f 72 65 20 74 68 65 20 6d 6f 73 74 20 72 65 63  ore the most rec
6a40: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 61  ent error code a
6a50: 6e 64 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c  nd, if applicabl
6a60: 65 2c 20 73 74 72 69 6e 67 2e 20 54 68 65 0a 2a  e, string. The.*
6a70: 2a 20 69 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * internal funct
6a80: 69 6f 6e 20 73 71 6c 69 74 65 33 45 72 72 6f 72  ion sqlite3Error
6a90: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 73 65  () is used to se
6aa0: 74 20 74 68 65 73 65 20 76 61 72 69 61 62 6c 65  t these variable
6ab0: 73 0a 2a 2a 20 63 6f 6e 73 69 73 74 65 6e 74 6c  s.** consistentl
6ac0: 79 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  y..*/.struct sql
6ad0: 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  ite3 {.  sqlite3
6ae0: 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20  _vfs *pVfs;     
6af0: 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74         /* OS Int
6b00: 65 72 66 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20  erface */.  int 
6b10: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
6b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6b30: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
6b40: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
6b50: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
6b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b70: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
6b80: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  nds */.  int fla
6b90: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
6ba0: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
6bb0: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
6bc0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e  ee below */.  in
6bd0: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
6bf0: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
6c00: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
6c10: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
6c20: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
6c30: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
6c40: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
6c50: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
6c60: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6c80: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
6c90: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
6ca0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
6cb0: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6cd0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
6ce0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
6cf0: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
6d00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
6d10: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
6d20: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
6d30: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6d50: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
6d60: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
6d70: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66  ilure */.  u8 df
6d80: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
6d90: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
6da0: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
6db0: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
6dc0: 73 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4a 6f  s */.  u8 dfltJo
6dd0: 75 72 6e 61 6c 4d 6f 64 65 3b 20 20 20 20 20 20  urnalMode;      
6de0: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
6df0: 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 66 6f 72  journal mode for
6e00: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
6e10: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
6e20: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
6e30: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
6e40: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
6e50: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
6e60: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
6e70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
6e80: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
6e90: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
6ea0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  e */.  int nextP
6eb0: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
6ec0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
6ed0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
6ee0: 20 3e 30 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61   >0 */.  int nTa
6ef0: 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
6f00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6f10: 20 6f 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68   of tables in th
6f20: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
6f30: 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f  CollSeq *pDfltCo
6f40: 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
6f50: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
6f60: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
6f70: 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 69 36  (BINARY) */.  i6
6f80: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
6f90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
6fa0: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
6fb0: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
6fc0: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 75 33 32 20  above) */.  u32 
6fd0: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
6fe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
6ff0: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
7000: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
7010: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
7020: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
7030: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
7040: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
7050: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
7060: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
7070: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
7080: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
7090: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
70a0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
70b0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
70c0: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
70d0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
70e0: 75 74 65 78 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  utex */.  int aL
70f0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
7100: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
7110: 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  s */.  struct sq
7120: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
7130: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
7140: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
7150: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
7160: 2f 0a 20 20 20 20 69 6e 74 20 69 44 62 3b 20 20  /.    int iDb;  
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7180: 20 20 2f 2a 20 57 68 65 6e 20 62 61 63 6b 20 69    /* When back i
7190: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
71a0: 7a 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  zed */.    int n
71b0: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
71c0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
71d0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
71e0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
71f0: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7210: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
7220: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
7230: 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70  ng */.    u8 orp
7240: 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20  hanTrigger;     
7250: 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74        /* Last st
7260: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
7270: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
7280: 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20   */.  } init;.  
7290: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
72b0: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
72c0: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
72d0: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
72e0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
72f0: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
7300: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
7310: 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  es */.  struct V
7320: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
7330: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
7340: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
7350: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 69 6e  machines */.  in
7360: 74 20 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b  t activeVdbeCnt;
7370: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7380: 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63  umber of VDBEs c
7390: 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
73a0: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 77 72 69 74  ng */.  int writ
73b0: 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20  eVdbeCnt;       
73c0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
73d0: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
73e0: 74 68 61 74 20 61 72 65 20 77 72 69 74 69 6e 67  that are writing
73f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72   */.  void (*xTr
7400: 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ace)(void*,const
7410: 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20   char*);        
7420: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
7430: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
7440: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
7450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7460: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
7470: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
7480: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
7490: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
74a0: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b  onst char*,u64);
74b0: 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66    /* Profiling f
74c0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
74d0: 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20  d *pProfileArg; 
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74f0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7500: 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75  nt to profile fu
7510: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
7520: 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20   *pCommitArg;   
7530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7540: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f   Argument to xCo
7550: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a  mmitCallback() *
7560: 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f  /   .  int (*xCo
7570: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
7580: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
7590: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
75a0: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
75b0: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
75d0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
75e0: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
75f0: 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52  /   .  void (*xR
7600: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
7610: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
7620: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
7630: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
7640: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
7650: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
7660: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
7670: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
7680: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
7690: 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20  int64);.#ifndef 
76a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
76b0: 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c    int (*xWalCall
76c0: 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71  back)(void *, sq
76d0: 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
76e0: 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  har *, int);.  v
76f0: 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65  oid *pWalArg;.#e
7700: 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f  ndif.  void(*xCo
7710: 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
7720: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
7730: 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
7740: 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  *);.  void(*xCol
7750: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
7760: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
7770: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
7780: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f  d*);.  void *pCo
7790: 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73  llNeededArg;.  s
77a0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45  qlite3_value *pE
77b0: 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rr;          /* 
77c0: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
77d0: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 63  r message */.  c
77e0: 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20  har *zErrMsg;   
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7800: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
7810: 72 20 6d 65 73 73 61 67 65 20 28 55 54 46 2d 38  r message (UTF-8
7820: 20 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 63   encoded) */.  c
7830: 68 61 72 20 2a 7a 45 72 72 4d 73 67 31 36 3b 20  har *zErrMsg16; 
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7850: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
7860: 72 20 6d 65 73 73 61 67 65 20 28 55 54 46 2d 31  r message (UTF-1
7870: 36 20 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20  6 encoded) */.  
7880: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61  union {.    vola
7890: 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72  tile int isInter
78a0: 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20  rupted; /* True 
78b0: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
78c0: 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61  rupt has been ca
78d0: 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62  lled */.    doub
78e0: 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20  le notUsed1;    
78f0: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
7900: 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c  r */.  } u1;.  L
7910: 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69  ookaside lookasi
7920: 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
7930: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
7940: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
7950: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
7960: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
7970: 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75 74  ION.  int (*xAut
7980: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
7990: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
79a0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
79b0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
79e0: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
79f0: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
7a00: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
7a10: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
7a20: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
7a30: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
7a40: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
7a50: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
7a60: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
7a70: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
7a80: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
7a90: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
7aa0: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
7ab0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
7ac0: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
7ad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7ae0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
7af0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
7b00: 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65  */.  int nProgre
7b10: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 20 20  ssOps;          
7b20: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7b30: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
7b40: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
7b50: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
7b60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
7b70: 55 41 4c 54 41 42 4c 45 0a 20 20 48 61 73 68 20  UALTABLE.  Hash 
7b80: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
7b90: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
7ba0: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
7bb0: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
7bc0: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 56 54   */.  Table *pVT
7bd0: 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
7be0: 20 20 20 20 2f 2a 20 76 74 61 62 20 77 69 74 68      /* vtab with
7bf0: 20 61 63 74 69 76 65 20 43 6f 6e 6e 65 63 74 2f   active Connect/
7c00: 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 2a 2f  Create method */
7c10: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
7c20: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
7c30: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
7c40: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
7c50: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  nsactions */.  i
7c60: 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20  nt nVTrans;     
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7c80: 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f  Allocated size o
7c90: 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 56  f aVTrans */.  V
7ca0: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
7cb0: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
7cc0: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
7cd0: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
7ce0: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
7cf0: 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46 75   FuncDefHash aFu
7d00: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  nc;            /
7d10: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
7d20: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
7d30: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
7d40: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
7d50: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
7d60: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
7d70: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
7d80: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
7d90: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
7da0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20  llback */.  int 
7db0: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
7dc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
7dd0: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
7de0: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
7df0: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7e10: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
7e20: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
7e30: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
7e40: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
7e50: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
7e60: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
7e70: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
7e80: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7ea0: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
7eb0: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
7ec0: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
7ed0: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
7ee0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7ef0: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
7f00: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
7f10: 73 20 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  s  */.  u8 isTra
7f20: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
7f30: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
7f40: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
7f50: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
7f60: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
7f70: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
7f80: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
7f90: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
7fa0: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
7fb0: 2e 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c  . */..#ifdef SQL
7fc0: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
7fd0: 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68  K_NOTIFY.  /* Th
7fe0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
7ff0: 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72  ables are all pr
8000: 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53  otected by the S
8010: 54 41 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20  TATIC_MASTER .  
8020: 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79  ** mutex, not by
8030: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20   sqlite3.mutex. 
8040: 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79  They are used by
8050: 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e   code in notify.
8060: 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  c. .  **.  ** Wh
8070: 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  en X.pUnlockConn
8080: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
8090: 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20  means that X is 
80a0: 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f  waiting for Y to
80b0: 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20  .  ** unlock so 
80c0: 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63  that it can proc
80d0: 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  eed..  **.  ** W
80e0: 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43  hen X.pBlockingC
80f0: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
8100: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f  at means that so
8110: 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74  mething that X t
8120: 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20  ried.  ** tried 
8130: 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66  to do recently f
8140: 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51  ailed with an SQ
8150: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f  LITE_LOCKED erro
8160: 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20  r due to locks. 
8170: 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20   ** held by Y.. 
8180: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
8190: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
81a0: 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f  on; /* Connectio
81b0: 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51  n that caused SQ
81c0: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20  LITE_LOCKED */. 
81d0: 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63   sqlite3 *pUnloc
81e0: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20  kConnection;    
81f0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
8200: 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f  tion to watch fo
8210: 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f  r unlock */.  vo
8220: 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20  id *pUnlockArg; 
8230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8240: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8250: 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79  to xUnlockNotify
8260: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e   */.  void (*xUn
8270: 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64  lockNotify)(void
8280: 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55   **, int);  /* U
8290: 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c  nlock notify cal
82a0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74  lback */.  sqlit
82b0: 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64  e3 *pNextBlocked
82c0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
82d0: 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20   in list of all 
82e0: 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69  blocked connecti
82f0: 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ons */.#endif.};
8300: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
8310: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
8320: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
8330: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
8340: 6e 65 20 45 4e 43 28 64 62 29 20 28 28 64 62 29  ne ENC(db) ((db)
8350: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
8360: 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ->enc)../*.** Po
8370: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
8380: 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c  r the sqlite3.fl
8390: 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags..*/.#define 
83a0: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
83b0: 20 20 20 20 20 20 30 78 30 30 30 30 30 31 30 30        0x00000100
83c0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61    /* True to tra
83d0: 63 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f  ce VDBE executio
83e0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
83f0: 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
8400: 73 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f  s  0x00000200  /
8410: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
8420: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
8430: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8440: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
8450: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
8460: 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d   Show full colum
8470: 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43  n names on SELEC
8480: 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  T */.#define SQL
8490: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
84a0: 73 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f  s  0x00000800  /
84b0: 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c  * Show short col
84c0: 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  umns names */.#d
84d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
84e0: 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30  ntRows      0x00
84f0: 30 30 31 30 30 30 20 20 2f 2a 20 43 6f 75 6e 74  001000  /* Count
8500: 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
8510: 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20   INSERT, */.    
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8540: 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54        /*   DELET
8550: 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64  E, or UPDATE and
8560: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20   return */.     
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8590: 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f       /*   the co
85a0: 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c  unt using a call
85b0: 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  back. */.#define
85c0: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
85d0: 62 61 63 6b 20 20 20 30 78 30 30 30 30 32 30 30  back   0x0000200
85e0: 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  0  /* Invoke the
85f0: 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69   callback once i
8600: 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20  f the */.       
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8630: 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73     /*   result s
8640: 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23  et is empty */.#
8650: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
8660: 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30  lTrace       0x0
8670: 30 30 30 34 30 30 30 20 20 2f 2a 20 44 65 62 75  0004000  /* Debu
8680: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
8690: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
86a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
86b0: 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30  eListing    0x00
86c0: 30 30 38 30 30 30 20 20 2f 2a 20 44 65 62 75 67  008000  /* Debug
86d0: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
86e0: 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64  E programs */.#d
86f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69  efine SQLITE_Wri
8700: 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30  teSchema    0x00
8710: 30 31 30 30 30 30 20 20 2f 2a 20 4f 4b 20 74 6f  010000  /* OK to
8720: 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d   update SQLITE_M
8730: 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65  ASTER */.#define
8740: 20 53 51 4c 49 54 45 5f 4e 6f 52 65 61 64 6c 6f   SQLITE_NoReadlo
8750: 63 6b 20 20 20 20 20 30 78 30 30 30 32 30 30 30  ck     0x0002000
8760: 30 20 20 2f 2a 20 52 65 61 64 6c 6f 63 6b 73 20  0  /* Readlocks 
8770: 61 72 65 20 6f 6d 69 74 74 65 64 20 77 68 65 6e  are omitted when
8780: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87a0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
87b0: 63 63 65 73 73 69 6e 67 20 72 65 61 64 2d 6f 6e  ccessing read-on
87c0: 6c 79 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ly databases */.
87d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
87e0: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
87f0: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 44 6f 20  00040000  /* Do 
8800: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
8810: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
8820: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8830: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
8840: 30 78 30 30 38 30 30 30 30 20 20 2f 2a 20 46 6f  0x0080000  /* Fo
8850: 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
8860: 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
8870: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
8880: 46 6d 74 20 20 30 78 30 30 31 30 30 30 30 30 20  Fmt  0x00100000 
8890: 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64   /* Create new d
88a0: 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d  atabases in form
88b0: 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20  at 1 */.#define 
88c0: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
88d0: 20 20 20 20 20 20 30 78 30 30 32 30 30 30 30 30        0x00200000
88e0: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
88f0: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
8900: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
8910: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
8920: 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20  on  0x00400000  
8930: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
8940: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
8950: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76  ine SQLITE_Recov
8960: 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 38 30  eryMode   0x0080
8970: 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20  0000  /* Ignore 
8980: 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f  schema errors */
8990: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
89a0: 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30  ReverseOrder   0
89b0: 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 52 65  x01000000  /* Re
89c0: 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20  verse unordered 
89d0: 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69  SELECTs */.#defi
89e0: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69  ne SQLITE_RecTri
89f0: 67 67 65 72 73 20 20 20 20 30 78 30 32 30 30 30  ggers    0x02000
8a00: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72  000  /* Enable r
8a10: 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
8a20: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8a30: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
8a40: 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20 2f     0x04000000  /
8a50: 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67  * Enforce foreig
8a60: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
8a70: 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s  */.#define SQ
8a80: 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20  LITE_AutoIndex  
8a90: 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20 20      0x08000000  
8aa0: 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61  /* Enable automa
8ab0: 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  tic indexes */.#
8ac0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
8ad0: 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 31  eferBuiltin  0x1
8ae0: 30 30 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66  0000000  /* Pref
8af0: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
8b00: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 0a 2f 2a 0a  in funcs */../*.
8b10: 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73  ** Bits of the s
8b20: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 66 69 65  qlite3.flags fie
8b30: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
8b40: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
8b50: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
8b60: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
8b70: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
8b80: 2e 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2a  .) interface..**
8b90: 20 54 68 65 73 65 20 6d 75 73 74 20 62 65 20 74   These must be t
8ba0: 68 65 20 6c 6f 77 2d 6f 72 64 65 72 20 62 69 74  he low-order bit
8bb0: 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20 66  s of the flags f
8bc0: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
8bd0: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
8be0: 74 74 65 6e 65 72 20 30 78 30 31 20 20 20 20 20  ttener 0x01     
8bf0: 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 71 75     /* Disable qu
8c00: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
8c10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8c20: 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20  _ColumnCache    
8c30: 30 78 30 32 20 20 20 20 20 20 20 20 2f 2a 20 44  0x02        /* D
8c40: 69 73 61 62 6c 65 20 74 68 65 20 63 6f 6c 75 6d  isable the colum
8c50: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
8c60: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 64 65 78 53  ne SQLITE_IndexS
8c70: 6f 72 74 20 20 20 20 20 20 30 78 30 34 20 20 20  ort      0x04   
8c80: 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20       /* Disable 
8c90: 69 6e 64 65 78 65 73 20 66 6f 72 20 73 6f 72 74  indexes for sort
8ca0: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
8cb0: 51 4c 49 54 45 5f 49 6e 64 65 78 53 65 61 72 63  QLITE_IndexSearc
8cc0: 68 20 20 20 20 30 78 30 38 20 20 20 20 20 20 20  h    0x08       
8cd0: 20 2f 2a 20 44 69 73 61 62 6c 65 20 69 6e 64 65   /* Disable inde
8ce0: 78 65 73 20 66 6f 72 20 73 65 61 72 63 68 69 6e  xes for searchin
8cf0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
8d00: 49 54 45 5f 49 6e 64 65 78 43 6f 76 65 72 20 20  ITE_IndexCover  
8d10: 20 20 20 30 78 31 30 20 20 20 20 20 20 20 20 2f     0x10        /
8d20: 2a 20 44 69 73 61 62 6c 65 20 69 6e 64 65 78 20  * Disable index 
8d30: 63 6f 76 65 72 69 6e 67 20 74 61 62 6c 65 20 2a  covering table *
8d40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8d50: 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20  _GroupByOrder   
8d60: 30 78 32 30 20 20 20 20 20 20 20 20 2f 2a 20 44  0x20        /* D
8d70: 69 73 61 62 6c 65 20 47 52 4f 55 50 42 59 20 63  isable GROUPBY c
8d80: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
8d90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8da0: 45 5f 4f 70 74 4d 61 73 6b 20 20 20 20 20 20 20  E_OptMask       
8db0: 20 30 78 66 66 20 20 20 20 20 20 20 20 2f 2a 20   0xff        /* 
8dc0: 4d 61 73 6b 20 6f 66 20 61 6c 6c 20 64 69 73 61  Mask of all disa
8dd0: 62 6c 61 62 6c 65 20 6f 70 74 73 20 2a 2f 0a 0a  blable opts */..
8de0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
8df0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
8e00: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
8e10: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
8e20: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
8e30: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
8e40: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
8e50: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
8e60: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
8e70: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
8e80: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
8e90: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
8ea0: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
8eb0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
8ec0: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
8ed0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
8ee0: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
8ef0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
8f00: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
8f10: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
8f20: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
8f30: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
8f40: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
8f50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8f60: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
8f70: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
8f80: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
8f90: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
8fa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
8fb0: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
8fc0: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
8fd0: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
8fe0: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 0a 2f  r occurred */../
8ff0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
9000: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
9010: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
9020: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9030: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
9040: 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
9050: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
9060: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
9070: 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61  lite.aFunc.** ha
9080: 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20  sh table.  When 
9090: 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f  multiple functio
90a0: 6e 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ns have the same
90b0: 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20   name, the hash 
90c0: 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20  table.** points 
90d0: 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  to a linked list
90e0: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
90f0: 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ures..*/.struct 
9100: 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20  FuncDef {.  i16 
9110: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
9120: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
9130: 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61  guments.  -1 mea
9140: 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a  ns unlimited */.
9150: 20 20 75 38 20 69 50 72 65 66 45 6e 63 3b 20 20    u8 iPrefEnc;  
9160: 20 20 20 20 20 20 20 2f 2a 20 50 72 65 66 65 72         /* Prefer
9170: 72 65 64 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  red text encodin
9180: 67 20 28 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g (SQLITE_UTF8, 
9190: 31 36 4c 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20  16LE, 16BE) */. 
91a0: 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20   u8 flags;      
91b0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
91c0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
91d0: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
91e0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
91f0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
9200: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
9210: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
9220: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
9230: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
9240: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
9250: 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
9260: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
9270: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
9280: 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74  /* Regular funct
9290: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
92a0: 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63  xStep)(sqlite3_c
92b0: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
92c0: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
92d0: 20 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20   Aggregate step 
92e0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
92f0: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
9300: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
9310: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72           /* Aggr
9320: 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20  egate finalizer 
9330: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
9340: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ;         /* SQL
9350: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
9360: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63  ction. */.  Func
9370: 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20  Def *pHash;     
9380: 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20   /* Next with a 
9390: 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62  different name b
93a0: 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68  ut the same hash
93b0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f   */.};../*.** Po
93c0: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
93d0: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 0a  r FuncDef.flags.
93e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
93f0: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
9400: 30 78 30 31 20 2f 2a 20 43 61 6e 64 69 64 61 74  0x01 /* Candidat
9410: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
9420: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
9430: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
9440: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 32  NC_CASE     0x02
9450: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
9460: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
9470: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
9480: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
9490: 45 4d 20 20 20 20 30 78 30 34 20 2f 2a 20 45 70  EM    0x04 /* Ep
94a0: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
94b0: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
94c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
94d0: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 38 20  C_NEEDCOLL 0x08 
94e0: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
94f0: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
9500: 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64   be called */.#d
9510: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
9520: 43 5f 50 52 49 56 41 54 45 20 20 30 78 31 30 20  C_PRIVATE  0x10 
9530: 2f 2a 20 41 6c 6c 6f 77 65 64 20 66 6f 72 20 69  /* Allowed for i
9540: 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c 79  nternal use only
9550: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9560: 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20  TE_FUNC_COUNT   
9570: 20 30 78 32 30 20 2f 2a 20 42 75 69 6c 74 2d 69   0x20 /* Built-i
9580: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
9590: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
95a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
95b0: 45 53 43 45 20 30 78 34 30 20 2f 2a 20 42 75 69  ESCE 0x40 /* Bui
95c0: 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29  lt-in coalesce()
95d0: 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e   or ifnull() fun
95e0: 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ction */../*.** 
95f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
9600: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
9610: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
9620: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
9630: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
9640: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
9650: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
9660: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
9670: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
9680: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
9690: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
96a0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
96b0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
96c0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
96d0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
96e0: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
96f0: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
9700: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
9710: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
9720: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
9730: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
9740: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
9750: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
9760: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
9770: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
9780: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
9790: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
97a0: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
97b0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
97c0: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
97d0: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
97e0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
97f0: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
9800: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47   set..**.**   AG
9810: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
9820: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
9830: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
9840: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
9850: 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
9860: 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
9870: 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
9880: 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
9890: 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
98a0: 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
98b0: 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
98c0: 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
98d0: 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
98e0: 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
98f0: 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
9900: 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
9910: 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
9920: 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28  *.**   LIKEFUNC(
9930: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
9940: 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20  g, flags).**    
9950: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
9960: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
9970: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
9980: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
9990: 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63   .**     that ac
99a0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
99b0: 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
99c0: 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
99d0: 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66  l to C .**     f
99e0: 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
99f0: 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
9a00: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
9a10: 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
9a20: 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
9a30: 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
9a40: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
9a50: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
9a60: 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
9a70: 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
9a80: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
9a90: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
9aa0: 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
9ab0: 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
9ac0: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
9ad0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
9ae0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
9af0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
9b00: 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49  E_UTF8, bNC*SQLI
9b10: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
9b20: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
9b30: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
9b40: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
9b50: 23 7a 4e 61 6d 65 2c 20 30 7d 0a 23 64 65 66 69  #zName, 0}.#defi
9b60: 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28  ne STR_FUNCTION(
9b70: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
9b80: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
9b90: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
9ba0: 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49 54  _UTF8, bNC*SQLIT
9bb0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c  E_FUNC_NEEDCOLL,
9bc0: 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
9bd0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
9be0: 6d 65 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c  me, 0}.#define L
9bf0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
9c00: 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
9c10: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
9c20: 54 45 5f 55 54 46 38 2c 20 66 6c 61 67 73 2c 20  TE_UTF8, flags, 
9c30: 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20  (void *)arg, 0, 
9c40: 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20  likeFunc, 0, 0, 
9c50: 23 7a 4e 61 6d 65 2c 20 30 7d 0a 23 64 65 66 69  #zName, 0}.#defi
9c60: 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61  ne AGGREGATE(zNa
9c70: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
9c80: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
9c90: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
9ca0: 49 54 45 5f 55 54 46 38 2c 20 6e 63 2a 53 51 4c  ITE_UTF8, nc*SQL
9cb0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
9cc0: 4c 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  L, \.   SQLITE_I
9cd0: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
9ce0: 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  0, 0, xStep,xFin
9cf0: 61 6c 2c 23 7a 4e 61 6d 65 2c 30 7d 0a 0a 2f 2a  al,#zName,0}../*
9d00: 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
9d10: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
9d20: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
9d30: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
9d40: 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
9d50: 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
9d60: 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
9d70: 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
9d80: 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
9d90: 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
9da0: 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
9db0: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
9dc0: 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
9dd0: 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
9de0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
9df0: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
9e00: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e20: 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70          /* Savep
9e30: 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
9e40: 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
9e50: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
9e60: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
9e70: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9e80: 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
9e90: 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 53 61 76  lations */.  Sav
9ea0: 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ec0: 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
9ed0: 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
9ee0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
9ef0: 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
9f00: 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
9f10: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
9f20: 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
9f30: 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
9f40: 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
9f50: 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
9f60: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
9f70: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
9f80: 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
9f90: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
9fa0: 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
9fb0: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
9fc0: 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
9fd0: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
9fe0: 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
9ff0: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
a000: 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
a010: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
a020: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
a030: 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
a040: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
a050: 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
a060: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
a070: 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
a080: 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
a090: 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
a0a0: 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
a0b0: 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
a0c0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0e0: 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
a0f0: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
a100: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
a110: 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
a120: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a130: 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
a140: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
a150: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
a160: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
a170: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
a180: 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
a190: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  nction */.};../*
a1a0: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
a1b0: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
a1c0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
a1d0: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
a1e0: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
a1f0: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
a200: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
a210: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
a220: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
a230: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
a240: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
a250: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
a260: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
a270: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66  n */.  char *zDf
a280: 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69  lt;     /* Origi
a290: 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
a2a0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
a2b0: 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  .  char *zType; 
a2c0: 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65      /* Data type
a2d0: 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e   for this column
a2e0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
a2f0: 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
a300: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
a310: 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
a320: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
a330: 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
a340: 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
a350: 73 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  s a NOT NULL con
a360: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 75 38 20  straint */.  u8 
a370: 69 73 50 72 69 6d 4b 65 79 3b 20 20 20 20 2f 2a  isPrimKey;    /*
a380: 20 54 72 75 65 20 69 66 20 74 68 69 73 20 63 6f   True if this co
a390: 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
a3a0: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
a3b0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
a3c0: 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
a3d0: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
a3e0: 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 23 69 66  .. values */.#if
a3f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a400: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
a410: 75 38 20 69 73 48 69 64 64 65 6e 3b 20 20 20 20  u8 isHidden;    
a420: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
a430: 20 63 6f 6c 75 6d 6e 20 69 73 20 27 68 69 64 64   column is 'hidd
a440: 65 6e 27 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  en' */.#endif.};
a450: 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
a460: 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
a470: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
a480: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
a490: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
a4a0: 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
a4b0: 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
a4c0: 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
a4d0: 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
a4e0: 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
a4f0: 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
a500: 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
a510: 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
a520: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  e..**.** There m
a530: 61 79 20 74 77 6f 20 73 65 70 61 72 61 74 65 20  ay two separate 
a540: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
a550: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  of the collation
a560: 20 66 75 6e 63 74 69 6f 6e 2c 20 6f 6e 65 0a 2a   function, one.*
a570: 2a 20 74 68 61 74 20 70 72 6f 63 65 73 73 65 73  * that processes
a580: 20 74 65 78 74 20 69 6e 20 55 54 46 2d 38 20 65   text in UTF-8 e
a590: 6e 63 6f 64 69 6e 67 20 28 43 6f 6c 6c 53 65 71  ncoding (CollSeq
a5a0: 2e 78 43 6d 70 29 20 61 6e 64 20 61 6e 6f 74 68  .xCmp) and anoth
a5b0: 65 72 20 74 68 61 74 0a 2a 2a 20 70 72 6f 63 65  er that.** proce
a5c0: 73 73 65 73 20 74 65 78 74 20 65 6e 63 6f 64 65  sses text encode
a5d0: 64 20 69 6e 20 55 54 46 2d 31 36 20 28 43 6f 6c  d in UTF-16 (Col
a5e0: 6c 53 65 71 2e 78 43 6d 70 31 36 29 2c 20 75 73  lSeq.xCmp16), us
a5f0: 69 6e 67 20 74 68 65 20 6d 61 63 68 69 6e 65 0a  ing the machine.
a600: 2a 2a 20 6e 61 74 69 76 65 20 62 79 74 65 20 6f  ** native byte o
a610: 72 64 65 72 2e 20 57 68 65 6e 20 61 20 63 6f 6c  rder. When a col
a620: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
a630: 69 73 20 69 6e 76 6f 6b 65 64 2c 20 53 51 4c 69  is invoked, SQLi
a640: 74 65 20 73 65 6c 65 63 74 73 0a 2a 2a 20 74 68  te selects.** th
a650: 65 20 76 65 72 73 69 6f 6e 20 74 68 61 74 20 77  e version that w
a660: 69 6c 6c 20 72 65 71 75 69 72 65 20 74 68 65 20  ill require the 
a670: 6c 65 61 73 74 20 65 78 70 65 6e 73 69 76 65 20  least expensive 
a680: 65 6e 63 6f 64 69 6e 67 0a 2a 2a 20 74 72 61 6e  encoding.** tran
a690: 73 6c 61 74 69 6f 6e 73 2c 20 69 66 20 61 6e 79  slations, if any
a6a0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 43 6f 6c 6c  ..**.** The Coll
a6b0: 53 65 71 2e 70 55 73 65 72 20 6d 65 6d 62 65 72  Seq.pUser member
a6c0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 6e 20   variable is an 
a6d0: 65 78 74 72 61 20 70 61 72 61 6d 65 74 65 72 20  extra parameter 
a6e0: 74 68 61 74 20 70 61 73 73 65 64 20 69 6e 0a 2a  that passed in.*
a6f0: 2a 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61  * as the first a
a700: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 55  rgument to the U
a710: 54 46 2d 38 20 63 6f 6d 70 61 72 69 73 6f 6e 20  TF-8 comparison 
a720: 66 75 6e 63 74 69 6f 6e 2c 20 78 43 6d 70 2e 0a  function, xCmp..
a730: 2a 2a 20 43 6f 6c 6c 53 65 71 2e 70 55 73 65 72  ** CollSeq.pUser
a740: 31 36 20 69 73 20 74 68 65 20 65 71 75 69 76 61  16 is the equiva
a750: 6c 65 6e 74 20 66 6f 72 20 74 68 65 20 55 54 46  lent for the UTF
a760: 2d 31 36 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  -16 comparison f
a770: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 78 43 6d 70  unction,.** xCmp
a780: 31 36 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74  16..**.** If bot
a790: 68 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 61  h CollSeq.xCmp a
a7a0: 6e 64 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 31  nd CollSeq.xCmp1
a7b0: 36 20 61 72 65 20 4e 55 4c 4c 2c 20 69 74 20 6d  6 are NULL, it m
a7c0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
a7d0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
a7e0: 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
a7f0: 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
a800: 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
a810: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
a820: 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
a830: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
a840: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
a850: 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
a860: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
a870: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
a880: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
a890: 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
a8a0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
a8b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
a8c0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
a8d0: 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
a8e0: 0a 20 20 75 38 20 74 79 70 65 3b 20 20 20 20 20  .  u8 type;     
a8f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
a900: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 4f  of the SQLITE_CO
a910: 4c 4c 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 62 65  LL_... values be
a920: 6c 6f 77 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  low */.  void *p
a930: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
a940: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
a950: 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
a960: 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
a970: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
a980: 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
a990: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
a9a0: 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
a9b0: 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
a9c0: 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
a9d0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
a9e0: 65 73 20 6f 66 20 43 6f 6c 6c 53 65 71 2e 74 79  es of CollSeq.ty
a9f0: 70 65 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pe:.*/.#define S
aa00: 51 4c 49 54 45 5f 43 4f 4c 4c 5f 42 49 4e 41 52  QLITE_COLL_BINAR
aa10: 59 20 20 31 20 20 2f 2a 20 54 68 65 20 64 65 66  Y  1  /* The def
aa20: 61 75 6c 74 20 6d 65 6d 63 6d 70 28 29 20 63 6f  ault memcmp() co
aa30: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
aa40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
aa50: 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41 53 45 20 20  TE_COLL_NOCASE  
aa60: 32 20 20 2f 2a 20 54 68 65 20 62 75 69 6c 74 2d  2  /* The built-
aa70: 69 6e 20 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74  in NOCASE collat
aa80: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a  ing sequence */.
aa90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
aaa0: 4f 4c 4c 5f 52 45 56 45 52 53 45 20 33 20 20 2f  OLL_REVERSE 3  /
aab0: 2a 20 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 52  * The built-in R
aac0: 45 56 45 52 53 45 20 63 6f 6c 6c 61 74 69 6e 67  EVERSE collating
aad0: 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a 23 64 65   sequence */.#de
aae0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c  fine SQLITE_COLL
aaf0: 5f 55 53 45 52 20 20 20 20 30 20 20 2f 2a 20 41  _USER    0  /* A
ab00: 6e 79 20 6f 74 68 65 72 20 75 73 65 72 2d 64 65  ny other user-de
ab10: 66 69 6e 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20  fined collating 
ab20: 73 65 71 75 65 6e 63 65 20 2a 2f 0a 0a 2f 2a 0a  sequence */../*.
ab30: 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20  ** A sort order 
ab40: 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53  can be either AS
ab50: 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64  C or DESC..*/.#d
ab60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
ab70: 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20  ASC       0  /* 
ab80: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
ab90: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
aba0: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53  ne SQLITE_SO_DES
abb0: 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72  C      1  /* Sor
abc0: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
abd0: 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  rder */../*.** C
abe0: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
abf0: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
ac00: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
ac10: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
ac20: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
ac30: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
ac40: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
ac50: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
ac60: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
ac70: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
ac80: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
ac90: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
aca0: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
acb0: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
acc0: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
acd0: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
ace0: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
acf0: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
ad00: 61 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  a'.  That way,.*
ad10: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
ad20: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
ad30: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
ad40: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
ad50: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
ad60: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
ad70: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
ad80: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
ad90: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
ada0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
adb0: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
adc0: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
add0: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
ade0: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
adf0: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
ae00: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  n..*/.#define SQ
ae10: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20  LITE_AFF_TEXT   
ae20: 20 20 27 61 27 0a 23 64 65 66 69 6e 65 20 53 51    'a'.#define SQ
ae30: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20  LITE_AFF_NONE   
ae40: 20 20 27 62 27 0a 23 64 65 66 69 6e 65 20 53 51    'b'.#define SQ
ae50: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
ae60: 20 20 27 63 27 0a 23 64 65 66 69 6e 65 20 53 51    'c'.#define SQ
ae70: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
ae80: 20 20 27 64 27 0a 23 64 65 66 69 6e 65 20 53 51    'd'.#define SQ
ae90: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20  LITE_AFF_REAL   
aea0: 20 20 27 65 27 0a 0a 23 64 65 66 69 6e 65 20 73    'e'..#define s
aeb0: 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41  qlite3IsNumericA
aec0: 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29  ffinity(X)  ((X)
aed0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
aee0: 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ERIC)../*.** The
aef0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
af00: 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66   values masks of
af10: 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e  f the significan
af20: 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20  t bits of an.** 
af30: 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20  affinity value. 
af40: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
af50: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
af60: 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x67../*.** Addi
af70: 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
af80: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
af90: 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
afa0: 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
afb0: 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
afc0: 6e 69 74 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  nity..*/.#define
afd0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
afe0: 4c 4c 20 20 20 30 78 30 38 20 20 2f 2a 20 6a 75  LL   0x08  /* ju
aff0: 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70  mps if either op
b000: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f  erand is NULL */
b010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b020: 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 31  STOREP2      0x1
b030: 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
b040: 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61  lt in reg[P2] ra
b050: 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a  ther than jump *
b060: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b070: 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78  _NULLEQ       0x
b080: 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c  80  /* NULL=NULL
b090: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62   */../*.** An ob
b0a0: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
b0b0: 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
b0c0: 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61   each virtual ta
b0d0: 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a  ble present in.*
b0e0: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  * the database s
b0f0: 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  chema. .**.** If
b100: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
b110: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
b120: 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
b130: 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
b140: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
b150: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
b160: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
b170: 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
b180: 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
b190: 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
b1a0: 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
b1b0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
b1c0: 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
b1d0: 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
b1e0: 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
b1f0: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
b200: 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
b210: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
b220: 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  e .** implementa
b230: 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
b240: 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
b250: 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
b260: 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61  tween .** databa
b270: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
b280: 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
b290: 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
b2a0: 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ory database .**
b2b0: 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
b2c0: 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d  d, as the implem
b2d0: 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73  entation often s
b2e0: 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61  tores the databa
b2f0: 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
b300: 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74   handle passed t
b310: 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f  o it via the xCo
b320: 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61  nnect() or xCrea
b330: 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64  te() method.** d
b340: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
b350: 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  tion internally.
b360: 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63   This database c
b370: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
b380: 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 75 73 65   may.** then use
b390: 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
b3a0: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
b3b0: 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
b3c0: 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20  real tables .** 
b3d0: 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
b3e0: 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
b3f0: 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
b400: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20   of the callers 
b410: 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
b420: 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
b430: 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
b440: 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
b450: 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63  abase .** connec
b460: 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65  tion as that use
b470: 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c  d to execute SQL
b480: 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74   operations on t
b490: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
b4a0: 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62  ..**.** All VTab
b4b0: 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  le objects that 
b4c0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20  correspond to a 
b4d0: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
b4e0: 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61  a shared.** data
b4f0: 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20  base schema are 
b500: 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64  initially stored
b510: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73   in a linked-lis
b520: 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a  t pointed to by.
b530: 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  ** the Table.pVT
b540: 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69  able member vari
b550: 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72  able of the corr
b560: 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20  esponding Table 
b570: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20  object..** When 
b580: 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  an sqlite3_prepa
b590: 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69  re() operation i
b5a0: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63  s required to ac
b5b0: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
b5c0: 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65  .** table, it se
b5d0: 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20  arches the list 
b5e0: 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74  for the VTable t
b5f0: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
b600: 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
b610: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
b620: 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e  ing the preparin
b630: 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74  g so as to use t
b640: 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71  he correct.** sq
b650: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
b660: 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c  le in the compil
b670: 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  ed query..**.** 
b680: 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  When an in-memor
b690: 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69  y Table object i
b6a0: 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65  s deleted (for e
b6b0: 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a  xample when the.
b6c0: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69  ** schema is bei
b6d0: 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20  ng reloaded for 
b6e0: 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68  some reason), th
b6f0: 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  e VTable objects
b700: 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c   are not .** del
b710: 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
b720: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
b730: 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
b740: 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69  onnect()ed .** i
b750: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
b760: 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
b770: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
b780: 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
b790: 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
b7a0: 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
b7b0: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
b7c0: 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
b7d0: 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
b7e0: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
b7f0: 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
b800: 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
b810: 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
b820: 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  d .** next time 
b830: 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
b840: 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
b850: 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
b860: 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
b870: 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
b880: 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
b890: 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
b8a0: 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
b8b0: 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
b8c0: 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
b8d0: 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
b8e0: 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
b8f0: 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
b900: 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
b910: 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
b920: 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
b930: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
b940: 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
b950: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
b960: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
b970: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
b980: 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
b990: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
b9a0: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
b9b0: 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
b9c0: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61   .** sqlite3DbMa
b9d0: 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
b9e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
b9f0: 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
ba00: 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74  able.db as .** t
ba10: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
ba20: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
ba30: 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
ba40: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
ba50: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
ba60: 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
ba70: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
ba80: 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
ba90: 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
baa0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
bab0: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
bac0: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
bad0: 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
bae0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
baf0: 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
bb00: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb20: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
bb30: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
bb40: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 56 54  tructure */.  VT
bb50: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
bb60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
bb70: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
bb80: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
bb90: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
bba0: 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
bbb0: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
bbc0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
bbd0: 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  f the.** followi
bbe0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
bbf0: 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20  .** Table.zName 
bc00: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
bc10: 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63  he table.  The c
bc20: 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69  ase of the origi
bc30: 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41  nal.** CREATE TA
bc40: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  BLE statement is
bc50: 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73   stored, but cas
bc60: 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69  e is not signifi
bc70: 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  cant for.** comp
bc80: 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  arisons..**.** T
bc90: 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65  able.nCol is the
bca0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
bcb0: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
bcc0: 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73  .  Table.aCol is
bcd0: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
bce0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c   an array of Col
bcf0: 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20  umn structures, 
bd00: 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  one for each col
bd10: 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  umn..**.** If th
bd20: 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49  e table has an I
bd30: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
bd40: 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69  EY, then Table.i
bd50: 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65  PKey is the inde
bd60: 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75  x of.** the colu
bd70: 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20  mn that is that 
bd80: 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65  key.   Otherwise
bd90: 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20   Table.iPKey is 
bda0: 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a  negative.  Note.
bdb0: 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
bdc0: 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d  type of the PRIM
bdd0: 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20  ARY KEY must be 
bde0: 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73  INTEGER for this
bdf0: 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20   field to.** be 
be00: 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52  set.  An INTEGER
be10: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
be20: 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69  used as the rowi
be30: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
be40: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20  f.** the table. 
be50: 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20   If a table has 
be60: 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  no INTEGER PRIMA
be70: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72  RY KEY, then a r
be80: 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69  andom rowid.** i
be90: 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20  s generated for 
bea0: 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
beb0: 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72  table.  TF_HasPr
bec0: 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20  imaryKey is set 
bed0: 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  if.** the table 
bee0: 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20  has any PRIMARY 
bef0: 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20  KEY, INTEGER or 
bf00: 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a  otherwise..**.**
bf10: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74   Table.tnum is t
bf20: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  he page number f
bf30: 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65  or the root BTre
bf40: 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  e page of the ta
bf50: 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61  ble in the.** da
bf60: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66  tabase file.  If
bf70: 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68   Table.iDb is th
bf80: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
bf90: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61  atabase table ba
bfa0: 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69  ckend.** in sqli
bfb0: 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20  te.aDb[].  0 is 
bfc0: 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
bfd0: 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66  abase and 1 is f
bfe0: 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74  or the file that
bff0: 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72  .** holds tempor
c000: 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ary tables and i
c010: 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45  ndices.  If TF_E
c020: 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a  phemeral is set.
c030: 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  ** then the tabl
c040: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  e is stored in a
c050: 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75   file that is au
c060: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
c070: 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20  ted.** when the 
c080: 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74  VDBE cursor to t
c090: 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73  he table is clos
c0a0: 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ed.  In this cas
c0b0: 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a  e Table.tnum .**
c0c0: 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72   refers VDBE cur
c0d0: 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20  sor number that 
c0e0: 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20  holds the table 
c0f0: 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65  open, not to the
c100: 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75   root.** page nu
c110: 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74  mber.  Transient
c120: 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64   tables are used
c130: 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73   to hold the res
c140: 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62  ults of a.** sub
c150: 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65  -query that appe
c160: 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ars instead of a
c170: 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65   real table name
c180: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
c190: 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c  use .** of a SEL
c1a0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
c1b0: 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
c1c0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 4d 65  .  sqlite3 *dbMe
c1d0: 6d 3b 20 20 20 20 20 20 2f 2a 20 44 42 20 63 6f  m;      /* DB co
c1e0: 6e 6e 65 63 74 69 6f 6e 20 75 73 65 64 20 66 6f  nnection used fo
c1f0: 72 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  r lookaside allo
c200: 63 61 74 69 6f 6e 73 2e 20 2a 2f 0a 20 20 63 68  cations. */.  ch
c210: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
c220: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
c230: 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
c240: 2a 2f 0a 20 20 69 6e 74 20 69 50 4b 65 79 3b 20  */.  int iPKey; 
c250: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
c260: 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
c270: 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
c280: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
c290: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
c2a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c2b0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
c2c0: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
c2d0: 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b  .  Column *aCol;
c2e0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
c2f0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
c300: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
c310: 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
c320: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51     /* List of SQ
c330: 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69  L indexes on thi
c340: 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 69 6e  s table. */.  in
c350: 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
c360: 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
c370: 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74   node for this t
c380: 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61  able (see note a
c390: 62 6f 76 65 29 20 2a 2f 0a 20 20 53 65 6c 65 63  bove) */.  Selec
c3a0: 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
c3b0: 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
c3c0: 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
c3d0: 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
c3e0: 69 65 77 2e 20 2a 2f 0a 20 20 75 31 36 20 6e 52  iew. */.  u16 nR
c3f0: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
c400: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
c410: 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62  ters to this Tab
c420: 6c 65 20 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c  le */.  u8 tabFl
c430: 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
c440: 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c  Mask of TF_* val
c450: 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43  ues */.  u8 keyC
c460: 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
c470: 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
c480: 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
c490: 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
c4a0: 4b 65 79 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  Key */.  FKey *p
c4b0: 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  FKey;         /*
c4c0: 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
c4d0: 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  all foreign keys
c4e0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
c4f0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
c500: 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  f;       /* Stri
c510: 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
c520: 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
c530: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64   column */.#ifnd
c540: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
c550: 48 45 43 4b 0a 20 20 45 78 70 72 20 2a 70 43 68  HECK.  Expr *pCh
c560: 65 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  eck;        /* T
c570: 68 65 20 41 4e 44 20 6f 66 20 61 6c 6c 20 43 48  he AND of all CH
c580: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
c590: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
c5a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
c5b0: 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
c5c0: 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
c5d0: 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
c5e0: 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
c5f0: 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
c600: 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
c610: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c620: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
c630: 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
c640: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
c650: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
c660: 2a 2f 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  */.  int nModule
c670: 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
c680: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
c690: 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
c6a0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
c6b0: 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74  uleArg;  /* Text
c6c0: 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61   of all module a
c6d0: 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75  rgs. [0] is modu
c6e0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 23 65 6e 64 69  le name */.#endi
c6f0: 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
c700: 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
c710: 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
c720: 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
c730: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
c740: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
c750: 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
c760: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
c770: 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
c780: 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
c790: 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
c7a0: 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
c7b0: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
c7c0: 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 65 2e  values for Tabe.
c7d0: 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  tabFlags..*/.#de
c7e0: 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
c7f0: 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
c800: 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
c810: 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
c820: 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
c830: 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  l       0x02    
c840: 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20  /* An ephemeral 
c850: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
c860: 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
c870: 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54  y   0x04    /* T
c880: 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
c890: 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
c8a0: 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
c8b0: 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20  nt   0x08    /* 
c8c0: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
c8d0: 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
c8e0: 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
c8f0: 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20  TF_Virtual      
c900: 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73     0x10    /* Is
c910: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
c920: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e   */.#define TF_N
c930: 65 65 64 4d 65 74 61 64 61 74 61 20 20 20 20 30  eedMetadata    0
c940: 78 32 30 20 20 20 20 2f 2a 20 61 43 6f 6c 5b 5d  x20    /* aCol[]
c950: 2e 7a 54 79 70 65 20 61 6e 64 20 61 43 6f 6c 5b  .zType and aCol[
c960: 5d 2e 70 43 6f 6c 6c 20 6d 69 73 73 69 6e 67 20  ].pColl missing 
c970: 2a 2f 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  */..../*.** Test
c980: 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
c990: 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
c9a0: 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
c9b0: 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
c9c0: 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
c9d0: 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
c9e0: 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
c9f0: 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
ca00: 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
ca10: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
ca20: 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
ca30: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ca40: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
ca50: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
ca60: 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e  (X)      (((X)->
ca70: 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69  tabFlags & TF_Vi
ca80: 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65  rtual)!=0).#  de
ca90: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
caa0: 75 6d 6e 28 58 29 20 28 28 58 29 2d 3e 69 73 48  umn(X) ((X)->isH
cab0: 69 64 64 65 6e 29 0a 23 65 6c 73 65 0a 23 20 20  idden).#else.#  
cac0: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
cad0: 28 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65  (X)      0.#  de
cae0: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
caf0: 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
cb00: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
cb10: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
cb20: 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
cb30: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
cb40: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
cb50: 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
cb60: 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
cb70: 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
cb80: 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
cb90: 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
cba0: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
cbb0: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
cbc0: 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
cbd0: 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
cbe0: 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
cbf0: 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
cc00: 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
cc10: 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
cc20: 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
cc30: 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
cc40: 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
cc50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
cc60: 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
cc70: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
cc80: 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
cc90: 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
cca0: 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
ccb0: 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
ccc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
ccd0: 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
cce0: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
ccf0: 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
cd00: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
cd10: 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
cd20: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
cd30: 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
cd40: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
cd50: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
cd60: 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
cd70: 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
cd80: 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
cd90: 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
cda0: 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
cdb0: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
cdc0: 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
cdd0: 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
cde0: 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
cdf0: 63 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  cked..*/.struct 
ce00: 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
ce10: 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
ce20: 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
ce30: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
ce40: 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
ce50: 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
ce60: 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
ce70: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20   foreign key in 
ce80: 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
ce90: 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
cea0: 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
ceb0: 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
cec0: 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
ced0: 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
cee0: 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
cef0: 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e  t foreign key on
cf00: 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f   table named zTo
cf10: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
cf20: 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
cf30: 6f 75 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ous foreign key 
cf40: 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a  on table named z
cf50: 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
cf60: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
cf70: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
cf80: 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
cf90: 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
cfa0: 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
cfb0: 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54  eferred;    /* T
cfc0: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
cfd0: 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
cfe0: 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
cff0: 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
d000: 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  on[2];          
d010: 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
d020: 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
d030: 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
d040: 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
d050: 70 54 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a  pTrigger[2];  /*
d060: 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
d070: 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
d080: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
d090: 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e  Map {  /* Mappin
d0a0: 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
d0b0: 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
d0c0: 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
d0d0: 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
d0e0: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
d0f0: 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
d100: 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
d110: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
d120: 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
d130: 2e 20 20 49 66 20 30 20 75 73 65 20 50 52 49 4d  .  If 0 use PRIM
d140: 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
d150: 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f  Col[1];        /
d160: 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
d170: 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
d180: 75 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  umn s */.};../*.
d190: 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
d1a0: 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
d1b0: 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
d1c0: 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
d1d0: 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
d1e0: 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
d1f0: 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
d200: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
d210: 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
d220: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
d230: 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
d240: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
d250: 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
d260: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
d270: 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
d280: 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
d290: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
d2a0: 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
d2b0: 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
d2c0: 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
d2d0: 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
d2e0: 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
d2f0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
d300: 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
d310: 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
d320: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
d330: 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
d340: 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
d350: 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
d360: 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
d370: 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
d380: 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
d390: 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
d3a0: 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
d3b0: 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
d3c0: 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
d3d0: 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
d3e0: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
d3f0: 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
d400: 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
d410: 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
d420: 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
d430: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
d440: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
d450: 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
d460: 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
d470: 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
d480: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
d490: 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
d4a0: 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
d4b0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
d4c0: 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
d4d0: 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
d4e0: 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
d4f0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
d500: 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
d510: 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
d520: 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
d530: 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
d540: 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
d550: 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
d560: 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
d570: 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
d580: 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
d590: 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
d5a0: 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
d5b0: 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
d5c0: 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
d5d0: 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
d5e0: 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
d5f0: 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
d600: 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
d610: 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
d620: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
d630: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
d640: 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
d650: 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
d660: 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
d670: 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
d680: 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
d690: 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
d6a0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
d6b0: 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
d6c0: 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
d6d0: 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
d6e0: 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
d6f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
d700: 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
d710: 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
d720: 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
d730: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
d740: 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
d750: 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
d760: 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
d770: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
d780: 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
d790: 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
d7a0: 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
d7b0: 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
d7c0: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
d7d0: 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
d7e0: 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
d7f0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
d800: 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
d810: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
d820: 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
d830: 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
d840: 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
d850: 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
d860: 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
d870: 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
d880: 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
d890: 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
d8a0: 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
d8b0: 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
d8c0: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
d8d0: 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
d8e0: 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
d8f0: 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
d900: 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
d910: 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
d920: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
d930: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
d940: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
d950: 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
d960: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
d970: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
d980: 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
d990: 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
d9a0: 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
d9b0: 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
d9c0: 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
d9d0: 66 61 75 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f  fault  99  /* Do
d9e0: 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
d9f0: 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
da00: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
da10: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
da20: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
da30: 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
da40: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
da50: 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
da60: 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
da70: 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
da80: 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
da90: 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
daa0: 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
dab0: 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
dac0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
dad0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
dae0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
daf0: 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ion */.  u8 enc;
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
db10: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
db20: 6f 6e 65 20 6f 66 20 74 68 65 20 54 45 58 54 5f  one of the TEXT_
db30: 55 74 66 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  Utf* values */. 
db40: 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
db50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
db60: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
db70: 6c 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ll[] */.  u8 *aS
db80: 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a  ortOrder;     /*
db90: 20 49 66 20 64 65 66 69 6e 65 64 20 61 6e 20 61   If defined an a
dba0: 53 6f 72 74 4f 72 64 65 72 5b 69 5d 20 69 73 20  SortOrder[i] is 
dbb0: 74 72 75 65 2c 20 73 6f 72 74 20 44 45 53 43 20  true, sort DESC 
dbc0: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
dbd0: 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
dbe0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
dbf0: 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
dc00: 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
dc10: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
dc20: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
dc30: 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
dc40: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
dc50: 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20  out a.** single 
dc60: 69 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61  index record tha
dc70: 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
dc80: 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e  en parsed out in
dc90: 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a  to individual.**
dca0: 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41   values..**.** A
dcb0: 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62   record is an ob
dcc0: 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69  ject that contai
dcd0: 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66  ns one or more f
dce0: 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a  ields of data..*
dcf0: 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73  * Records are us
dd00: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
dd10: 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62  content of a tab
dd20: 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74  le row and to st
dd30: 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f  ore.** the key o
dd40: 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62  f an index.  A b
dd50: 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  lob encoding of 
dd60: 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61  a record is crea
dd70: 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50  ted by.** the OP
dd80: 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f  _MakeRecord opco
dd90: 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61  de of the VDBE a
dda0: 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c  nd is disassembl
ddb0: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f  ed by the.** OP_
ddc0: 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a  Column opcode..*
ddd0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
dde0: 75 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ure holds a reco
ddf0: 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
de00: 61 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65  ady been disasse
de10: 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74  mbled.** into it
de20: 73 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69  s constituent fi
de30: 65 6c 64 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  elds..*/.struct 
de40: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
de50: 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
de60: 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
de70: 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
de80: 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
de90: 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
dea0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
deb0: 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
dec0: 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 75 31 36  apMem[] */.  u16
ded0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
dee0: 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 73 65 74 74   /* Boolean sett
def0: 69 6e 67 73 2e 20 20 55 4e 50 41 43 4b 45 44 5f  ings.  UNPACKED_
df00: 2e 2e 2e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  ... below */.  i
df10: 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20  64 rowid;       
df20: 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 55 4e     /* Used by UN
df30: 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45  PACKED_PREFIX_SE
df40: 41 52 43 48 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61  ARCH */.  Mem *a
df50: 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
df60: 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f   Values */.};../
df70: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
df80: 75 65 73 20 6f 66 20 55 6e 70 61 63 6b 65 64 52  ues of UnpackedR
df90: 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a 2f 0a 23  ecord.flags.*/.#
dfa0: 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f  define UNPACKED_
dfb0: 4e 45 45 44 5f 46 52 45 45 20 20 20 20 20 30 78  NEED_FREE     0x
dfc0: 30 30 30 31 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  0001  /* Memory 
dfd0: 69 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 4d  is from sqlite3M
dfe0: 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
dff0: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 4e 45 45 44  ne UNPACKED_NEED
e000: 5f 44 45 53 54 52 4f 59 20 20 30 78 30 30 30 32  _DESTROY  0x0002
e010: 20 20 2f 2a 20 61 70 4d 65 6d 5b 5d 73 20 73 68    /* apMem[]s sh
e020: 6f 75 6c 64 20 61 6c 6c 20 62 65 20 64 65 73 74  ould all be dest
e030: 72 6f 79 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  royed */.#define
e040: 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45   UNPACKED_IGNORE
e050: 5f 52 4f 57 49 44 20 20 30 78 30 30 30 34 20 20  _ROWID  0x0004  
e060: 2f 2a 20 49 67 6e 6f 72 65 20 74 72 61 69 6c 69  /* Ignore traili
e070: 6e 67 20 72 6f 77 69 64 20 6f 6e 20 6b 65 79 31  ng rowid on key1
e080: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41   */.#define UNPA
e090: 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 20 20 20  CKED_INCRKEY    
e0a0: 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 4d 61     0x0008  /* Ma
e0b0: 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e 20 65  ke this key an e
e0c0: 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a 2f  psilon larger */
e0d0: 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45  .#define UNPACKE
e0e0: 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 20 20  D_PREFIX_MATCH  
e0f0: 30 78 30 30 31 30 20 20 2f 2a 20 41 20 70 72 65  0x0010  /* A pre
e100: 66 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e  fix match is con
e110: 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64  sidered OK */.#d
e120: 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50  efine UNPACKED_P
e130: 52 45 46 49 58 5f 53 45 41 52 43 48 20 30 78 30  REFIX_SEARCH 0x0
e140: 30 32 30 20 20 2f 2a 20 41 20 70 72 65 66 69 78  020  /* A prefix
e150: 20 6d 61 74 63 68 20 69 73 20 63 6f 6e 73 69 64   match is consid
e160: 65 72 65 64 20 4f 4b 20 2a 2f 0a 0a 2f 2a 0a 2a  ered OK */../*.*
e170: 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78  * Each SQL index
e180: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
e190: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a  in memory by an.
e1a0: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
e1b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
e1c0: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  ucture..**.** Th
e1d0: 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
e1e0: 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20   table that are 
e1f0: 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72  to be indexed ar
e200: 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62  e described.** b
e210: 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d  y the aiColumn[]
e220: 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73   field of this s
e230: 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65  tructure.  For e
e240: 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a  xample, suppose.
e250: 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66  ** we have the f
e260: 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61  ollowing table a
e270: 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20  nd index:.**.** 
e280: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
e290: 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20   Ex1(c1 int, c2 
e2a0: 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a  int, c3 text);.*
e2b0: 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  *     CREATE IND
e2c0: 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33  EX Ex2 ON Ex1(c3
e2d0: 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ,c1);.**.** In t
e2e0: 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  he Table structu
e2f0: 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78  re describing Ex
e300: 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75  1, nCol==3 becau
e310: 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  se there are.** 
e320: 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  three columns in
e330: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20   the table.  In 
e340: 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74  the Index struct
e350: 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a  ure describing.*
e360: 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d  * Ex2, nColumn==
e370: 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65  2 since 2 of the
e380: 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78   3 columns of Ex
e390: 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a  1 are indexed..*
e3a0: 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  * The value of a
e3b0: 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30  iColumn is {2, 0
e3c0: 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d  }.  aiColumn[0]=
e3d0: 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 20 0a  =2 because the .
e3e0: 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
e3f0: 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
e400: 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
e410: 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
e420: 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
e430: 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
e440: 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
e450: 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
e460: 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
e470: 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
e480: 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
e490: 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
e4a0: 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
e4b0: 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
e4c0: 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
e4d0: 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
e4e0: 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
e4f0: 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
e500: 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
e510: 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
e520: 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
e530: 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
e540: 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
e550: 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
e560: 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
e570: 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
e580: 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
e590: 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
e5a0: 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
e5b0: 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69  ution .** algori
e5c0: 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68  thm to employ wh
e5d0: 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70  enever an attemp
e5e0: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73  t is made to ins
e5f0: 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65  ert a non-unique
e600: 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a  .** element..*/.
e610: 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
e620: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
e630: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
e640: 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  s index */.  int
e650: 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a   nColumn;     /*
e660: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
e670: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
e680: 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
e690: 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43  ex */.  int *aiC
e6a0: 6f 6c 75 6d 6e 3b 20 20 20 2f 2a 20 57 68 69 63  olumn;   /* Whic
e6b0: 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
e6c0: 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
e6d0: 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
e6e0: 20 75 6e 73 69 67 6e 65 64 20 2a 61 69 52 6f 77   unsigned *aiRow
e6f0: 45 73 74 3b 20 2f 2a 20 52 65 73 75 6c 74 20 6f  Est; /* Result o
e700: 66 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  f ANALYZE: Est. 
e710: 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
e720: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
e730: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
e740: 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
e750: 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
e760: 64 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  d */.  int tnum;
e770: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
e780: 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
e790: 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 69 6e  of this index in
e7a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a   database file *
e7b0: 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20  /.  u8 onError; 
e7c0: 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
e7d0: 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
e7e0: 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
e7f0: 6f 6e 65 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f  one */.  u8 auto
e800: 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 54 72 75  Index;    /* Tru
e810: 65 20 69 66 20 69 73 20 61 75 74 6f 6d 61 74 69  e if is automati
e820: 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 28 65  cally created (e
e830: 78 3a 20 62 79 20 55 4e 49 51 55 45 29 20 2a 2f  x: by UNIQUE) */
e840: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
e850: 3b 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65  ;   /* String de
e860: 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
e870: 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
e880: 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
e890: 4e 65 78 74 3b 20 20 20 20 2f 2a 20 54 68 65 20  Next;    /* The 
e8a0: 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63  next index assoc
e8b0: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
e8c0: 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53  ame table */.  S
e8d0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
e8e0: 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
e8f0: 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
e900: 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
e910: 64 65 72 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f  der;  /* Array o
e920: 66 20 73 69 7a 65 20 49 6e 64 65 78 2e 6e 43 6f  f size Index.nCo
e930: 6c 75 6d 6e 2e 20 54 72 75 65 3d 3d 44 45 53 43  lumn. True==DESC
e940: 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
e950: 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
e960: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
e970: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
e980: 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
e990: 78 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  x */.  IndexSamp
e9a0: 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
e9b0: 2f 2a 20 41 72 72 61 79 20 6f 66 20 53 51 4c 49  /* Array of SQLI
e9c0: 54 45 5f 49 4e 44 45 58 5f 53 41 4d 50 4c 45 53  TE_INDEX_SAMPLES
e9d0: 20 73 61 6d 70 6c 65 73 20 2a 2f 0a 7d 3b 0a 0a   samples */.};..
e9e0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c  /*.** Each sampl
e9f0: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
ea00: 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62  sqlite_stat2 tab
ea10: 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  le is represente
ea20: 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  d in memory .** 
ea30: 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72  using a structur
ea40: 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 0a  e of this type..
ea50: 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
ea60: 61 6d 70 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e 20  ample {.  union 
ea70: 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b 20 20  {.    char *z;  
ea80: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69        /* Value i
ea90: 66 20 65 54 79 70 65 20 69 73 20 53 51 4c 49 54  f eType is SQLIT
eaa0: 45 5f 54 45 58 54 20 6f 72 20 53 51 4c 49 54 45  E_TEXT or SQLITE
eab0: 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20 20 64 6f 75  _BLOB */.    dou
eac0: 62 6c 65 20 72 3b 20 20 20 20 20 20 20 2f 2a 20  ble r;       /* 
ead0: 56 61 6c 75 65 20 69 66 20 65 54 79 70 65 20 69  Value if eType i
eae0: 73 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 20 6f  s SQLITE_FLOAT o
eaf0: 72 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52  r SQLITE_INTEGER
eb00: 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20   */.  } u;.  u8 
eb10: 65 54 79 70 65 3b 20 20 20 20 20 20 20 20 20 2f  eType;         /
eb20: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53  * SQLITE_NULL, S
eb30: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e  QLITE_INTEGER ..
eb40: 2e 20 65 74 63 2e 20 2a 2f 0a 20 20 75 38 20 6e  . etc. */.  u8 n
eb50: 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Byte;         /*
eb60: 20 53 69 7a 65 20 69 6e 20 62 79 74 65 20 6f 66   Size in byte of
eb70: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a   text or blob. *
eb80: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
eb90: 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
eba0: 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
ebb0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
ebc0: 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
ebd0: 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
ebe0: 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
ebf0: 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
ec00: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
ec10: 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
ec20: 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
ec30: 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
ec40: 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
ec50: 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
ec60: 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
ec70: 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
ec80: 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
ec90: 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
eca0: 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
ecb0: 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
ecc0: 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
ecd0: 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
ece0: 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
ecf0: 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
ed00: 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
ed10: 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
ed20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
ed30: 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
ed40: 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
ed50: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
ed60: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
ed70: 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
ed80: 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
ed90: 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
eda0: 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
edb0: 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
edc0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
edd0: 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
ede0: 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
edf0: 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
ee00: 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
ee10: 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
ee20: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
ee30: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
ee40: 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
ee50: 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
ee60: 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
ee70: 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
ee80: 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
ee90: 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
eea0: 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
eeb0: 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
eec0: 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
eed0: 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
eee0: 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
eef0: 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
ef00: 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
ef10: 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
ef20: 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
ef30: 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
ef40: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
ef50: 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
ef60: 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
ef70: 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
ef80: 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
ef90: 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
efa0: 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
efb0: 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
efc0: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
efd0: 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
efe0: 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
eff0: 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f010: 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
f020: 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
f030: 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
f040: 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
f050: 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
f060: 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
f070: 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
f080: 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
f090: 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0b0: 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
f0c0: 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
f0d0: 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
f0e0: 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
f0f0: 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
f100: 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
f110: 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ndex */.  ExprLi
f120: 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
f130: 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
f140: 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e  y clause */.  in
f150: 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e  t nSortingColumn
f160: 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
f170: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
f180: 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
f190: 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
f1a0: 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
f1b0: 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
f1c0: 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
f1d0: 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
f1e0: 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
f1f0: 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
f200: 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
f210: 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
f220: 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
f230: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
f240: 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
f250: 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
f260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
f270: 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
f280: 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
f290: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
f2a0: 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
f2b0: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
f2c0: 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
f2d0: 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
f2e0: 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
f2f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
f300: 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
f310: 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
f320: 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
f330: 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
f340: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
f350: 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
f360: 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
f370: 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
f380: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f390: 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
f3a0: 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
f3b0: 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 41 6c 6c    int nColumnAll
f3c0: 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  oc;       /* Num
f3d0: 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c  ber of slots all
f3e0: 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 5b  ocated for aCol[
f3f0: 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
f400: 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
f410: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
f420: 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
f430: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
f440: 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
f460: 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
f470: 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
f480: 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
f490: 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
f4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
f4b0: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
f4c0: 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
f4d0: 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
f4e0: 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
f4f0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
f500: 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
f510: 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
f520: 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
f530: 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
f540: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
f550: 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
f560: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
f570: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
f580: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
f590: 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
f5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f5b0: 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
f5c0: 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
f5d0: 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
f5e0: 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
f5f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
f600: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
f610: 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
f620: 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
f630: 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
f640: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
f650: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
f660: 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
f670: 2f 0a 20 20 69 6e 74 20 6e 46 75 6e 63 41 6c 6c  /.  int nFuncAll
f680: 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  oc;         /* N
f690: 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
f6a0: 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 46 75  llocated for aFu
f6b0: 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nc[] */.};../*.*
f6c0: 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79  * The datatype y
f6d0: 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64  nVar is a signed
f6e0: 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72   integer, either
f6f0: 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69   16-bit or 32-bi
f700: 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74  t..** Usually it
f710: 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75   is 16-bits.  Bu
f720: 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  t if SQLITE_MAX_
f730: 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20  VARIABLE_NUMBER 
f740: 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68  is greater.** th
f750: 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65  an 32767 we have
f760: 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62   to make it 32-b
f770: 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70  it.  16-bit is p
f780: 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65  referred because
f790: 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73  .** it uses less
f7a0: 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45   memory in the E
f7b0: 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63  xpr object, whic
f7c0: 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72  h is a big memor
f7d0: 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73  y user.** in sys
f7e0: 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f  tems with lots o
f7f0: 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  f prepared state
f800: 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20  ments.  And few 
f810: 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20  applications.** 
f820: 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61  need more than a
f830: 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61  bout 10 or 20 va
f840: 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f  riables.  But so
f850: 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73  me extreme users
f860: 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65   want.** to have
f870: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
f880: 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33  ents with over 3
f890: 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20  2767 variables, 
f8a0: 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20  and for them.** 
f8b0: 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76  the option is av
f8c0: 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70  ailable (at comp
f8d0: 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69  ile-time)..*/.#i
f8e0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
f8f0: 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32  IABLE_NUMBER<=32
f900: 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20  767.typedef i16 
f910: 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70  ynVar;.#else.typ
f920: 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a  edef int ynVar;.
f930: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
f940: 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78  ch node of an ex
f950: 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
f960: 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e  parse tree is an
f970: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
f980: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
f990: 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73  **.** Expr.op is
f9a0: 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65   the opcode. The
f9b0: 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20   integer parser 
f9c0: 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20  token codes are 
f9d0: 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63  reused.** as opc
f9e0: 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65  odes here. For e
f9f0: 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73  xample, the pars
fa00: 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45  er defines TK_GE
fa10: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
fa20: 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73  r.** code repres
fa30: 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20  enting the ">=" 
fa40: 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73  operator. This s
fa50: 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65  ame integer code
fa60: 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f   is reused.** to
fa70: 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67   represent the g
fa80: 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65  reater-than-or-e
fa90: 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72  qual-to operator
faa0: 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
fab0: 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a  on.** tree..**.*
fac0: 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
fad0: 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69  ion is an SQL li
fae0: 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45  teral (TK_INTEGE
faf0: 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f  R, TK_FLOAT, TK_
fb00: 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f  BLOB, .** or TK_
fb10: 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
fb20: 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
fb30: 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
fb40: 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
fb50: 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
fb60: 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
fb70: 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
fb80: 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
fb90: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a   contains the .*
fba0: 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  * variable name.
fbb0: 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65   Finally, if the
fbc0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
fbd0: 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28  n SQL function (
fbe0: 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a  TK_FUNCTION),.**
fbf0: 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
fc00: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
fc10: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
fc20: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  on..**.** Expr.p
fc30: 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
fc40: 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66  Left are the lef
fc50: 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65  t and right sube
fc60: 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a  xpressions of a.
fc70: 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ** binary operat
fc80: 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f  or. Either or bo
fc90: 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a  th may be NULL..
fca0: 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69  **.** Expr.x.pLi
fcb0: 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  st is a list of 
fcc0: 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65  arguments if the
fcd0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
fce0: 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a  n SQL function,.
fcf0: 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73  ** a CASE expres
fd00: 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78  sion or an IN ex
fd10: 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
fd20: 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
fd30: 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a  <y>, <z>...)"..*
fd40: 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  * Expr.x.pSelect
fd50: 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20   is used if the 
fd60: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
fd70: 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e  sub-select or an
fd80: 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a   expression of.*
fd90: 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  * the form "<lhs
fda0: 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e  > IN (SELECT ...
fdb0: 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49  )". If the EP_xI
fdc0: 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73  sSelect bit is s
fdd0: 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  et in the.** Exp
fde0: 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
fdf0: 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  en Expr.x.pSelec
fe00: 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65  t is valid. Othe
fe10: 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c  rwise, Expr.x.pL
fe20: 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64  ist is .** valid
fe30: 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
fe40: 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
fe50: 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
fe60: 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
fe70: 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
fe80: 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
fe90: 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
fea0: 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
feb0: 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
fec0: 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
fed0: 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
fee0: 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
fef0: 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
ff00: 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
ff10: 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
ff20: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
ff30: 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
ff40: 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
ff50: 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
ff60: 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
ff70: 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
ff80: 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
ff90: 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
ffa0: 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
ffb0: 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
ffc0: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
ffd0: 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
ffe0: 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
fff0: 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
10000 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
10010 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
10020 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10030 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
10040 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
10050 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  a question mark 
10060 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f  .** character '?
10070 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
10080 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20  l SQL) then the 
10090 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64  Expr.iTable hold
100a0 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  s the index .** 
100b0 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
100c0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
100d0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
100e0 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
100f0 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
10100 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
10110 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
10120 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
10130 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
10140 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
10150 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
10160 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
10170 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
10180 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
10190 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
101a0 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
101b0 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
101c0 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
101d0 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
101e0 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
101f0 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
10200 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
10210 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
10220 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
10230 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
10240 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
10250 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
10260 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
10270 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
10280 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
10290 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
102a0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
102b0 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
102c0 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
102d0 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
102e0 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
102f0 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
10300 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
10310 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
10320 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
10330 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
10340 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
10350 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
10360 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
10370 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
10380 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
10390 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
103a0 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
103b0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
103c0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
103d0 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
103e0 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
103f0 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
10400 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
10410 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
10420 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
10430 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
10440 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
10450 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
10460 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
10470 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
10480 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
10490 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
104a0 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
104b0 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
104c0 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
104d0 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
104e0 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
104f0 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
10500 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
10510 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
10520 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
10530 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
10540 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
10550 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
10560 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
10570 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
10580 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
10590 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
105a0 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
105b0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
105c0 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
105d0 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
105e0 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
105f0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
10600 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
10610 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
10620 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
10630 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
10640 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
10650 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
10660 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
10670 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20  column */.  u16 
10680 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
10690 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
106a0 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
106b0 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
106c0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
106d0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
106e0 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
106f0 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
10700 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
10710 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
10720 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
10730 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
10740 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
10750 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
10760 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
10770 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
10780 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
10790 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
107a0 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
107b0 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
107c0 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
107d0 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
107e0 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
107f0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
10800 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
10810 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a  function. .  ***
10820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10860 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65  **/..  Expr *pLe
10870 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ft;           /*
10880 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f   Left subnode */
10890 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b  .  Expr *pRight;
108a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67            /* Rig
108b0 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ht subnode */.  
108c0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72  union {.    Expr
108d0 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
108e0 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 61 72 67   /* Function arg
108f0 75 6d 65 6e 74 73 20 6f 72 20 69 6e 20 22 3c 65  uments or in "<e
10900 78 70 72 3e 20 49 4e 20 28 3c 65 78 70 72 2d 6c  xpr> IN (<expr-l
10910 69 73 74 29 22 20 2a 2f 0a 20 20 20 20 53 65 6c  ist)" */.    Sel
10920 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
10930 20 20 2f 2a 20 55 73 65 64 20 66 6f 72 20 73 75    /* Used for su
10940 62 2d 73 65 6c 65 63 74 73 20 61 6e 64 20 22 3c  b-selects and "<
10950 65 78 70 72 3e 20 49 4e 20 28 3c 73 65 6c 65 63  expr> IN (<selec
10960 74 3e 29 22 20 2a 2f 0a 20 20 7d 20 78 3b 0a 20  t>)" */.  } x;. 
10970 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
10980 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 63          /* The c
10990 6f 6c 6c 61 74 69 6f 6e 20 74 79 70 65 20 6f 66  ollation type of
109a0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
109b0 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   */..  /* If the
109c0 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
109d0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
109e0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
109f0 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
10a00 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
10a10 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
10a20 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
10a30 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
10a40 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
10a50 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
10a60 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
10a70 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
10a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10ab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10ac0 2a 2f 0a 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  */..  int iTable
10ad0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10ae0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
10af0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
10b00 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
10b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
10b30 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
10b40 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
10b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b60 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
10b70 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
10b80 20 6f 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20   old */.  ynVar 
10b90 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
10ba0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
10bb0 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
10bc0 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10be0 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
10bf0 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
10c00 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
10c10 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  1). */.  i16 iAg
10c20 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
10c30 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
10c40 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
10c50 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
10c60 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
10c70 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
10c80 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
10c90 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
10ca0 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
10cb0 75 38 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20  u8 flags2;      
10cc0 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64         /* Second
10cd0 20 73 65 74 20 6f 66 20 66 6c 61 67 73 2e 20 20   set of flags.  
10ce0 45 50 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20  EP2_... */.  u8 
10cf0 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
10d00 20 20 20 20 2f 2a 20 49 66 20 61 20 54 4b 5f 52      /* If a TK_R
10d10 45 47 49 53 54 45 52 2c 20 74 68 65 20 6f 72 69  EGISTER, the ori
10d20 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
10d30 78 70 72 2e 6f 70 20 2a 2f 0a 20 20 41 67 67 49  xpr.op */.  AggI
10d40 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
10d50 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
10d60 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
10d70 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
10d80 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
10d90 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
10da0 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
10db0 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
10dc0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
10dd0 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
10de0 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
10df0 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
10e00 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
10e10 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
10e20 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  e */.#endif.};..
10e30 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
10e40 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
10e50 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
10e60 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
10e70 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
10e80 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30   EP_FromJoin   0
10e90 78 30 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e  x0001  /* Origin
10ea0 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53  ated in ON or US
10eb0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
10ec0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
10ed0 45 50 5f 41 67 67 20 20 20 20 20 20 20 20 30 78  EP_Agg        0x
10ee0 30 30 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0002  /* Contain
10ef0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
10f00 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10f10 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
10f20 52 65 73 6f 6c 76 65 64 20 20 20 30 78 30 30 30  Resolved   0x000
10f30 34 20 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  4  /* IDs have b
10f40 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
10f50 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
10f60 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
10f70 20 30 78 30 30 30 38 20 20 2f 2a 20 45 78 70 72   0x0008  /* Expr
10f80 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
10f90 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
10fa0 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
10fb0 5f 44 69 73 74 69 6e 63 74 20 20 20 30 78 30 30  _Distinct   0x00
10fc0 31 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  10  /* Aggregate
10fd0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
10fe0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
10ff0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
11000 72 53 65 6c 65 63 74 20 20 30 78 30 30 32 30 20  rSelect  0x0020 
11010 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
11020 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
11030 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
11040 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
11050 20 30 78 30 30 34 30 20 20 2f 2a 20 74 6f 6b 65   0x0040  /* toke
11060 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
11070 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
11080 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
11090 75 6e 63 20 20 30 78 30 30 38 30 20 20 2f 2a 20  unc  0x0080  /* 
110a0 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
110b0 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
110c0 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
110d0 64 65 66 69 6e 65 20 45 50 5f 45 78 70 43 6f 6c  define EP_ExpCol
110e0 6c 61 74 65 20 30 78 30 31 30 30 20 20 2f 2a 20  late 0x0100  /* 
110f0 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
11100 63 65 20 73 70 65 63 69 66 69 65 64 20 65 78 70  ce specified exp
11110 6c 69 63 69 74 6c 79 20 2a 2f 0a 23 64 65 66 69  licitly */.#defi
11120 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73 74 20  ne EP_FixedDest 
11130 20 30 78 30 32 30 30 20 20 2f 2a 20 52 65 73 75   0x0200  /* Resu
11140 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61 20 73  lt needed in a s
11150 70 65 63 69 66 69 63 20 72 65 67 69 73 74 65 72  pecific register
11160 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
11170 6e 74 56 61 6c 75 65 20 20 20 30 78 30 34 30 30  ntValue   0x0400
11180 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
11190 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ue contained in 
111a0 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66  u.iValue */.#def
111b0 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  ine EP_xIsSelect
111c0 20 20 30 78 30 38 30 30 20 20 2f 2a 20 78 2e 70    0x0800  /* x.p
111d0 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20  Select is valid 
111e0 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69  (otherwise x.pLi
111f0 73 74 20 69 73 29 20 2a 2f 0a 0a 23 64 65 66 69  st is) */..#defi
11200 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
11210 20 30 78 31 30 30 30 20 20 2f 2a 20 45 78 70 72   0x1000  /* Expr
11220 20 73 74 72 75 63 74 20 69 73 20 45 58 50 52 5f   struct is EXPR_
11230 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
11240 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
11250 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20  e EP_TokenOnly  
11260 30 78 32 30 30 30 20 20 2f 2a 20 45 78 70 72 20  0x2000  /* Expr 
11270 73 74 72 75 63 74 20 69 73 20 45 58 50 52 5f 54  struct is EXPR_T
11280 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74  OKENONLYSIZE byt
11290 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  es only */.#defi
112a0 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20  ne EP_Static    
112b0 20 30 78 34 30 30 30 20 20 2f 2a 20 48 65 6c 64   0x4000  /* Held
112c0 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f   in memory not o
112d0 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c  btained from mal
112e0 6c 6f 63 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  loc() */../*.** 
112f0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
11300 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
11310 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
11320 70 72 2e 66 6c 61 67 73 32 20 66 69 65 6c 64 2e  pr.flags2 field.
11330 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 32 5f  .*/.#define EP2_
11340 4d 61 6c 6c 6f 63 65 64 54 6f 6b 65 6e 20 20 30  MallocedToken  0
11350 78 30 30 30 31 20 20 2f 2a 20 4e 65 65 64 20 74  x0001  /* Need t
11360 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  o sqlite3DbFree(
11370 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f  ) Expr.zToken */
11380 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 49 72 72  .#define EP2_Irr
11390 65 64 75 63 69 62 6c 65 20 20 20 20 30 78 30 30  educible    0x00
113a0 30 32 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58  02  /* Cannot EX
113b0 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69  PRDUP_REDUCE thi
113c0 73 20 45 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  s Expr */../*.**
113d0 20 54 68 65 20 70 73 65 75 64 6f 2d 72 6f 75 74   The pseudo-rout
113e0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 53  ine sqlite3ExprS
113f0 65 74 49 72 72 65 64 75 63 69 62 6c 65 20 73 65  etIrreducible se
11400 74 73 20 74 68 65 20 45 50 32 5f 49 72 72 65 64  ts the EP2_Irred
11410 75 63 69 62 6c 65 0a 2a 2a 20 66 6c 61 67 20 6f  ucible.** flag o
11420 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
11430 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 69 73  structure.  This
11440 20 66 6c 61 67 20 69 73 20 75 73 65 64 20 66 6f   flag is used fo
11450 72 20 56 56 26 41 20 6f 6e 6c 79 2e 20 20 54 68  r VV&A only.  Th
11460 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 69 73 20  e.** routine is 
11470 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  implemented as a
11480 20 6d 61 63 72 6f 20 74 68 61 74 20 6f 6e 6c 79   macro that only
11490 20 77 6f 72 6b 73 20 77 68 65 6e 20 69 6e 20 64   works when in d
114a0 65 62 75 67 67 69 6e 67 20 6d 6f 64 65 2c 0a 2a  ebugging mode,.*
114b0 2a 20 73 6f 20 61 73 20 6e 6f 74 20 74 6f 20 62  * so as not to b
114c0 75 72 64 65 6e 20 70 72 6f 64 75 63 74 69 6f 6e  urden production
114d0 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 64 65 66   code..*/.#ifdef
114e0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
114f0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 49 72  define ExprSetIr
11500 72 65 64 75 63 69 62 6c 65 28 58 29 20 20 28 58  reducible(X)  (X
11510 29 2d 3e 66 6c 61 67 73 32 20 7c 3d 20 45 50 32  )->flags2 |= EP2
11520 5f 49 72 72 65 64 75 63 69 62 6c 65 0a 23 65 6c  _Irreducible.#el
11530 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  se.# define Expr
11540 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 28 58  SetIrreducible(X
11550 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
11560 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
11570 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
11580 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
11590 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
115a0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
115b0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
115c0 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
115d0 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
115e0 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
115f0 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6e 79  efine ExprHasAny
11600 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
11610 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
11620 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
11630 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
11640 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
11650 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
11660 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
11670 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
11680 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 4d  s&=~(P)../*.** M
11690 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
116a0 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ne the number of
116b0 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20   bytes required 
116c0 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72  by a normal Expr
116d0 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20   .** struct, an 
116e0 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
116f0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
11700 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72  flag set in Expr
11710 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61  .flags .** and a
11720 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
11730 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  th the EP_TokenO
11740 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f  nly flag set..*/
11750 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55  .#define EXPR_FU
11760 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  LLSIZE          
11770 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20   sizeof(Expr)   
11780 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
11790 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  size */.#define 
117a0 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
117b0 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66          offsetof
117c0 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f  (Expr,iTable)  /
117d0 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65  * Common feature
117e0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  s */.#define EXP
117f0 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
11800 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
11810 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46  pr,pLeft)   /* F
11820 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f  ewer features */
11830 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61  ../*.** Flags pa
11840 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69  ssed to the sqli
11850 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e  te3ExprDup() fun
11860 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68  ction. See the h
11870 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a  eader comment .*
11880 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
11890 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
118a0 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
118b0 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
118c0 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
118d0 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
118e0 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
118f0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
11900 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
11910 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
11920 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
11930 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
11940 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
11950 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
11960 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
11970 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
11980 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
11990 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
119a0 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
119b0 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
119c0 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
119d0 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
119e0 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
119f0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
11a00 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
11a10 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
11a20 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
11a30 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
11a40 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
11a50 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
11a60 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
11a70 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
11a80 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
11a90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11aa0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
11ab0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69   the list */.  i
11ac0 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  nt nAlloc;      
11ad0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11ae0 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
11af0 61 74 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  ated below */.  
11b00 69 6e 74 20 69 45 43 75 72 73 6f 72 3b 20 20 20  int iECursor;   
11b10 20 20 20 20 20 20 20 2f 2a 20 56 44 42 45 20 43         /* VDBE C
11b20 75 72 73 6f 72 20 61 73 73 6f 63 69 61 74 65 64  ursor associated
11b30 20 77 69 74 68 20 74 68 69 73 20 45 78 70 72 4c   with this ExprL
11b40 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ist */.  struct 
11b50 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  ExprList_item {.
11b60 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
11b70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11b80 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
11b90 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
11ba0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
11bb0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73      /* Token ass
11bc0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
11bd0 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
11be0 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b      char *zSpan;
11bf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
11c00 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
11c10 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
11c20 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
11c30 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  r;          /* 1
11c40 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
11c50 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 38  or ASC */.    u8
11c60 20 64 6f 6e 65 3b 20 20 20 20 20 20 20 20 20 20   done;          
11c70 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74       /* A flag t
11c80 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20  o indicate when 
11c90 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69  processing is fi
11ca0 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 31  nished */.    u1
11cb0 36 20 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 iCol;         
11cc0 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
11cd0 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
11ce0 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
11cf0 74 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 41 6c  t */.    u16 iAl
11d00 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
11d10 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
11d20 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
11d30 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
11d40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11d50 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
11d60 66 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  for each express
11d70 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
11d80 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
11d90 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
11da0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
11db0 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
11dc0 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
11dd0 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
11de0 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
11df0 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
11e00 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
11e10 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
11e20 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
11e30 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
11e40 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
11e50 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
11e60 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
11e70 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
11e80 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
11e90 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
11ea0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
11eb0 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
11ec0 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
11ed0 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
11ee0 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
11ef0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
11f00 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
11f10 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
11f20 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
11f30 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
11f40 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
11f50 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
11f60 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
11f70 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
11f80 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
11f90 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
11fa0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
11fb0 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
11fc0 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
11fd0 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
11fe0 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
11ff0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
12000 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
12010 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
12020 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
12030 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
12040 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
12050 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
12060 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
12070 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
12080 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
12090 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
120a0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
120b0 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
120c0 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
120d0 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
120e0 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
120f0 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
12100 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
12110 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
12120 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
12130 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
12140 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
12150 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
12160 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
12170 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
12180 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
12190 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
121a0 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
121b0 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
121c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
121d0 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
121e0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
121f0 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20    int nAlloc;   
12200 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12210 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
12220 64 20 66 6f 72 20 61 5b 5d 20 62 65 6c 6f 77 20  d for a[] below 
12230 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
12240 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
12250 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
12260 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
12270 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
12280 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
12290 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
122a0 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
122b0 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
122c0 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
122d0 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
122e0 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
122f0 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
12300 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
12310 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
12320 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
12330 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70   on ix86..*/.typ
12340 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
12350 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  ;../*.** The num
12360 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
12370 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
12380 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
12390 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
123a0 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
123b0 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
123c0 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
123d0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
123e0 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
123f0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
12400 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
12410 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
12420 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
12430 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
12440 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
12450 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
12460 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
12470 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
12480 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
12490 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
124a0 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
124b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
124c0 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
124d0 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
124e0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
124f0 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
12500 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
12510 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
12520 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
12530 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
12540 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
12550 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
12560 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
12570 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
12580 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
12590 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
125a0 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
125b0 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
125c0 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
125d0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
125e0 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
125f0 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
12600 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
12610 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
12620 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
12630 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
12640 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
12650 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
12660 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
12670 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
12680 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
12690 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
126a0 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
126b0 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
126c0 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
126d0 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
126e0 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
126f0 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
12700 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
12710 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e   table..**.** In
12720 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65   the colUsed fie
12730 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ld, the high-ord
12740 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20  er bit (bit 63) 
12750 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61  is set if the ta
12760 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ble.** contains 
12770 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c  more than 63 col
12780 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d  umns and the 64-
12790 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75  th or later colu
127a0 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73  mn is used..*/.s
127b0 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
127c0 20 20 69 31 36 20 6e 53 72 63 3b 20 20 20 20 20    i16 nSrc;     
127d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
127e0 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
127f0 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
12800 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 31 36   clause */.  i16
12810 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a   nAlloc;      /*
12820 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
12830 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  es allocated in 
12840 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73  a[] below */.  s
12850 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
12860 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
12870 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
12880 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
12890 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
128a0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
128b0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
128c0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
128d0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
128e0 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
128f0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
12900 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
12910 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
12920 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
12930 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
12940 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
12950 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
12960 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
12970 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
12980 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
12990 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
129a0 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
129b0 0a 20 20 20 20 75 38 20 69 73 50 6f 70 75 6c 61  .    u8 isPopula
129c0 74 65 64 3b 20 20 20 2f 2a 20 54 65 6d 70 6f 72  ted;   /* Tempor
129d0 61 72 79 20 74 61 62 6c 65 20 61 73 73 6f 63 69  ary table associ
129e0 61 74 65 64 20 77 69 74 68 20 53 45 4c 45 43 54  ated with SELECT
129f0 20 69 73 20 70 6f 70 75 6c 61 74 65 64 20 2a 2f   is populated */
12a00 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65  .    u8 jointype
12a10 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
12a20 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
12a30 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65  his able and the
12a40 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
12a50 20 75 38 20 6e 6f 74 49 6e 64 65 78 65 64 3b 20   u8 notIndexed; 
12a60 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
12a70 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44  ere is a NOT IND
12a80 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20  EXED clause */. 
12a90 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20     int iCursor; 
12aa0 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
12ab0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75   cursor number u
12ac0 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
12ad0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
12ae0 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20  Expr *pOn;      
12af0 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75    /* The ON clau
12b00 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
12b10 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69      IdList *pUsi
12b20 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49  ng;   /* The USI
12b30 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
12b40 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61  oin */.    Bitma
12b50 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20  sk colUsed;  /* 
12b60 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74  Bit N (1<<N) set
12b70 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20   if column N of 
12b80 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a  pTab is used */.
12b90 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78      char *zIndex
12ba0 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66  ;     /* Identif
12bb0 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45  ier from "INDEXE
12bc0 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63  D BY <zIndex>" c
12bd0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64  lause */.    Ind
12be0 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f  ex *pIndex;    /
12bf0 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  * Index structur
12c00 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
12c10 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e  to zIndex, if an
12c20 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  y */.  } a[1];  
12c30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
12c40 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
12c50 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74   identifier on t
12c60 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
12c70 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76  *.** Permitted v
12c80 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63  alues of the Src
12c90 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20  List.a.jointype 
12ca0 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65  field.*/.#define
12cb0 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78   JT_INNER     0x
12cc0 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b  0001    /* Any k
12cd0 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20  ind of inner or 
12ce0 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64  cross join */.#d
12cf0 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20  efine JT_CROSS  
12d00 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
12d10 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20  Explicit use of 
12d20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72  the CROSS keywor
12d30 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d */.#define JT_
12d40 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34  NATURAL   0x0004
12d50 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
12d60 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e  a "natural" join
12d70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c   */.#define JT_L
12d80 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20  EFT      0x0008 
12d90 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72     /* Left outer
12da0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
12db0 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78   JT_RIGHT     0x
12dc0 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74  0010    /* Right
12dd0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
12de0 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20  define JT_OUTER 
12df0 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
12e00 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79   The "OUTER" key
12e10 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20  word is present 
12e20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52  */.#define JT_ER
12e30 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20  ROR     0x0040  
12e40 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20    /* unknown or 
12e50 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e  unsupported join
12e60 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a   type */.../*.**
12e70 20 41 20 57 68 65 72 65 50 6c 61 6e 20 6f 62 6a   A WherePlan obj
12e80 65 63 74 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ect holds inform
12e90 61 74 69 6f 6e 20 74 68 61 74 20 64 65 73 63 72  ation that descr
12ea0 69 62 65 73 20 61 20 6c 6f 6f 6b 75 70 0a 2a 2a  ibes a lookup.**
12eb0 20 73 74 72 61 74 65 67 79 2e 0a 2a 2a 0a 2a 2a   strategy..**.**
12ec0 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   This object is 
12ed0 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 6f  intended to be o
12ee0 70 61 71 75 65 20 6f 75 74 73 69 64 65 20 6f 66  paque outside of
12ef0 20 74 68 65 20 77 68 65 72 65 2e 63 20 6d 6f 64   the where.c mod
12f00 75 6c 65 2e 0a 2a 2a 20 49 74 20 69 73 20 69 6e  ule..** It is in
12f10 63 6c 75 64 65 64 20 68 65 72 65 20 6f 6e 6c 79  cluded here only
12f20 20 73 6f 20 74 68 61 74 20 74 68 61 74 20 63 6f   so that that co
12f30 6d 70 69 6c 65 72 20 77 69 6c 6c 20 6b 6e 6f 77  mpiler will know
12f40 20 68 6f 77 20 62 69 67 20 69 74 0a 2a 2a 20 69   how big it.** i
12f50 73 2e 20 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20  s.  None of the 
12f60 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73 20 6f  fields in this o
12f70 62 6a 65 63 74 20 73 68 6f 75 6c 64 20 62 65 20  bject should be 
12f80 75 73 65 64 20 6f 75 74 73 69 64 65 20 6f 66 0a  used outside of.
12f90 2a 2a 20 74 68 65 20 77 68 65 72 65 2e 63 20 6d  ** the where.c m
12fa0 6f 64 75 6c 65 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  odule..**.** Wit
12fb0 68 69 6e 20 74 68 65 20 75 6e 69 6f 6e 2c 20 70  hin the union, p
12fc0 49 64 78 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  Idx is only used
12fd0 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26 57 48   when wsFlags&WH
12fe0 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20 74  ERE_INDEXED is t
12ff0 72 75 65 2e 0a 2a 2a 20 70 54 65 72 6d 20 69 73  rue..** pTerm is
13000 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20   only used when 
13010 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 4d 55  wsFlags&WHERE_MU
13020 4c 54 49 5f 4f 52 20 69 73 20 74 72 75 65 2e 20  LTI_OR is true. 
13030 20 41 6e 64 20 70 56 74 61 62 49 64 78 0a 2a 2a   And pVtabIdx.**
13040 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68   is only used wh
13050 65 6e 20 77 73 46 6c 61 67 73 26 57 48 45 52 45  en wsFlags&WHERE
13060 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 69 73  _VIRTUALTABLE is
13070 20 74 72 75 65 2e 20 20 49 74 20 69 73 20 6e 65   true.  It is ne
13080 76 65 72 20 74 68 65 0a 2a 2a 20 63 61 73 65 20  ver the.** case 
13090 74 68 61 74 20 6d 6f 72 65 20 74 68 61 6e 20 6f  that more than o
130a0 6e 65 20 6f 66 20 74 68 65 73 65 20 63 6f 6e 64  ne of these cond
130b0 69 74 69 6f 6e 73 20 69 73 20 74 72 75 65 2e 0a  itions is true..
130c0 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72 65 50  */.struct WhereP
130d0 6c 61 6e 20 7b 0a 20 20 75 33 32 20 77 73 46 6c  lan {.  u32 wsFl
130e0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
130f0 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 5f         /* WHERE_
13100 2a 20 66 6c 61 67 73 20 74 68 61 74 20 64 65 73  * flags that des
13110 63 72 69 62 65 20 74 68 65 20 73 74 72 61 74 65  cribe the strate
13120 67 79 20 2a 2f 0a 20 20 75 33 32 20 6e 45 71 3b  gy */.  u32 nEq;
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13150 20 6f 66 20 3d 3d 20 63 6f 6e 73 74 72 61 69 6e   of == constrain
13160 74 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ts */.  union {.
13170 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13190 20 20 20 2f 2a 20 49 6e 64 65 78 20 77 68 65 6e     /* Index when
131a0 20 57 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69   WHERE_INDEXED i
131b0 73 20 74 72 75 65 20 2a 2f 0a 20 20 20 20 73 74  s true */.    st
131c0 72 75 63 74 20 57 68 65 72 65 54 65 72 6d 20 2a  ruct WhereTerm *
131d0 70 54 65 72 6d 3b 20 20 20 20 20 20 20 2f 2a 20  pTerm;       /* 
131e0 57 48 45 52 45 20 63 6c 61 75 73 65 20 74 65 72  WHERE clause ter
131f0 6d 20 66 6f 72 20 4f 52 2d 73 65 61 72 63 68 20  m for OR-search 
13200 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69  */.    sqlite3_i
13210 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 56 74 61 62  ndex_info *pVtab
13220 49 64 78 3b 20 20 2f 2a 20 56 69 72 74 75 61 6c  Idx;  /* Virtual
13230 20 74 61 62 6c 65 20 69 6e 64 65 78 20 74 6f 20   table index to 
13240 75 73 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  use */.  } u;.};
13250 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68  ../*.** For each
13260 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20   nested loop in 
13270 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
13280 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
13290 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20  he WhereInfo.** 
132a0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
132b0 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  ns a single inst
132c0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
132d0 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 73 74  ucture.  This st
132e0 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e  ructure.** is in
132f0 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72 69  tended to be pri
13300 76 61 74 65 20 74 68 65 20 74 68 65 20 77 68 65  vate the the whe
13310 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20  re.c module and 
13320 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a  should not be.**
13330 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64 69 66   access or modif
13340 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64  ied by other mod
13350 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ules..**.** The 
13360 70 49 64 78 49 6e 66 6f 20 66 69 65 6c 64 20 69  pIdxInfo field i
13370 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 70  s used to help p
13380 69 63 6b 20 74 68 65 20 62 65 73 74 20 69 6e 64  ick the best ind
13390 65 78 20 6f 6e 20 61 0a 2a 2a 20 76 69 72 74 75  ex on a.** virtu
133a0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20 70  al table.  The p
133b0 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20  IdxInfo pointer 
133c0 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78 69 6e  contains indexin
133d0 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  g.** information
133e0 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61   for the i-th ta
133f0 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ble in the FROM 
13400 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20 72 65  clause before re
13410 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c  ordering..** All
13420 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f   the pIdxInfo po
13430 69 6e 74 65 72 73 20 61 72 65 20 66 72 65 65 64  inters are freed
13440 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46 72 65   by whereInfoFre
13450 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a  e() in where.c..
13460 2a 2a 20 41 6c 6c 20 6f 74 68 65 72 20 69 6e 66  ** All other inf
13470 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20  ormation in the 
13480 69 2d 74 68 20 57 68 65 72 65 4c 65 76 65 6c 20  i-th WhereLevel 
13490 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 69  object for the i
134a0 2d 74 68 20 74 61 62 6c 65 0a 2a 2a 20 61 66 74  -th table.** aft
134b0 65 72 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  er FROM clause o
134c0 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75  rdering..*/.stru
134d0 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a  ct WhereLevel {.
134e0 20 20 57 68 65 72 65 50 6c 61 6e 20 70 6c 61 6e    WherePlan plan
134f0 3b 20 20 20 20 20 20 20 2f 2a 20 71 75 65 72 79  ;       /* query
13500 20 70 6c 61 6e 20 66 6f 72 20 74 68 69 73 20 65   plan for this e
13510 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 46 52  lement of the FR
13520 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69  OM clause */.  i
13530 6e 74 20 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20  nt iLeftJoin;   
13540 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63       /* Memory c
13550 65 6c 6c 20 75 73 65 64 20 74 6f 20 69 6d 70 6c  ell used to impl
13560 65 6d 65 6e 74 20 4c 45 46 54 20 4f 55 54 45 52  ement LEFT OUTER
13570 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74 20 69   JOIN */.  int i
13580 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20 20  TabCur;         
13590 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
135a0 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  sor used to acce
135b0 73 73 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ss the table */.
135c0 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20    int iIdxCur;  
135d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
135e0 44 42 45 20 63 75 72 73 6f 72 20 75 73 65 64 20  DBE cursor used 
135f0 74 6f 20 61 63 63 65 73 73 20 70 49 64 78 20 2a  to access pIdx *
13600 2f 0a 20 20 69 6e 74 20 61 64 64 72 42 72 6b 3b  /.  int addrBrk;
13610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
13620 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20  p here to break 
13630 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  out of the loop 
13640 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4e 78 74  */.  int addrNxt
13650 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75  ;          /* Ju
13660 6d 70 20 68 65 72 65 20 74 6f 20 73 74 61 72 74  mp here to start
13670 20 74 68 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d   the next IN com
13680 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  bination */.  in
13690 74 20 61 64 64 72 43 6f 6e 74 3b 20 20 20 20 20  t addrCont;     
136a0 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
136b0 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69 74   to continue wit
136c0 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20  h the next loop 
136d0 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 61  cycle */.  int a
136e0 64 64 72 46 69 72 73 74 3b 20 20 20 20 20 20 20  ddrFirst;       
136f0 20 2f 2a 20 46 69 72 73 74 20 69 6e 73 74 72 75   /* First instru
13700 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f  ction of interio
13710 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  r of the loop */
13720 0a 20 20 75 38 20 69 46 72 6f 6d 3b 20 20 20 20  .  u8 iFrom;    
13730 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
13740 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 46  h entry in the F
13750 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
13760 75 38 20 6f 70 2c 20 70 35 3b 20 20 20 20 20 20  u8 op, p5;      
13770 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
13780 61 6e 64 20 50 35 20 6f 66 20 74 68 65 20 6f 70  and P5 of the op
13790 63 6f 64 65 20 74 68 61 74 20 65 6e 64 73 20 74  code that ends t
137a0 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74  he loop */.  int
137b0 20 70 31 2c 20 70 32 3b 20 20 20 20 20 20 20 20   p1, p2;        
137c0 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 6f     /* Operands o
137d0 66 20 74 68 65 20 6f 70 63 6f 64 65 20 75 73 65  f the opcode use
137e0 64 20 74 6f 20 65 6e 64 73 20 74 68 65 20 6c 6f  d to ends the lo
137f0 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  op */.  union { 
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13810 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   Information tha
13820 74 20 64 65 70 65 6e 64 73 20 6f 6e 20 70 6c 61  t depends on pla
13830 6e 2e 77 73 46 6c 61 67 73 20 2a 2f 0a 20 20 20  n.wsFlags */.   
13840 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
13850 69 6e 74 20 6e 49 6e 3b 20 20 20 20 20 20 20 20  int nIn;        
13860 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13870 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 49  of entries in aI
13880 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20 20  nLoop[] */.     
13890 20 73 74 72 75 63 74 20 49 6e 4c 6f 6f 70 20 7b   struct InLoop {
138a0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 43 75  .        int iCu
138b0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
138c0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
138d0 6f 72 20 75 73 65 64 20 62 79 20 74 68 69 73 20  or used by this 
138e0 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20  IN operator */. 
138f0 20 20 20 20 20 20 20 69 6e 74 20 61 64 64 72 49         int addrI
13900 6e 54 6f 70 3b 20 20 20 20 20 20 20 20 20 2f 2a  nTop;         /*
13910 20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e 20 6c   Top of the IN l
13920 6f 6f 70 20 2a 2f 0a 20 20 20 20 20 20 7d 20 2a  oop */.      } *
13930 61 49 6e 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20  aInLoop;        
13940 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
13950 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73  n about each nes
13960 74 65 64 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  ted IN operator 
13970 2a 2f 0a 20 20 20 20 7d 20 69 6e 3b 20 20 20 20  */.    } in;    
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13990 55 73 65 64 20 77 68 65 6e 20 70 6c 61 6e 2e 77  Used when plan.w
139a0 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 5f  sFlags&WHERE_IN_
139b0 41 42 4c 45 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  ABLE */.  } u;..
139c0 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
139d0 6e 67 20 66 69 65 6c 64 20 69 73 20 72 65 61 6c  ng field is real
139e0 6c 79 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 74  ly not part of t
139f0 68 65 20 63 75 72 72 65 6e 74 20 6c 65 76 65 6c  he current level
13a00 2e 20 20 42 75 74 0a 20 20 2a 2a 20 77 65 20 6e  .  But.  ** we n
13a10 65 65 64 20 61 20 70 6c 61 63 65 20 74 6f 20 63  eed a place to c
13a20 61 63 68 65 20 76 69 72 74 75 61 6c 20 74 61 62  ache virtual tab
13a30 6c 65 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d 61  le index informa
13a40 74 69 6f 6e 20 66 6f 72 20 65 61 63 68 0a 20 20  tion for each.  
13a50 2a 2a 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ** virtual table
13a60 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
13a70 75 73 65 20 61 6e 64 20 74 68 65 20 57 68 65 72  use and the Wher
13a80 65 4c 65 76 65 6c 20 73 74 72 75 63 74 75 72 65  eLevel structure
13a90 20 69 73 0a 20 20 2a 2a 20 61 20 63 6f 6e 76 65   is.  ** a conve
13aa0 6e 69 65 6e 74 20 70 6c 61 63 65 20 73 69 6e 63  nient place sinc
13ab0 65 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 57  e there is one W
13ac0 68 65 72 65 4c 65 76 65 6c 20 66 6f 72 20 65 61  hereLevel for ea
13ad0 63 68 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 20  ch FROM clause. 
13ae0 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a   ** element..  *
13af0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  /.  sqlite3_inde
13b00 78 5f 69 6e 66 6f 20 2a 70 49 64 78 49 6e 66 6f  x_info *pIdxInfo
13b10 3b 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 66 6f  ;  /* Index info
13b20 20 66 6f 72 20 6e 2d 74 68 20 73 6f 75 72 63 65   for n-th source
13b30 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   table */.};../*
13b40 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
13b50 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
13b60 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
13b70 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
13b80 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
13b90 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
13ba0 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
13bb0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ..*/.#define WHE
13bc0 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
13bd0 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
13be0 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
13bf0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
13c00 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
13c10 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
13c20 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
13c30 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
13c40 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
13c50 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
13c60 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
13c70 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
13c80 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
13c90 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
13ca0 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
13cb0 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
13cc0 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
13cd0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
13ce0 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
13cf0 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74    0x0008 /* Ok t
13d00 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
13d10 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
13d20 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
13d30 4d 49 54 5f 4f 50 45 4e 20 20 20 20 20 20 20 20  MIT_OPEN        
13d40 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20  0x0010 /* Table 
13d50 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65  cursors are alre
13d60 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66  ady open */.#def
13d70 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 43  ine WHERE_OMIT_C
13d80 4c 4f 53 45 20 20 20 20 20 20 20 30 78 30 30 32  LOSE       0x002
13d90 30 20 2f 2a 20 4f 6d 69 74 20 63 6c 6f 73 65 20  0 /* Omit close 
13da0 6f 66 20 74 61 62 6c 65 20 26 20 69 6e 64 65 78  of table & index
13db0 20 63 75 72 73 6f 72 73 20 2a 2f 0a 23 64 65 66   cursors */.#def
13dc0 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f  ine WHERE_FORCE_
13dd0 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 34  TABLE      0x004
13de0 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20  0 /* Do not use 
13df0 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65  an index-only se
13e00 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20  arch */.#define 
13e10 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f  WHERE_ONETABLE_O
13e20 4e 4c 59 20 20 20 20 30 78 30 30 38 30 20 2f 2a  NLY    0x0080 /*
13e30 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31   Only code the 1
13e40 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62  st table in pTab
13e50 4c 69 73 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  List */../*.** T
13e60 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
13e70 70 72 6f 63 65 73 73 69 6e 67 20 72 6f 75 74 69  processing routi
13e80 6e 65 20 68 61 73 20 74 77 6f 20 68 61 6c 76 65  ne has two halve
13e90 73 2e 20 20 54 68 65 0a 2a 2a 20 66 69 72 73 74  s.  The.** first
13ea0 20 70 61 72 74 20 64 6f 65 73 20 74 68 65 20 73   part does the s
13eb0 74 61 72 74 20 6f 66 20 74 68 65 20 57 48 45 52  tart of the WHER
13ec0 45 20 6c 6f 6f 70 20 61 6e 64 20 74 68 65 20 73  E loop and the s
13ed0 65 63 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f  econd.** half do
13ee0 65 73 20 74 68 65 20 74 61 69 6c 20 6f 66 20 74  es the tail of t
13ef0 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20  he WHERE loop.  
13f00 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  An instance of.*
13f10 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
13f20 20 69 73 20 72 65 74 75 72 6e 65 64 20 62 79 20   is returned by 
13f30 74 68 65 20 66 69 72 73 74 20 68 61 6c 66 20 61  the first half a
13f40 6e 64 20 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74  nd passed.** int
13f50 6f 20 74 68 65 20 73 65 63 6f 6e 64 20 68 61 6c  o the second hal
13f60 66 20 74 6f 20 67 69 76 65 20 73 6f 6d 65 20 63  f to give some c
13f70 6f 6e 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74  ontinuity..*/.st
13f80 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 7b  ruct WhereInfo {
13f90 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
13fa0 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 69  ;       /* Parsi
13fb0 6e 67 20 61 6e 64 20 63 6f 64 65 20 67 65 6e 65  ng and code gene
13fc0 72 61 74 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  rating context *
13fd0 2f 0a 20 20 75 31 36 20 77 63 74 72 6c 46 6c 61  /.  u16 wctrlFla
13fe0 67 73 3b 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  gs;      /* Flag
13ff0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 70 61 73  s originally pas
14000 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 57 68  sed to sqlite3Wh
14010 65 72 65 42 65 67 69 6e 28 29 20 2a 2f 0a 20 20  ereBegin() */.  
14020 75 38 20 6f 6b 4f 6e 65 50 61 73 73 3b 20 20 20  u8 okOnePass;   
14030 20 20 20 20 20 2f 2a 20 4f 6b 20 74 6f 20 75 73       /* Ok to us
14040 65 20 6f 6e 65 2d 70 61 73 73 20 61 6c 67 6f 72  e one-pass algor
14050 69 74 68 6d 20 66 6f 72 20 55 50 44 41 54 45 20  ithm for UPDATE 
14060 6f 72 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75  or DELETE */.  u
14070 38 20 75 6e 74 65 73 74 65 64 54 65 72 6d 73 3b  8 untestedTerms;
14080 20 20 20 20 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57      /* Not all W
14090 48 45 52 45 20 74 65 72 6d 73 20 72 65 73 6f 6c  HERE terms resol
140a0 76 65 64 20 62 79 20 6f 75 74 65 72 20 6c 6f 6f  ved by outer loo
140b0 70 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  p */.  SrcList *
140c0 70 54 61 62 4c 69 73 74 3b 20 20 20 20 20 20 20  pTabList;       
140d0 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
140e0 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6a   tables in the j
140f0 6f 69 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 6f  oin */.  int iTo
14100 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
14110 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
14120 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  ery beginning of
14130 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20   the WHERE loop 
14140 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69 6e  */.  int iContin
14150 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ue;             
14160 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
14170 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69 74   to continue wit
14180 68 20 6e 65 78 74 20 72 65 63 6f 72 64 20 2a 2f  h next record */
14190 0a 20 20 69 6e 74 20 69 42 72 65 61 6b 3b 20 20  .  int iBreak;  
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74    /* Jump here t
141c0 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f 66 20 74  o break out of t
141d0 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74  he loop */.  int
141e0 20 6e 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   nLevel;        
141f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14200 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
14210 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63 74  loop */.  struct
14220 20 57 68 65 72 65 43 6c 61 75 73 65 20 2a 70 57   WhereClause *pW
14230 43 3b 20 20 20 20 20 20 20 2f 2a 20 44 65 63 6f  C;       /* Deco
14240 6d 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68 65  mposition of the
14250 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
14260 0a 20 20 64 6f 75 62 6c 65 20 73 61 76 65 64 4e  .  double savedN
14270 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20  QueryLoop;      
14280 20 20 2f 2a 20 70 50 61 72 73 65 2d 3e 6e 51 75    /* pParse->nQu
14290 65 72 79 4c 6f 6f 70 20 6f 75 74 73 69 64 65 20  eryLoop outside 
142a0 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a  the WHERE loop *
142b0 2f 0a 20 20 57 68 65 72 65 4c 65 76 65 6c 20 61  /.  WhereLevel a
142c0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
142d0 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
142e0 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73  n about each nes
142f0 74 20 6c 6f 6f 70 20 69 6e 20 57 48 45 52 45 20  t loop in WHERE 
14300 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  */.};../*.** A N
14310 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
14320 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
14330 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
14340 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
14350 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
14360 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
14370 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
14380 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
14390 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
143a0 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
143b0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
143c0 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
143d0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
143e0 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
143f0 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
14400 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
14410 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
14420 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
14430 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
14440 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
14450 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
14460 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
14470 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
14480 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
14490 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
144a0 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
144b0 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
144c0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
144d0 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
144e0 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
144f0 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
14500 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20   the inner-most 
14510 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73  .** context is s
14520 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20  earched first.  
14530 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66  If no match is f
14540 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f  ound, the next o
14550 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  uter.** context 
14560 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20  is checked.  If 
14570 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e  there is still n
14580 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78  o match, the nex
14590 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20  t context.** is 
145a0 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70  checked.  This p
145b0 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73  rocess continues
145c0 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20   until either a 
145d0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a  match is found.*
145e0 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74  * or all context
145f0 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68  s are check.  Wh
14600 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  en a match is fo
14610 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65  und, the nRef me
14620 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63  mber of.** the c
14630 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e  ontext containin
14640 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69  g the match is i
14650 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a  ncremented. .**.
14660 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
14670 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
14680 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
14690 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
146a0 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
146b0 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
146c0 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
146d0 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
146e0 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
146f0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
14700 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
14710 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
14720 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
14730 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
14740 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
14750 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
14760 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
14770 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
14780 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
14790 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
147a0 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
147b0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
147c0 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
147d0 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
147e0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
147f0 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
14800 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  l list of named 
14810 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
14820 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
14830 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14840 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
14850 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
14860 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
14870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14880 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
14890 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
148a0 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
148b0 73 20 2a 2f 0a 20 20 75 38 20 61 6c 6c 6f 77 41  s */.  u8 allowA
148c0 67 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  gg;         /* A
148d0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
148e0 6e 73 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  ns allowed here 
148f0 2a 2f 0a 20 20 75 38 20 68 61 73 41 67 67 3b 20  */.  u8 hasAgg; 
14900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
14910 65 20 69 66 20 61 67 67 72 65 67 61 74 65 73 20  e if aggregates 
14920 61 72 65 20 73 65 65 6e 20 2a 2f 0a 20 20 75 38  are seen */.  u8
14930 20 69 73 43 68 65 63 6b 3b 20 20 20 20 20 20 20   isCheck;       
14940 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
14950 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
14960 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
14970 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 65  int */.  int nDe
14980 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  pth;          /*
14990 20 44 65 70 74 68 20 6f 66 20 73 75 62 71 75 65   Depth of subque
149a0 72 79 20 72 65 63 75 72 73 69 6f 6e 2e 20 31 20  ry recursion. 1 
149b0 66 6f 72 20 6e 6f 20 72 65 63 75 72 73 69 6f 6e  for no recursion
149c0 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
149d0 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
149e0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
149f0 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
14a00 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61  is level */.  Na
14a10 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
14a20 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
14a30 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
14a40 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
14a50 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
14a60 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
14a70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
14a80 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
14a90 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
14aa0 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
14ab0 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
14ac0 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
14ad0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
14ae0 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
14af0 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
14b00 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
14b10 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
14b20 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
14b30 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
14b40 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
14b50 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
14b60 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
14b70 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
14b80 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
14b90 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
14ba0 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
14bb0 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
14bc0 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
14bd0 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
14be0 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
14bf0 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
14c00 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
14c10 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
14c20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
14c30 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
14c40 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
14c50 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
14c60 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
14c70 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
14c80 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
14c90 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
14ca0 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
14cb0 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
14cc0 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
14cd0 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
14ce0 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
14cf0 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
14d00 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
14d10 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
14d20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
14d30 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
14d40 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
14d50 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
14d60 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
14d70 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
14d80 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
14d90 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
14da0 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
14db0 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
14dc0 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
14dd0 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
14de0 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
14df0 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
14e00 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
14e10 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
14e20 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
14e30 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
14e40 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 32 5d 20  addrOpenTran[2] 
14e50 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
14e60 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
14e70 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
14e80 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
14e90 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
14ea0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
14eb0 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
14ec0 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
14ed0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14ef0 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
14f00 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
14f10 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
14f20 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
14f30 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  y;         /* Ma
14f40 6b 65 52 65 63 6f 72 64 20 77 69 74 68 20 74 68  keRecord with th
14f50 69 73 20 61 66 66 69 6e 69 74 79 20 66 6f 72 20  is affinity for 
14f60 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 75 31 36  SRT_Set */.  u16
14f70 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
14f80 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
14f90 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
14fa0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20  SrcList *pSrc;  
14fb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52         /* The FR
14fc0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  OM clause */.  E
14fd0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
14fe0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
14ff0 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  RE clause */.  E
15000 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
15010 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f  y;    /* The GRO
15020 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
15030 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b    Expr *pHaving;
15040 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15050 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f  HAVING clause */
15060 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
15070 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  derBy;    /* The
15080 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
15090 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50   */.  Select *pP
150a0 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  rior;        /* 
150b0 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20  Prior select in 
150c0 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  a compound selec
150d0 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  t statement */. 
150e0 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20   Select *pNext; 
150f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
15100 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65  select to the le
15110 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ft in a compound
15120 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 52   */.  Select *pR
15130 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f 2a 20  ightmost;    /* 
15140 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c 65 63  Right-most selec
15150 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
15160 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
15170 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d   */.  Expr *pLim
15180 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  it;          /* 
15190 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
151a0 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
151b0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72   used. */.  Expr
151c0 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *pOffset;      
151d0 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70     /* OFFSET exp
151e0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
151f0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
15200 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69  .  int iLimit, i
15210 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d  Offset;   /* Mem
15220 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f  ory registers ho
15230 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46  lding LIMIT & OF
15240 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  FSET counters */
15250 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45  .  int addrOpenE
15260 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20 4f 50 5f  phm[3];   /* OP_
15270 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65  OpenEphem opcode
15280 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69  s related to thi
15290 73 20 73 65 6c 65 63 74 20 2a 2f 0a 7d 3b 0a 0a  s select */.};..
152a0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
152b0 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
152c0 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
152d0 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
152e0 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
152f0 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69   Flag"..*/.#defi
15300 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
15310 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
15320 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
15330 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
15340 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
15350 64 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20  d        0x0002 
15360 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
15370 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
15380 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
15390 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
153a0 20 30 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74   0x0004  /* Cont
153b0 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
153c0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
153d0 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
153e0 65 72 61 6c 20 20 20 30 78 30 30 30 38 20 20 2f  eral   0x0008  /
153f0 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
15400 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
15410 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
15420 70 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78  panded        0x
15430 30 30 31 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0010  /* sqlite3
15440 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
15450 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
15460 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
15470 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30  ypeInfo     0x00
15480 32 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  20  /* FROM subq
15490 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
154a0 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 0a 0a  e metadata */...
154b0 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  /*.** The result
154c0 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63 61  s of a select ca
154d0 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64  n be distributed
154e0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
154f0 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22 20  .  The.** "SRT" 
15500 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
15510 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79 70 65  LECT Result Type
15520 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  "..*/.#define SR
15530 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
15540 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
15550 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
15560 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
15570 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
15580 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
15590 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
155a0 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
155b0 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
155c0 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
155d0 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
155e0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
155f0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
15600 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
15610 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
15620 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
15630 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
15640 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
15650 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
15660 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
15670 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
15680 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
15690 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 63  eDest)<=SRT_Disc
156a0 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  ard)..#define SR
156b0 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 35  T_Output       5
156c0 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
156d0 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
156e0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
156f0 6d 20 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a  m          6  /*
15700 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
15710 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
15720 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
15730 74 20 20 20 20 20 20 20 20 20 20 37 20 20 2f 2a  t          7  /*
15740 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
15750 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
15760 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
15770 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20 38  T_Table        8
15780 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
15790 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
157a0 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
157b0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
157c0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20 39 20  _EphemTab     9 
157d0 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
157e0 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
157f0 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
15800 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
15810 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30 20  _Coroutine   10 
15820 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
15830 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
15840 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ult */../*.** A 
15850 73 74 72 75 63 74 75 72 65 20 75 73 65 64 20 74  structure used t
15860 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20  o customize the 
15870 62 65 68 61 76 69 6f 72 20 6f 66 20 73 71 6c 69  behavior of sqli
15880 74 65 33 53 65 6c 65 63 74 28 29 2e 20 53 65 65  te3Select(). See
15890 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f  .** comments abo
158a0 76 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ve sqlite3Select
158b0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
158c0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
158d0 74 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c  t SelectDest Sel
158e0 65 63 74 44 65 73 74 3b 0a 73 74 72 75 63 74 20  ectDest;.struct 
158f0 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
15900 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
15910 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
15920 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
15930 73 20 2a 2f 0a 20 20 75 38 20 61 66 66 69 6e 69  s */.  u8 affini
15940 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ty;      /* Affi
15950 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
15960 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
15970 0a 20 20 69 6e 74 20 69 50 61 72 6d 3b 20 20 20  .  int iParm;   
15980 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65       /* A parame
15990 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20  ter used by the 
159a0 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d  eDest disposal m
159b0 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ethod */.  int i
159c0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Mem;         /* 
159d0 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
159e0 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
159f0 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
15a00 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 2f   nMem;         /
15a10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
15a20 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
15a30 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72  */.};../*.** Dur
15a40 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
15a50 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ion of statement
15a60 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74  s that do insert
15a70 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45  s into AUTOINCRE
15a80 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c  MENT .** tables,
15a90 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
15aa0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74  nformation is at
15ab0 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61  tached to the Ta
15ac0 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a  ble.u.autoInc.p.
15ad0 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61  ** pointer of ea
15ae0 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  ch autoincrement
15af0 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64   table to record
15b00 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72   some side infor
15b10 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74  mation that.** t
15b20 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
15b30 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76  r needs.  We hav
15b40 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61  e to keep per-ta
15b50 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ble autoincremen
15b60 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  t.** information
15b70 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73   in case inserts
15b80 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e   are down within
15b90 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67   triggers.  Trig
15ba0 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e  gers do not.** n
15bb0 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61  ormally coordina
15bc0 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74  te their activit
15bd0 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e  ies, but we do n
15be0 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74  eed to coordinat
15bf0 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67  e the.** loading
15c00 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61   and saving of a
15c10 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66  utoincrement inf
15c20 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
15c30 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  uct AutoincInfo 
15c40 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  {.  AutoincInfo 
15c50 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78  *pNext;   /* Nex
15c60 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20  t info block in 
15c70 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61  a list of them a
15c80 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ll */.  Table *p
15c90 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Tab;          /*
15ca0 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f   Table this info
15cb0 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f   block refers to
15cc0 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
15ce0 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e  ndex in sqlite3.
15cf0 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73  aDb[] of databas
15d00 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a  e holding pTab *
15d10 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20  /.  int regCtr; 
15d20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
15d30 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c  ory register hol
15d40 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63  ding the rowid c
15d50 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ounter */.};../*
15d60 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20  .** Size of the 
15d70 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a  column cache.*/.
15d80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e  #ifndef SQLITE_N
15d90 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69  _COLCACHE.# defi
15da0 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ne SQLITE_N_COLC
15db0 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a  ACHE 10.#endif..
15dc0 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f  /*.** At least o
15dd0 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
15de0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
15df0 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65  ucture is create
15e00 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74  d for each .** t
15e10 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20  rigger that may 
15e20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70  be fired while p
15e30 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  arsing an INSERT
15e40 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
15e50 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e  TE.** statement.
15e60 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74   All such object
15e70 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
15e80 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
15e90 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72  headed at.** Par
15ea0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61  se.pTriggerPrg a
15eb0 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20  nd deleted once 
15ec0 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c  statement compil
15ed0 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a  ation has been.*
15ee0 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a  * completed..**.
15ef0 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72  ** A Vdbe sub-pr
15f00 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65  ogram that imple
15f10 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61  ments the body a
15f20 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  nd WHEN clause o
15f30 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69  f trigger.** Tri
15f40 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72  ggerPrg.pTrigger
15f50 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66  , assuming a def
15f60 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
15f70 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72   clause of.** Tr
15f80 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c  iggerPrg.orconf,
15f90 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
15fa0 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72  e TriggerPrg.pPr
15fb0 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a  ogram variable..
15fc0 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72  ** The Parse.pTr
15fd0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65  iggerPrg list ne
15fe0 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f  ver contains two
15ff0 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68   entries with th
16000 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73  e same.** values
16010 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67   for both pTrigg
16020 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a  er and orconf..*
16030 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72  *.** The Trigger
16040 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20  Prg.aColmask[0] 
16050 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
16060 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64  to a mask of old
16070 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63  .* columns.** ac
16080 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74  cessed (or set t
16090 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73  o 0 for triggers
160a0 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75   fired as a resu
160b0 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a  lt of INSERT .**
160c0 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
160d0 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
160e0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
160f0 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
16100 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
16110 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
16120 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
16130 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
16140 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
16150 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
16160 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
16170 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
16180 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
16190 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
161a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
161b0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
161c0 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 53  CT policy */.  S
161d0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
161e0 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
161f0 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
16200 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
16210 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
16220 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
16230 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
16240 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
16250 65 73 73 65 64 20 2a 2f 0a 20 20 54 72 69 67 67  essed */.  Trigg
16260 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
16270 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
16280 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
16290 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 7d 3b  erPrg list */.};
162a0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
162b0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
162c0 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
162d0 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
162e0 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
162f0 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
16300 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
16310 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
16320 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
16330 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
16340 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
16350 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
16360 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
16370 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
16380 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
16390 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
163a0 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
163b0 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
163c0 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
163d0 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
163e0 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
163f0 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
16400 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
16410 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
16420 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
16430 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
16440 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
16450 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
16460 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
16470 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
16480 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
16490 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
164a0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a   shared-cache .*
164b0 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
164c0 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
164d0 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
164e0 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
164f0 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
16500 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
16510 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
16520 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
16530 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
16540 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
16550 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
16560 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
16570 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
16580 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
16590 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
165a0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
165b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
165c0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
165d0 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 69 6e 74  ructure */.  int
165e0 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
165f0 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
16600 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
16610 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
16620 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
16630 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
16640 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
16650 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
16660 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
16670 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
16680 63 6f 64 65 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  code */.  u8 col
16690 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
166a0 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
166b0 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
166c0 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
166d0 64 62 65 20 2a 2f 0a 20 20 75 38 20 6e 61 6d 65  dbe */.  u8 name
166e0 43 6c 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  Clash;        /*
166f0 20 41 20 70 65 72 6d 61 6e 65 6e 74 20 74 61 62   A permanent tab
16700 6c 65 20 6e 61 6d 65 20 63 6c 61 73 68 65 73 20  le name clashes 
16710 77 69 74 68 20 74 65 6d 70 20 74 61 62 6c 65 20  with temp table 
16720 6e 61 6d 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  name */.  u8 che
16730 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
16740 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
16750 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
16760 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
16770 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
16780 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16790 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
167a0 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
167b0 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
167c0 20 20 75 38 20 70 61 72 73 65 45 72 72 6f 72 3b    u8 parseError;
167d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
167e0 66 74 65 72 20 61 20 70 61 72 73 69 6e 67 20 65  fter a parsing e
167f0 72 72 6f 72 2e 20 20 54 69 63 6b 65 74 20 23 31  rror.  Ticket #1
16800 37 39 34 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  794 */.  u8 nTem
16810 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
16820 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
16830 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
16840 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
16850 20 20 75 38 20 6e 54 65 6d 70 49 6e 55 73 65 3b    u8 nTempInUse;
16860 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16870 20 6f 66 20 61 54 65 6d 70 52 65 67 5b 5d 20 63   of aTempReg[] c
16880 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
16890 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 54   out */.  int aT
168a0 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
168b0 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
168c0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
168d0 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
168e0 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
168f0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
16900 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
16910 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
16920 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
16930 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
16940 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
16950 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
16960 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
16970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16980 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
16990 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
169a0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
169b0 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
169c0 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
169d0 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
169e0 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
169f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16a00 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
16a10 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
16a20 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
16a30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16a40 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
16a50 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b   far */.  int ck
16a60 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Base;          /
16a70 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
16a80 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63  of data during c
16a90 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
16aa0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
16ab0 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
16ac0 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
16ad0 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
16ae0 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
16af0 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
16b00 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
16b10 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
16b20 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
16b30 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
16b40 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65  /.  u8 nColCache
16b50 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
16b60 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
16b70 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68   the column cach
16b80 65 20 2a 2f 0a 20 20 75 38 20 69 43 6f 6c 43 61  e */.  u8 iColCa
16b90 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  che;        /* N
16ba0 65 78 74 20 65 6e 74 72 79 20 6f 66 20 74 68 65  ext entry of the
16bb0 20 63 61 63 68 65 20 74 6f 20 72 65 70 6c 61 63   cache to replac
16bc0 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43  e */.  struct yC
16bd0 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
16be0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
16bf0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
16c00 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
16c10 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
16c20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
16c30 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
16c40 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
16c50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
16c60 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
16c70 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
16c80 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
16c90 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
16ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
16cb0 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
16cc0 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
16cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
16ce0 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
16cf0 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
16d00 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
16d10 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
16d20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
16d30 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
16d40 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
16d50 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
16d60 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
16d70 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
16d80 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
16d90 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
16da0 72 79 20 2a 2f 0a 20 20 75 33 32 20 77 72 69 74  ry */.  u32 writ
16db0 65 4d 61 73 6b 3b 20 20 20 20 20 20 20 2f 2a 20  eMask;       /* 
16dc0 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72  Start a write tr
16dd0 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
16de0 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  se databases */.
16df0 20 20 75 33 32 20 63 6f 6f 6b 69 65 4d 61 73 6b    u32 cookieMask
16e00 3b 20 20 20 20 20 20 2f 2a 20 42 69 74 6d 61 73  ;      /* Bitmas
16e10 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69  k of schema veri
16e20 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a  fied databases *
16e30 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
16e40 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
16e50 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
16e60 79 20 61 66 66 65 63 74 2f 69 6e 73 65 72 74 20  y affect/insert 
16e70 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
16e80 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
16e90 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
16ea0 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
16eb0 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
16ec0 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69  exception */.  i
16ed0 6e 74 20 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20  nt cookieGoto;  
16ee0 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
16ef0 66 20 4f 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f  f OP_Goto to coo
16f00 6b 69 65 20 76 65 72 69 66 69 65 72 20 73 75 62  kie verifier sub
16f10 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  routine */.  int
16f20 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c   cookieValue[SQL
16f30 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
16f40 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20  +2];  /* Values 
16f50 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65  of cookies to ve
16f60 72 69 66 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  rify */.#ifndef 
16f70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
16f80 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
16f90 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
16fa0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
16fb0 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
16fc0 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
16fd0 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
16fe0 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
16ff0 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
17000 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
17010 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 65 67  #endif.  int reg
17020 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
17030 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
17040 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
17050 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
17060 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
17070 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
17080 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
17090 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
170a0 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
170b0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
170c0 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d  Ainc;  /* Inform
170d0 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f  ation about AUTO
170e0 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65  INCREMENT counte
170f0 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  rs */.  int nMax
17100 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Arg;         /* 
17110 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20  Max args passed 
17120 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
17130 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20   by sub-program 
17140 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  */..  /* Informa
17150 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20  tion used while 
17160 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70  coding trigger p
17170 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61  rograms. */.  Pa
17180 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
17190 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
171a0 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
171b0 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
171c0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
171d0 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
171e0 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
171f0 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
17200 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73   */.  u32 oldmas
17210 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
17220 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
17230 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
17240 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b  /.  u32 newmask;
17250 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
17260 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
17270 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
17280 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b    u8 eTriggerOp;
17290 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44         /* TK_UPD
172a0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f  ATE, TK_INSERT o
172b0 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20  r TK_DELETE */. 
172c0 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20   u8 eOrconf;    
172d0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
172e0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
172f0 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20  icy for trigger 
17300 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69  steps */.  u8 di
17310 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20  sableTriggers;  
17320 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62  /* True to disab
17330 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  le triggers */. 
17340 20 64 6f 75 62 6c 65 20 6e 51 75 65 72 79 4c 6f   double nQueryLo
17350 6f 70 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  op;   /* Estimat
17360 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  ed number of ite
17370 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
17380 72 79 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f 76  ry */..  /* Abov
17390 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
173a0 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
173b0 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
173c0 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
173d0 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
173e0 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74  ursion */..  int
173f0 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
17400 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
17410 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
17420 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
17430 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61  far */.  int nVa
17440 72 45 78 70 72 3b 20 20 20 20 20 20 20 20 2f 2a  rExpr;        /*
17450 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
17460 73 6c 6f 74 73 20 69 6e 20 61 70 56 61 72 45 78  slots in apVarEx
17470 70 72 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  pr[] */.  int nV
17480 61 72 45 78 70 72 41 6c 6c 6f 63 3b 20 20 20 2f  arExprAlloc;   /
17490 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  * Number of allo
174a0 63 61 74 65 64 20 73 6c 6f 74 73 20 69 6e 20 61  cated slots in a
174b0 70 56 61 72 45 78 70 72 5b 5d 20 2a 2f 0a 20 20  pVarExpr[] */.  
174c0 45 78 70 72 20 2a 2a 61 70 56 61 72 45 78 70 72  Expr **apVarExpr
174d0 3b 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73  ;    /* Pointers
174e0 20 74 6f 20 3a 61 61 61 20 61 6e 64 20 24 61 61   to :aaa and $aa
174f0 61 61 20 77 69 6c 64 63 61 72 64 20 65 78 70 72  aa wildcard expr
17500 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 56 64 62  essions */.  Vdb
17510 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20  e *pReprepare;  
17520 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65    /* VM being re
17530 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65  prepared (sqlite
17540 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f  3Reprepare()) */
17550 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20  .  int nAlias;  
17560 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17570 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73  r of aliased res
17580 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult set columns 
17590 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 41  */.  int nAliasA
175a0 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lloc;     /* Num
175b0 62 65 72 20 6f 66 20 61 6c 6c 6f 63 61 74 65 64  ber of allocated
175c0 20 73 6c 6f 74 73 20 66 6f 72 20 61 41 6c 69 61   slots for aAlia
175d0 73 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41  s[] */.  int *aA
175e0 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lias;         /*
175f0 20 52 65 67 69 73 74 65 72 20 75 73 65 64 20 74   Register used t
17600 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65 64 20 72  o hold aliased r
17610 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 65 78  esult */.  u8 ex
17620 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
17630 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
17640 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
17650 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
17660 79 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  y */.  Token sNa
17670 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 2f 2a 20 54  meToken;    /* T
17680 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
17690 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
176a0 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
176b0 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
176c0 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
176d0 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  oken parsed */. 
176e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
176f0 69 6c 3b 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c  il;   /* All SQL
17700 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
17710 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
17720 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
17730 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 2f  *pNewTable;    /
17740 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
17750 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
17760 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
17770 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72   Trigger *pNewTr
17780 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72  igger;     /* Tr
17790 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73  igger under cons
177a0 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54  truct by a CREAT
177b0 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63  E TRIGGER */.  c
177c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
177d0 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20  Context; /* The 
177e0 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f  6th parameter to
177f0 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62   db->xAuth callb
17800 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20  acks */.#ifndef 
17810 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
17820 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e  UALTABLE.  Token
17830 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   sArg;          
17840 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
17850 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75  e text of a modu
17860 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20  le argument */. 
17870 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
17880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
17890 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
178a0 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
178b0 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
178c0 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
178d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
178e0 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  f virtual tables
178f0 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 20 20 54 61   to lock */.  Ta
17900 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
17910 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ;        /* Poin
17920 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
17930 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
17940 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
17950 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
17960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
17970 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
17980 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
17990 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 20 20 54  ub-select */.  T
179a0 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
179b0 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ;      /* List o
179c0 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
179d0 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
179e0 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
179f0 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
17a00 65 72 50 72 67 3b 20 20 20 20 2f 2a 20 4c 69 6e  erPrg;    /* Lin
17a10 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
17a20 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d 3b  d triggers */.};
17a30 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
17a40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
17a50 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
17a60 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
17a70 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
17a80 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
17a90 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
17aa0 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
17ab0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
17ac0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
17ad0 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
17ae0 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
17af0 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
17b00 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
17b10 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
17b20 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
17b30 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
17b40 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
17b50 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
17b60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
17b70 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
17b80 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
17b90 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
17ba0 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
17bb0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
17bc0 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
17bd0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
17be0 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
17bf0 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
17c00 75 65 20 69 6e 20 4f 50 5f 49 6e 73 65 72 74 20  ue in OP_Insert 
17c10 61 6e 64 20 4f 50 5f 44 65 6c 65 74 65 0a 2a 2f  and OP_Delete.*/
17c20 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
17c30 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
17c40 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  01    /* Set to 
17c50 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
17c60 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ge */.#define OP
17c70 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
17c80 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
17c90 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
17ca0 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
17cb0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
17cc0 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
17cd0 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
17ce0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
17cf0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
17d00 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
17d10 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
17d20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
17d30 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
17d40 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
17d50 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
17d60 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
17d70 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
17d80 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
17d90 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
17da0 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20 30  _CLEARCACHE    0
17db0 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20  x20    /* Clear 
17dc0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63  pseudo-table cac
17dd0 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he in OP_Column 
17de0 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74  */../*. * Each t
17df0 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69  rigger present i
17e00 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
17e10 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
17e20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  as an instance o
17e30 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  f. * struct Trig
17e40 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e  ger. . *. * Poin
17e50 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65  ters to instance
17e60 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
17e70 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69  ger are stored i
17e80 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31  n two ways.. * 1
17e90 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61  . In the "trigHa
17ea0 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28  sh" hash table (
17eb0 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69  part of the sqli
17ec0 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73  te3* that repres
17ed0 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20  ents the . *    
17ee0 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
17ef0 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
17f00 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
17f10 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
17f20 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
17f30 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
17f40 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
17f50 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
17f60 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
17f70 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
17f80 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
17f90 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
17fa0 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
17fb0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
17fc0 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
17fd0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
17fe0 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
17ff0 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
18000 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
18010 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
18020 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
18030 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
18040 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
18050 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
18060 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
18070 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
18080 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
18090 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
180a0 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
180b0 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
180c0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
180d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
180e0 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
18110 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
18120 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
18130 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
18140 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
18150 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
18160 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
18170 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
18180 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
18190 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
181a0 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
181b0 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
181c0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
181d0 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
181e0 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
181f0 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
18200 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
18210 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
18220 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
18230 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
18240 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
18250 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
18260 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
18270 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
18280 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
182b0 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
182c0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
182d0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
182e0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
182f0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
18300 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
18310 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
18320 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
18330 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
18340 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
18350 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
18360 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
18370 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
18380 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
18390 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
183a0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
183b0 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
183c0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
183d0 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
183e0 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
183f0 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
18400 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
18410 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
18420 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
18430 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
18440 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ch. .**.** If th
18450 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
18460 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
18470 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
18480 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
18490 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
184a0 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
184b0 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
184c0 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
184d0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
184e0 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
184f0 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
18500 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
18510 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
18520 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
18530 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
18540 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
18550 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
18560 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
18570 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20  rigger-program. 
18580 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
18590 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
185a0 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
185b0 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
185c0 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
185d0 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
185e0 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
185f0 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
18600 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
18610 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61  ber of the . * a
18620 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
18630 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
18640 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
18650 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
18660 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
18670 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
18680 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
18690 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20  ram.. * . * The 
186a0 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69  "op" member indi
186b0 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68  cates whether th
186c0 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22  is is a "DELETE"
186d0 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44  , "INSERT", "UPD
186e0 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45  ATE" or. * "SELE
186f0 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  CT" statement. T
18700 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
18710 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73  he other members
18720 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
18730 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20  y the . * value 
18740 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f  of "op" as follo
18750 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  ws:. *. * (op ==
18760 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f   TK_INSERT). * o
18770 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72  rconf    -> stor
18780 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  es the ON CONFLI
18790 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20  CT algorithm. * 
187a0 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20  pSelect   -> If 
187b0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
187c0 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
187d0 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  T ... statement,
187e0 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
187f0 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
18800 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
18810 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
18820 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ent. Otherwise N
18830 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20  ULL.. * target  
18840 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
18850 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
18860 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
18870 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f  e to insert into
18880 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
18890 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
188a0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
188b0 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65  VALUES ... state
188c0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
188d0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
188e0 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f  stores values to
188f0 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74   be inserted. Ot
18900 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
18910 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66   pIdList   -> If
18920 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
18930 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f  RT INTO ... (<co
18940 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c  lumn-names>) VAL
18950 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20  UES ... . *     
18960 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
18970 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
18980 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
18990 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
189a0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
189b0 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
189c0 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
189d0 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  E). * target    
189e0 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
189f0 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
18a00 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
18a10 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
18a20 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
18a30 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
18a40 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
18a50 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
18a60 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
18a80 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
18a90 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55   . * (op == TK_U
18aa0 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74  PDATE). * target
18ab0 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
18ac0 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
18ad0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
18ae0 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f  ble to update ro
18af0 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65  ws of.. * pWhere
18b00 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
18b10 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
18b20 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
18b30 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
18b40 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
18b50 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
18b60 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
18b70 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
18b80 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
18b90 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
18ba0 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
18bb0 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
18bc0 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
18bd0 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
18be0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
18bf0 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
18c00 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
18c10 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74  ment.. * . */.st
18c20 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
18c30 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
18c40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
18c50 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
18c60 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
18c70 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
18c80 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
18c90 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
18ca0 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
18cb0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
18cc0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
18cd0 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
18ce0 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
18cf0 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
18d00 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
18d10 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f  ELECT statment o
18d20 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
18d30 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e  INTO .. SELECT .
18d40 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61  .. */.  Token ta
18d50 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  rget;        /* 
18d60 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
18d70 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
18d80 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
18d90 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
18da0 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
18db0 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
18dc0 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
18dd0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
18de0 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
18df0 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
18e00 41 54 45 2e 20 20 56 41 4c 55 45 53 20 63 6c 61  ATE.  VALUES cla
18e10 75 73 65 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  use for INSERT *
18e20 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
18e30 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
18e40 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
18e50 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ERT */.  Trigger
18e60 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
18e70 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
18e80 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
18e90 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
18ea0 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
18eb0 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
18ec0 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
18ed0 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
18ee0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
18ef0 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
18f00 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
18f10 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
18f20 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
18f30 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
18f40 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
18f50 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
18f60 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
18f70 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a   explicit.  .*/.
18f80 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
18f90 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
18fa0 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
18fb0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
18fc0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
18fd0 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
18fe0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
18ff0 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
19000 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
19010 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
19020 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
19030 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
19040 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
19050 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
19060 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
19070 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
19080 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
19090 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
190a0 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
190b0 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
190c0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
190d0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
190e0 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
190f0 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
19100 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
19110 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
19120 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
19130 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
19140 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
19150 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
19160 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
19170 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63  .*/.struct StrAc
19180 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  cum {.  sqlite3 
19190 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
191a0 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
191b0 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
191c0 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
191d0 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20  .  char *zBase; 
191e0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73          /* A bas
191f0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  e allocation.  N
19200 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20  ot from malloc. 
19210 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
19220 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
19230 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
19240 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
19250 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  t  nChar;       
19260 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
19270 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
19280 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c  r */.  int  nAll
19290 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
192a0 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
192b0 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
192c0 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c  t */.  int  mxAl
192d0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
192e0 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73  aximum allowed s
192f0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
19300 20 20 75 38 20 20 20 6d 61 6c 6c 6f 63 46 61 69    u8   mallocFai
19310 6c 65 64 3b 20 20 20 2f 2a 20 42 65 63 6f 6d 65  led;   /* Become
19320 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6d 65  s true if any me
19330 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
19340 66 61 69 6c 73 20 2a 2f 0a 20 20 75 38 20 20 20  fails */.  u8   
19350 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  useMalloc;      
19360 2f 2a 20 54 72 75 65 20 69 66 20 7a 54 65 78 74  /* True if zText
19370 20 69 73 20 65 6e 6c 61 72 67 65 61 62 6c 65 20   is enlargeable 
19380 75 73 69 6e 67 20 72 65 61 6c 6c 6f 63 20 2a 2f  using realloc */
19390 0a 20 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20  .  u8   tooBig; 
193a0 20 20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d          /* Becom
193b0 65 73 20 74 72 75 65 20 69 66 20 73 74 72 69 6e  es true if strin
193c0 67 20 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c  g size exceeds l
193d0 69 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  imits */.};../*.
193e0 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
193f0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
19400 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
19410 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
19420 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
19430 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
19440 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
19450 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
19460 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
19470 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
19480 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
19490 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
194a0 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
194b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  ed */.  int iDb;
194c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
194d0 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
194e0 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
194f0 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
19500 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
19510 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
19520 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
19530 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
19540 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
19550 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
19560 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
19570 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
19580 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
19590 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
195a0 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
195b0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
195c0 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
195d0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
195e0 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
195f0 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
19600 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
19610 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
19620 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
19650 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
19660 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
19670 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
19680 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
19690 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
196a0 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
196b0 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196d0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
196e0 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
196f0 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
19700 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
19710 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
19720 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
19730 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
19740 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
19750 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
19760 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
19770 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
19780 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
197a0 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
197b0 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
197c0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
197d0 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
197e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
197f0 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
19800 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
19810 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
19820 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
19830 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
19840 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
19850 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
19860 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
19870 20 70 63 61 63 68 65 3b 20 20 20 20 2f 2a 20 4c   pcache;    /* L
19880 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
19890 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
198a0 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
198d0 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
198e0 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
198f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19900 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
19910 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
19920 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
19930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
19940 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
19950 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
19960 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74  /.  void *pScrat
19970 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
19980 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68        /* Scratch
19990 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
199a0 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20   szScratch;     
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
199c0 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73  * Size of each s
199d0 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f  cratch buffer */
199e0 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b  .  int nScratch;
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19a10 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  f scratch buffer
19a20 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  s */.  void *pPa
19a30 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
19a40 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
19a50 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
19a60 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a80 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
19a90 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
19aa0 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
19ab0 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19ad0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
19ae0 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
19af0 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
19b00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19b10 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
19b20 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
19b30 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
19b40 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
19b50 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
19b60 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
19b70 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
19b80 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  d */.  /* The ab
19b90 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
19ba0 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
19bb0 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
19bc0 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
19bd0 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
19be0 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
19bf0 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
19c00 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
19c10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19c20 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
19c30 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
19c40 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
19c50 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
19c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19c70 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
19c80 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
19c90 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
19ca0 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19cc0 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
19cd0 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
19ce0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
19cf0 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
19d00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
19d10 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
19d20 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
19d30 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
19d40 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
19d50 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
19d60 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
19d70 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71  tialized */.  sq
19d80 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e  lite3_mutex *pIn
19d90 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
19da0 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79  /* Mutex used by
19db0 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
19dc0 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ize() */.  int n
19dd0 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20  RefInitMutex;   
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19df0 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20  Number of users 
19e00 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f  of pInitMutex */
19e10 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
19e20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
19e30 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
19e40 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
19e50 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
19e60 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
19e70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
19e80 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
19e90 4c 6f 67 28 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Log() */.};../*.
19ea0 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
19eb0 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
19ec0 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
19ed0 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
19ee0 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28  Walker {.  int (
19ef0 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
19f00 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
19f10 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
19f20 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
19f30 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
19f40 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
19f50 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
19f60 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
19f70 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72  SELECTs */.  Par
19f80 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fa0 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72         /* Parser
19fb0 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20   context.  */.  
19fc0 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
19ff0 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
1a000 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
1a010 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a030 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
1a040 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
1a050 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1a080 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20  teger value */. 
1a090 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72   } u;.};../* For
1a0a0 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
1a0b0 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
1a0c0 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a  WalkExpr(Walker*
1a0d0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
1a0e0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73  lite3WalkExprLis
1a0f0 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c  t(Walker*, ExprL
1a100 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1a110 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c  e3WalkSelect(Wal
1a120 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1a130 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1a140 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72  electExpr(Walker
1a150 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1a160 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1a170 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20  ctFrom(Walker*, 
1a180 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  Select*);../*.**
1a190 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1a1a0 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
1a1b0 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
1a1c0 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
1a1d0 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
1a1e0 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
1a1f0 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
1a200 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
1a210 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
1a220 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
1a230 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
1a240 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
1a250 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
1a260 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
1a270 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
1a280 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
1a290 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
1a2a0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69  */../*.** Assumi
1a2b0 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f  ng zIn points to
1a2c0 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
1a2d0 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61  of a UTF-8 chara
1a2e0 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65  cter,.** advance
1a2f0 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f   zIn to point to
1a300 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
1a310 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d  of the next UTF-
1a320 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a  8 character..*/.
1a330 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
1a340 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20  KIP_UTF8(zIn) { 
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a360 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28         \.  if( (
1a370 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20  *(zIn++))>=0xc0 
1a380 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3a0 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a  \.    while( (*z
1a3b0 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30  In & 0xc0)==0x80
1a3c0 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20   ){ zIn++; }    
1a3d0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20           \.  }  
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65    \.}../*.** The
1a420 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d   SQLITE_*_BKPT m
1a430 61 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69  acros are substi
1a440 74 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72  tutes for the er
1a450 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a  ror codes with.*
1a460 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  * the same name 
1a470 62 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20  but without the 
1a480 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54  _BKPT suffix.  T
1a490 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f  hese macros invo
1a4a0 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74  ke.** routines t
1a4b0 68 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c  hat report the l
1a4c0 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68  ine-number on wh
1a4d0 69 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72  ich the error or
1a4e0 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e  iginated.** usin
1a4f0 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e  g sqlite3_log().
1a500 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61    The routines a
1a510 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f  lso provide a co
1a520 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a  nvenient place.*
1a530 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  * to set a debug
1a540 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
1a550 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  */.int sqlite3Co
1a560 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b  rruptError(int);
1a570 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75  .int sqlite3Misu
1a580 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  seError(int);.in
1a590 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  t sqlite3Cantope
1a5a0 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65  nError(int);.#de
1a5b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
1a5c0 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  UPT_BKPT sqlite3
1a5d0 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
1a5e0 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
1a5f0 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
1a600 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  T sqlite3MisuseE
1a610 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
1a620 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41  define SQLITE_CA
1a630 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69  NTOPEN_BKPT sqli
1a640 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
1a650 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a  (__LINE__).../*.
1a660 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
1a670 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
1a680 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
1a690 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
1a6a0 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
1a6b0 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
1a6c0 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
1a6d0 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61  fusion we also a
1a6e0 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
1a6f0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
1a700 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
1a710 6e 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c  n alisse for SQL
1a720 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
1a730 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
1a740 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1a750 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
1a760 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1a770 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
1a780 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a  ITE_ENABLE_FTS3.
1a790 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1a7a0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
1a7b0 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
1a7c0 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
1a7d0 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
1a7e0 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
1a7f0 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
1a800 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
1a810 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
1a820 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1a830 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
1a840 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
1a850 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
1a860 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
1a870 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
1a880 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
1a890 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
1a8a0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1a8b0 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
1a8c0 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
1a8d0 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
1a8e0 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
1a8f0 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
1a900 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
1a910 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
1a920 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
1a930 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
1a940 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
1a950 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
1a960 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
1a970 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
1a980 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
1a990 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
1a9a0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
1a9b0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1a9c0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1a9d0 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
1a9e0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
1a9f0 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
1aa00 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1aa10 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
1aa20 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1aa30 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
1aa40 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1aa50 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1aa60 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
1aa70 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
1aa80 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
1aa90 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1aaa0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
1aab0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1aac0 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
1aad0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1aae0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1aaf0 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
1ab00 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
1ab10 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
1ab20 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1ab30 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
1ab40 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ab50 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
1ab60 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
1ab70 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
1ab80 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23  ar)(x)]).#else.#
1ab90 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1aba0 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
1abb0 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
1abc0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1abd0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
1abe0 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
1abf0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1ac00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ac10 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
1ac20 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
1ac30 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1ac40 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
1ac50 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
1ac60 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1ac70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1ac80 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
1ac90 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
1aca0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1acb0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
1acc0 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
1acd0 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
1ace0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1acf0 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
1ad00 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
1ad10 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1ad20 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
1ad30 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70  ernal function p
1ad40 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74  rototypes.*/.int
1ad50 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
1ad60 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
1ad70 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
1ad80 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72   sqlite3IsNumber
1ad90 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  (const char*, in
1ada0 74 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  t*, u8);.int sql
1adb0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
1adc0 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
1add0 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
1ade0 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
1adf0 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
1ae00 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
1ae10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1ae20 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
1ae30 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1ae40 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  oc(int);.void *s
1ae50 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
1ae60 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1ae70 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1ae80 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1ae90 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1aea0 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
1aeb0 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
1aec0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1aed0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1aee0 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
1aef0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
1af00 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1af10 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  r*, int);.void *
1af20 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
1af30 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  oid*, int);.void
1af40 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1af50 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
1af60 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1af70 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1af80 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
1af90 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1afa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
1afb0 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
1afc0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1afd0 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
1afe0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1aff0 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
1b000 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
1b010 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
1b020 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
1b030 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
1b040 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
1b050 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
1b060 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
1b070 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
1b080 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1b090 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
1b0a0 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ault(void);.void
1b0b0 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
1b0c0 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
1b0d0 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
1b0e0 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73  *)(void));.int s
1b0f0 71 6c 69 74 65 33 4d 65 6d 6f 72 79 41 6c 61 72  qlite3MemoryAlar
1b100 6d 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 2a  m(void (*)(void*
1b110 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c  , sqlite3_int64,
1b120 20 69 6e 74 29 2c 20 76 6f 69 64 2a 2c 20 73 71   int), void*, sq
1b130 6c 69 74 65 33 5f 69 6e 74 36 34 29 3b 0a 0a 2f  lite3_int64);../
1b140 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
1b150 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
1b160 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
1b170 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
1b180 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
1b190 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
1b1a0 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
1b1b0 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
1b1c0 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
1b1d0 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
1b1e0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
1b1f0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
1b200 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
1b210 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
1b220 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
1b230 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
1b240 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
1b250 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1b260 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
1b270 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
1b280 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1b290 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
1b2a0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1b2b0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
1b2c0 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
1b2d0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1b2e0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
1b2f0 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
1b300 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
1b310 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
1b320 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65  e(D,P)       .#e
1b330 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1b340 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
1b350 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
1b360 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
1b370 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b380 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
1b390 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
1b3a0 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
1b3b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1b3c0 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
1b3d0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1b3e0 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23  e(D,P).#endif..#
1b3f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1b400 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
1b410 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
1b420 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
1b430 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
1b440 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1b450 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
1b460 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
1b470 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
1b480 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
1b490 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65  emsys5(void);.#e
1b4a0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
1b4b0 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
1b4c0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1b4d0 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
1b4e0 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
1b4f0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
1b500 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 2a 73 71  utex_methods *sq
1b510 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76  lite3NoopMutex(v
1b520 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
1b530 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75  mutex *sqlite3Mu
1b540 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20  texAlloc(int);. 
1b550 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
1b560 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69  xInit(void);.  i
1b570 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45  nt sqlite3MutexE
1b580 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  nd(void);.#endif
1b590 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ..int sqlite3Sta
1b5a0 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
1b5b0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
1b5c0 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  sAdd(int, int);.
1b5d0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
1b5e0 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b  usSet(int, int);
1b5f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1b600 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
1b610 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  OINT.  int sqlit
1b620 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b  e3IsNaN(double);
1b630 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1b640 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20  sqlite3IsNaN(X) 
1b650 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   0.#endif..void 
1b660 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
1b670 53 74 72 41 63 63 75 6d 2a 2c 20 69 6e 74 2c 20  StrAccum*, int, 
1b680 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
1b690 6c 69 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  list);.#ifndef S
1b6a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
1b6b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
1b6c0 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
1b6d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1b6e0 29 3b 0a 23 65 6e 64 69 66 0a 63 68 61 72 20 2a  );.#endif.char *
1b6f0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
1b700 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1b710 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
1b720 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
1b730 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1b740 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
1b750 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41  .char *sqlite3MA
1b760 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c  ppendf(sqlite3*,
1b770 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
1b780 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69  *,...);.#if defi
1b790 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
1b7a0 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
1b7b0 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
1b7c0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
1b7d0 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
1b7e0 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
1b7f0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1b800 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
1b810 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
1b820 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
1b830 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
1b840 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
1b850 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
1b860 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1b870 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
1b880 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
1b890 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1b8a0 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
1b8b0 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
1b8c0 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
1b8d0 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
1b8e0 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
1b8f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
1b900 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
1b910 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
1b920 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
1b930 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
1b940 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
1b950 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
1b960 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1b970 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
1b980 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
1b990 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
1b9a0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
1b9b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1b9c0 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
1b9d0 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
1b9e0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1b9f0 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
1ba00 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
1ba10 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
1ba20 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
1ba30 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1ba40 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1ba50 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
1ba60 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
1ba70 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
1ba80 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1ba90 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
1baa0 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
1bab0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
1bac0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1bad0 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
1bae0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
1baf0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
1bb00 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
1bb10 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
1bb20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1bb30 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
1bb40 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
1bb50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1bb60 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
1bb70 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
1bb80 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
1bb90 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
1bba0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1bbb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1bbc0 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
1bbd0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1bbe0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1bbf0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1bc00 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
1bc10 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
1bc20 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1bc30 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
1bc40 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1bc50 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1bc60 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
1bc70 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
1bc80 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1bc90 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
1bca0 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
1bcb0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
1bcc0 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
1bcd0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1bce0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1bcf0 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  3ResetInternalSc
1bd00 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 20 69  hema(sqlite3*, i
1bd10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1bd20 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  3BeginParse(Pars
1bd30 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
1bd40 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
1bd50 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
1bd60 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  e3*);.Table *sql
1bd70 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53  ite3ResultSetOfS
1bd80 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c  elect(Parse*,Sel
1bd90 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
1bda0 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
1bdb0 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
1bdc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
1bdd0 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
1bde0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
1bdf0 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
1be00 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1be10 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b  olumn(Parse*,Tok
1be20 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1be30 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
1be40 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
1be50 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
1be60 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
1be70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
1be80 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1be90 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
1bea0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
1beb0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1bec0 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  te3AddColumnType
1bed0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
1bee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1bef0 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72  DefaultValue(Par
1bf00 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  se*,ExprSpan*);.
1bf10 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1bf20 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
1bf30 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
1bf40 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
1bf50 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1bf60 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  oken*,Select*);.
1bf70 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
1bf80 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
1bf90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
1bfa0 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
1bfb0 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
1bfc0 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
1bfd0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
1bfe0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
1bff0 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
1c000 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
1c010 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
1c020 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
1c030 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
1c040 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e  ize(Bitvec*);.in
1c050 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
1c060 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
1c070 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73  nt*);..RowSet *s
1c080 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
1c090 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1c0a0 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
1c0b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
1c0c0 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
1c0d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1c0e0 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
1c0f0 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
1c100 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
1c110 28 52 6f 77 53 65 74 2a 2c 20 75 38 20 69 42 61  (RowSet*, u8 iBa
1c120 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
1c130 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
1c140 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
1c150 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
1c160 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
1c170 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
1c180 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
1c190 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
1c1a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1c1b0 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
1c1c0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
1c1d0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
1c1e0 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
1c1f0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
1c200 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
1c210 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1c220 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1c230 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
1c240 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
1c250 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
1c260 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1c270 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1c280 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
1c290 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Table*);.#ifndef
1c2a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1c2b0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
1c2c0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
1c2d0 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
1c2e0 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
1c2f0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
1c300 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
1c310 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
1c320 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c330 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
1c340 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
1c350 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
1c360 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
1c370 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
1c380 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
1c390 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
1c3a0 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
1c3b0 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  t*, int);.void *
1c3c0 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f  sqlite3ArrayAllo
1c3d0 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f  cate(sqlite3*,vo
1c3e0 69 64 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  id*,int,int,int*
1c3f0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
1c400 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
1c410 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
1c420 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
1c430 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
1c440 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
1c450 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
1c460 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1c470 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
1c480 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1c490 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
1c4a0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1c4b0 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
1c4c0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
1c4d0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1c4e0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1c4f0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
1c500 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
1c510 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
1c520 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c550 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
1c560 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
1c570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1c580 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
1c590 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
1c5a0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e   *, Token *);.in
1c5b0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
1c5c0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
1c5d0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
1c5e0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
1c5f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
1c600 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
1c610 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1c620 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
1c630 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
1c640 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
1c650 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
1c660 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
1c670 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1c680 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
1c690 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1c6a0 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
1c6b0 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
1c6c0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1c6d0 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
1c6e0 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
1c6f0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
1c700 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
1c710 6e 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  n*, int, int);.v
1c720 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
1c730 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
1c740 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
1c750 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
1c760 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
1c770 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
1c780 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
1c790 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
1c7a0 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
1c7b0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
1c7c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1c7d0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
1c7e0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 45  ,ExprList*,int,E
1c7f0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
1c800 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
1c810 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1c820 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
1c830 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
1c840 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
1c850 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
1c860 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
1c870 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1c880 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1c890 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
1c8a0 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
1c8b0 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
1c8c0 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
1c8d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
1c8e0 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
1c8f0 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
1c900 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
1c910 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
1c920 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
1c930 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
1c940 20 45 78 70 72 20 2a 2c 20 45 78 70 72 4c 69 73   Expr *, ExprLis
1c950 74 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  t *, Expr *, Exp
1c960 72 20 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  r *, char *);.#e
1c970 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
1c980 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
1c990 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
1c9a0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1c9b0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
1c9c0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
1c9d0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
1c9e0 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
1c9f0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
1ca00 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1ca10 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73  , Expr*, ExprLis
1ca20 74 2a 2a 2c 20 75 31 36 29 3b 0a 76 6f 69 64 20  t**, u16);.void 
1ca30 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
1ca40 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1ca50 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1ca60 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
1ca70 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1ca80 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1ca90 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
1caa0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
1cab0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1cac0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43  sqlite3ExprCodeC
1cad0 6f 70 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  opy(Parse*, int,
1cae0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1caf0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1cb00 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69  eStore(Parse*, i
1cb10 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1cb20 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1cb30 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29  achePush(Parse*)
1cb40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1cb50 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65  prCachePop(Parse
1cb60 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1cb70 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65  lite3ExprCacheRe
1cb80 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  move(Parse*, int
1cb90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1cba0 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
1cbb0 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  ar(Parse*);.void
1cbc0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1cbd0 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  eAffinityChange(
1cbe0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1cbf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1cc00 78 70 72 48 61 72 64 43 6f 70 79 28 50 61 72 73  xprHardCopy(Pars
1cc10 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74  e*,int,int);.int
1cc20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1cc30 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1cc40 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1cc50 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
1cc60 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1cc70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1cc80 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
1cc90 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1cca0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1ccb0 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
1ccc0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1ccd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1cce0 45 78 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74  ExprCodeConstant
1ccf0 73 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  s(Parse*, Expr*)
1cd00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1cd10 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
1cd20 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
1cd30 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1cd40 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
1cd50 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
1cd60 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1cd70 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
1cd80 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
1cd90 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
1cda0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
1cdb0 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
1cdc0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1cdd0 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
1cde0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
1cdf0 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20  able(Parse*,int 
1ce00 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61  isView,const cha
1ce10 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
1ce20 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
1ce30 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
1ce40 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1ce50 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1ce60 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1ce70 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
1ce80 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
1ce90 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
1cea0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
1ceb0 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
1cec0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
1ced0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1cee0 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29  e3Vacuum(Parse*)
1cef0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
1cf00 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
1cf10 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a  qlite3*);.char *
1cf20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
1cf30 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
1cf40 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
1cf50 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45  te3ExprCompare(E
1cf60 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xpr*, Expr*);.in
1cf70 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
1cf80 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
1cf90 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
1cfa0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1cfb0 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
1cfc0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
1cfd0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1cfe0 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
1cff0 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
1d000 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
1d010 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
1d020 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Vdbe(Parse*);.vo
1d030 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61  id sqlite3PrngSa
1d040 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  veState(void);.v
1d050 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
1d060 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64  estoreState(void
1d070 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1d080 72 6e 67 52 65 73 65 74 53 74 61 74 65 28 76 6f  rngResetState(vo
1d090 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1d0a0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
1d0b0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1d0c0 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
1d0d0 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74  hema(Parse*, int
1d0e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1d0f0 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
1d100 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1d110 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
1d120 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
1d130 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1d140 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
1d150 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
1d160 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
1d170 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
1d180 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
1d190 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
1d1a0 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
1d1b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1d1c0 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
1d1d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1d1e0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
1d1f0 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
1d200 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
1d210 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
1d220 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1d230 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
1d240 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
1d250 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1d260 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
1d270 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1d280 74 65 33 45 78 70 72 43 6f 64 65 49 73 4e 75 6c  te3ExprCodeIsNul
1d290 6c 4a 75 6d 70 28 56 64 62 65 2a 2c 20 63 6f 6e  lJump(Vdbe*, con
1d2a0 73 74 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  st Expr*, int, i
1d2b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1d2c0 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
1d2d0 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
1d2e0 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
1d2f0 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
1d300 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
1d310 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1d320 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72  ateRowDelete(Par
1d330 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1d340 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 54 72 69 67  , int, int, Trig
1d350 67 65 72 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  ger *, int);.voi
1d360 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
1d370 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
1d380 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1d390 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  int, int*);.int 
1d3a0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
1d3b0 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
1d3c0 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
1d3d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d3e0 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
1d3f0 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
1d400 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
1d410 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d430 20 20 20 20 20 20 20 20 20 69 6e 74 2a 2c 69 6e           int*,in
1d440 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  t,int,int,int,in
1d450 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1d460 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69  3CompleteInserti
1d470 6f 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  on(Parse*, Table
1d480 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1d490 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1d4a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
1d4b0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
1d4c0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
1d4d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1d4e0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
1d4f0 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
1d500 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1d510 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74  void sqlite3Mult
1d520 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a  iWrite(Parse*);.
1d530 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41  void sqlite3MayA
1d540 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  bort(Parse*);.vo
1d550 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f  id sqlite3HaltCo
1d560 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
1d570 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74   int, char*, int
1d580 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1d590 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
1d5a0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
1d5b0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
1d5c0 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
1d5d0 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
1d5e0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1d5f0 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
1d600 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
1d610 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
1d620 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
1d630 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
1d640 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
1d650 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
1d660 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
1d670 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75  ;.void sqlite3Fu
1d680 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63  ncDefInsert(Func
1d690 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65  DefHash*, FuncDe
1d6a0 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  f*);.FuncDef *sq
1d6b0 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
1d6c0 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
1d6d0 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75   char*,int,int,u
1d6e0 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  8,int);.void sql
1d6f0 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
1d700 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
1d710 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1d720 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
1d730 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
1d740 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1d750 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46  3RegisterGlobalF
1d760 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
1d770 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
1d780 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
1d790 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
1d7a0 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
1d7b0 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
1d7c0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
1d7d0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
1d7e0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
1d7f0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
1d800 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
1d810 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
1d820 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
1d830 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
1d840 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
1d850 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
1d860 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
1d870 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
1d880 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
1d890 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
1d8a0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
1d8b0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
1d8c0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
1d8f0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
1d900 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
1d910 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
1d920 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
1d930 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
1d940 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
1d950 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1d960 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
1d970 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
1d980 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
1d990 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
1d9a0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
1d9b0 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
1d9c0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
1d9d0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
1d9e0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
1d9f0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
1da00 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
1da10 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
1da20 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
1da30 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
1da40 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
1da50 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
1da60 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
1da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da80 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1da90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
1daa0 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
1dab0 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
1dac0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
1dad0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1dae0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
1daf0 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
1db00 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
1db10 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
1db20 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1db30 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
1db40 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
1db50 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
1db60 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1db70 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
1db80 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
1db90 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
1dba0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1dbb0 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
1dbc0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
1dbd0 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc00 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
1dc10 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
1dc20 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
1dc30 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
1dc40 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
1dc50 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
1dc60 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
1dc70 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1dc80 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
1dc90 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
1dca0 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
1dcb0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
1dcc0 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
1dcd0 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
1dce0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
1dcf0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
1dd00 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
1dd10 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
1dd20 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
1dd30 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
1dd40 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
1dd50 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
1dd60 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
1dd70 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
1dd80 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
1dd90 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
1dda0 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73  evel : (p)).#els
1ddb0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1ddc0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
1ddd0 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
1dde0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
1ddf0 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
1de00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1de10 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
1de20 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1de30 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
1de40 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
1de50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1de60 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
1de70 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
1de80 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,I).# define sql
1de90 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
1dea0 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44  erDirect(A,B,C,D
1deb0 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73  ,E,F).# define s
1dec0 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
1ded0 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69  t(X, Y) 0.# defi
1dee0 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
1def0 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64  oplevel(p) p.# d
1df00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
1df10 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c  ggerColmask(A,B,
1df20 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e  C,D,E,F,G) 0.#en
1df30 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
1df40 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  JoinType(Parse*,
1df50 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
1df60 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
1df70 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65  qlite3CreateFore
1df80 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  ignKey(Parse*, E
1df90 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
1dfa0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1dfb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1dfc0 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50  eferForeignKey(P
1dfd0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  arse*, int);.#if
1dfe0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1dff0 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
1e000 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
1e010 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70  hRead(Parse*,Exp
1e020 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69  r*,Schema*,SrcLi
1e030 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  st*);.  int sqli
1e040 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72  te3AuthCheck(Par
1e050 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  se*,int, const c
1e060 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
1e070 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
1e080 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
1e090 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50  uthContextPush(P
1e0a0 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65  arse*, AuthConte
1e0b0 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  xt*, const char*
1e0c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1e0d0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
1e0e0 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20  AuthContext*);. 
1e0f0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
1e100 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20  ReadCol(Parse*, 
1e110 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
1e120 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
1e130 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1e140 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
1e150 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
1e160 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
1e170 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
1e180 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
1e190 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
1e1a0 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
1e1b0 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
1e1c0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
1e1d0 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
1e1e0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
1e1f0 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
1e200 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
1e210 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
1e220 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
1e230 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  se*, Expr*);.int
1e240 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63   sqlite3BtreeFac
1e250 74 6f 72 79 28 73 71 6c 69 74 65 33 20 2a 64 62  tory(sqlite3 *db
1e260 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  , const char *zF
1e270 69 6c 65 6e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ilename,.       
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e290 69 6e 74 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c  int omitJournal,
1e2a0 20 69 6e 74 20 6e 43 61 63 68 65 2c 20 69 6e 74   int nCache, int
1e2b0 20 66 6c 61 67 73 2c 20 42 74 72 65 65 20 2a 2a   flags, Btree **
1e2c0 70 70 42 74 72 65 65 29 3b 0a 69 6e 74 20 73 71  ppBtree);.int sq
1e2d0 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
1e2e0 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
1e2f0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
1e300 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
1e310 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
1e320 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
1e330 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
1e340 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
1e350 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
1e360 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1e370 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
1e380 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1e390 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
1e3a0 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
1e3b0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1e3c0 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
1e3d0 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
1e3e0 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
1e3f0 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
1e400 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 29  har *z, double*)
1e410 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1e420 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
1e430 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
1e440 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69  qlite3FitsIn64Bi
1e450 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  ts(const char *,
1e460 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1e470 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
1e480 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
1e490 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e  , int nChar);.in
1e4a0 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61  t sqlite3Utf8Cha
1e4b0 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  rLen(const char 
1e4c0 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74  *pData, int nByt
1e4d0 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  e);.int sqlite3U
1e4e0 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38  tf8Read(const u8
1e4f0 2a 2c 20 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  *, const u8**);.
1e500 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
1e510 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
1e520 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
1e530 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
1e540 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
1e550 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
1e560 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
1e570 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
1e580 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
1e590 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64  .c.** file.  Cod
1e5a0 65 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65  e should use the
1e5b0 20 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c   MACRO forms bel
1e5c0 6f 77 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e  ow, as the Varin
1e5d0 74 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20  t32 versions.** 
1e5e0 61 72 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73  are coded to ass
1e5f0 75 6d 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62  ume the single b
1e600 79 74 65 20 63 61 73 65 20 69 73 20 61 6c 72 65  yte case is alre
1e610 61 64 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69  ady handled (whi
1e620 63 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f  ch .** the MACRO
1e630 20 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a   form does)..*/.
1e640 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
1e650 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
1e660 61 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73  ar*, u64);.int s
1e670 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
1e680 32 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  2(unsigned char*
1e690 2c 20 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74  , u32);.u8 sqlit
1e6a0 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
1e6b0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1e6c0 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
1e6d0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
1e6e0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
1e6f0 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
1e700 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
1e710 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
1e720 0a 2a 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f  .** The header o
1e730 66 20 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69  f a record consi
1e740 73 74 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63  sts of a sequenc
1e750 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
1e760 68 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54  h integers..** T
1e770 68 65 73 65 20 69 6e 74 65 67 65 72 73 20 61 72  hese integers ar
1e780 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20  e almost always 
1e790 73 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e  small and are en
1e7a0 63 6f 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c  coded as a singl
1e7b0 65 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66  e byte..** The f
1e7c0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
1e7d0 74 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74  take advantage t
1e7e0 68 69 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76  his fact to prov
1e7f0 69 64 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64  ide a fast encod
1e800 65 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20  e.** and decode 
1e810 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 73 20  of the integers 
1e820 69 6e 20 61 20 72 65 63 6f 72 64 20 68 65 61 64  in a record head
1e830 65 72 2e 20 20 49 74 20 69 73 20 66 61 73 74 65  er.  It is faste
1e840 72 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e  r for the common
1e850 0a 2a 2a 20 63 61 73 65 20 77 68 65 72 65 20 74  .** case where t
1e860 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 61 20  he integer is a 
1e870 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74  single byte.  It
1e880 20 69 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f   is a little slo
1e890 77 65 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  wer when the.** 
1e8a0 69 6e 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f  integer is two o
1e8b0 72 20 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42  r more bytes.  B
1e8c0 75 74 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73  ut overall it is
1e8d0 20 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54   faster..**.** T
1e8e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70  he following exp
1e8f0 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75  ressions are equ
1e900 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20  ivalent:.**.**  
1e910 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65     x = sqlite3Ge
1e920 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42  tVarint32( A, &B
1e930 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73   );.**     x = s
1e940 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
1e950 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a  2( A, B );.**.**
1e960 20 20 20 20 20 78 20 3d 20 67 65 74 56 61 72 69       x = getVari
1e970 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a  nt32( A, B );.**
1e980 20 20 20 20 20 78 20 3d 20 70 75 74 56 61 72 69       x = putVari
1e990 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a  nt32( A, B );.**
1e9a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
1e9b0 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 28 75  arint32(A,B)  (u
1e9c0 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
1e9d0 30 29 20 3f 20 28 28 42 29 20 3d 20 28 75 33 32  0) ? ((B) = (u32
1e9e0 29 2a 28 41 29 29 2c 31 20 3a 20 73 71 6c 69 74  )*(A)),1 : sqlit
1e9f0 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
1ea00 29 2c 20 28 75 33 32 20 2a 29 26 28 42 29 29 29  ), (u32 *)&(B)))
1ea10 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
1ea20 6e 74 33 32 28 41 2c 42 29 20 20 28 75 38 29 28  nt32(A,B)  (u8)(
1ea30 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
1ea40 78 38 30 29 20 3f 20 28 2a 28 41 29 20 3d 20 28  x80) ? (*(A) = (
1ea50 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
1ea60 29 29 2c 31 20 3a 20 73 71 6c 69 74 65 33 50 75  )),1 : sqlite3Pu
1ea70 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 20 28  tVarint32((A), (
1ea80 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74  B))).#define get
1ea90 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
1eaa0 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69  3GetVarint.#defi
1eab0 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20  ne putVarint    
1eac0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
1ead0 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ...const char *s
1eae0 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
1eaf0 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49  ityStr(Vdbe *, I
1eb00 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ndex *);.void sq
1eb10 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69  lite3TableAffini
1eb20 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 54 61  tyStr(Vdbe *, Ta
1eb30 62 6c 65 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c  ble *);.char sql
1eb40 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e  ite3CompareAffin
1eb50 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c  ity(Expr *pExpr,
1eb60 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74   char aff2);.int
1eb70 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
1eb80 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45  inityOk(Expr *pE
1eb90 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66  xpr, char idx_af
1eba0 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71  finity);.char sq
1ebb0 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
1ebc0 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
1ebd0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
1ebe0 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
1ebf0 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  64*);.void sqlit
1ec00 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
1ec10 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
1ec20 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73  r*,...);.void *s
1ec30 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
1ec40 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
1ec50 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
1ec60 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
1ec70 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
1ec80 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
1ec90 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 63 6f  *, Token **);.co
1eca0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
1ecb0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
1ecc0 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
1ecd0 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
1ece0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
1ecf0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
1ed00 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
1ed10 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
1ed20 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
1ed30 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
1ed40 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
1ed50 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
1ed60 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
1ed70 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
1ed80 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
1ed90 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
1eda0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 65 74   *sqlite3ExprSet
1edb0 43 6f 6c 6c 28 50 61 72 73 65 20 2a 70 50 61 72  Coll(Parse *pPar
1edc0 73 65 2c 20 45 78 70 72 20 2a 2c 20 54 6f 6b 65  se, Expr *, Toke
1edd0 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
1ede0 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
1edf0 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
1ee00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
1ee10 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
1ee20 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
1ee30 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
1ee40 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
1ee50 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
1ee60 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  ;..const void *s
1ee70 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
1ee80 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
1ee90 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
1eea0 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  ValueBytes(sqlit
1eeb0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
1eec0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
1eed0 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f  eSetStr(sqlite3_
1eee0 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  value*, int, con
1eef0 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20  st void *,u8, . 
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef10 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
1ef20 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
1ef30 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71  ite3ValueFree(sq
1ef40 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73  lite3_value*);.s
1ef50 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71  qlite3_value *sq
1ef60 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71  lite3ValueNew(sq
1ef70 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a  lite3 *);.char *
1ef80 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
1ef90 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
1efa0 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29   void*, int, u8)
1efb0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1efc0 45 4e 41 42 4c 45 5f 53 54 41 54 32 0a 63 68 61  ENABLE_STAT2.cha
1efd0 72 20 2a 73 71 6c 69 74 65 33 55 74 66 38 74 6f  r *sqlite3Utf8to
1efe0 31 36 28 73 71 6c 69 74 65 33 20 2a 2c 20 75 38  16(sqlite3 *, u8
1eff0 2c 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  , char *, int, i
1f000 6e 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nt *);.#endif.in
1f010 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
1f020 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
1f030 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
1f040 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
1f050 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
1f060 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
1f070 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
1f080 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
1f090 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
1f0a0 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
1f0b0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
1f0c0 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
1f0d0 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
1f0e0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
1f0f0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
1f100 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
1f110 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
1f120 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
1f130 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
1f140 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
1f150 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
1f160 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
1f170 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  ig;.extern SQLIT
1f180 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73  E_WSD FuncDefHas
1f190 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46  h sqlite3GlobalF
1f1a0 75 6e 63 74 69 6f 6e 73 3b 0a 65 78 74 65 72 6e  unctions;.extern
1f1b0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64   int sqlite3Pend
1f1c0 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a  ingByte;.#endif.
1f1d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
1f1e0 50 61 67 65 4d 6f 76 65 64 28 44 62 2a 2c 20 69  PageMoved(Db*, i
1f1f0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1f200 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
1f210 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
1f220 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1f230 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
1f240 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
1f250 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
1f260 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
1f270 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
1f280 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
1f290 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67  oken(const unsig
1f2a0 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20  ned char *, int 
1f2b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f2c0 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73  NestedParse(Pars
1f2d0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
1f2e0 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
1f2f0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
1f300 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69  dStatements(sqli
1f310 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
1f320 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
1f330 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
1f340 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1f350 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72   sqlite3SelectPr
1f360 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ep(Parse*, Selec
1f370 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
1f380 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
1f390 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
1f3a0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
1f3b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f3c0 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
1f3d0 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
1f3e0 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
1f3f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
1f400 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
1f410 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
1f420 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
1f430 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
1f440 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
1f450 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
1f460 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
1f470 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1f480 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
1f490 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
1f4a0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
1f4b0 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
1f4c0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
1f4d0 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
1f4e0 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
1f4f0 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
1f500 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
1f510 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
1f520 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
1f530 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
1f540 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f550 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
1f560 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
1f570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
1f580 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
1f590 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
1f5a0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
1f5b0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
1f5c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1f5d0 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
1f5e0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
1f5f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
1f600 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
1f610 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
1f620 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
1f630 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 49 6e 64  IndexSamples(Ind
1f640 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
1f650 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
1f660 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
1f670 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
1f680 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
1f690 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
1f6a0 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
1f6b0 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
1f6c0 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
1f6d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e  .void sqlite3Min
1f6e0 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50  imumFileFormat(P
1f6f0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
1f700 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
1f710 68 65 6d 61 46 72 65 65 28 76 6f 69 64 20 2a 29  hemaFree(void *)
1f720 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
1f730 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
1f740 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
1f750 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
1f760 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
1f770 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
1f780 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
1f790 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50 61  3IndexKeyinfo(Pa
1f7a0 72 73 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  rse *, Index *);
1f7b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
1f7c0 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a  teFunc(sqlite3 *
1f7d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
1f7e0 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a  int, int, void *
1f7f0 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  , .  void (*)(sq
1f800 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
1f810 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
1f820 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
1f830 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
1f840 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
1f850 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a  lue **), void (*
1f860 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
1f870 74 2a 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t*));.int sqlite
1f880 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
1f890 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
1f8a0 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
1f8b0 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
1f8c0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
1f8d0 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
1f8e0 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ccum*, char*, in
1f8f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1f900 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
1f910 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  end(StrAccum*,co
1f920 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
1f930 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
1f940 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41  AccumFinish(StrA
1f950 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
1f960 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65  ite3StrAccumRese
1f970 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  t(StrAccum*);.vo
1f980 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
1f990 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44  DestInit(SelectD
1f9a0 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45  est*,int,int);.E
1f9b0 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61  xpr *sqlite3Crea
1f9c0 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c  teColumnExpr(sql
1f9d0 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20  ite3 *, SrcList 
1f9e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76  *, int, int);..v
1f9f0 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
1fa00 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33  pRestart(sqlite3
1fa10 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64  _backup *);.void
1fa20 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70   sqlite3BackupUp
1fa30 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63  date(sqlite3_bac
1fa40 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e  kup *, Pgno, con
1fa50 73 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  st u8 *);../*.**
1fa60 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
1fa70 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65  o the LEMON-gene
1fa80 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a  rated parser.*/.
1fa90 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72  void *sqlite3Par
1faa0 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a  serAlloc(void*(*
1fab0 29 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64  )(size_t));.void
1fac0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
1fad0 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
1fae0 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
1faf0 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
1fb00 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
1fb10 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
1fb20 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
1fb30 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
1fb40 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
1fb50 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
1fb60 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
1fb70 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
1fb80 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
1fb90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1fba0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
1fbb0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
1fbc0 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
1fbd0 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
1fbe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
1fbf0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
1fc00 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
1fc10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
1fc20 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
1fc30 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
1fc40 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
1fc50 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
1fc60 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
1fc70 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
1fc80 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
1fc90 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
1fca0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1fcb0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
1fcc0 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
1fcd0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
1fce0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1fcf0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
1fd00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
1fd10 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
1fd20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
1fd30 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
1fd40 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
1fd50 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
1fd60 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
1fd70 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
1fd80 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
1fd90 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
1fda0 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
1fdb0 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
1fdc0 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73  (X) .#  define s
1fdd0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
1fde0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
1fdf0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
1fe00 69 73 74 28 58 29 0a 23 65 6c 73 65 0a 20 20 20  ist(X).#else.   
1fe10 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
1fe20 43 6c 65 61 72 28 54 61 62 6c 65 2a 29 3b 0a 20  Clear(Table*);. 
1fe30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
1fe40 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
1fe50 62 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 20 20 20  b, char **);.   
1fe60 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
1fe70 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
1fe80 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
1fe90 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
1fea0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
1feb0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
1fec0 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
1fed0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
1fee0 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
1fef0 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
1ff00 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
1ff10 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 20  st(sqlite3*);.# 
1ff20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
1ff30 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
1ff40 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
1ff50 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
1ff60 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  =0).#endif.void 
1ff70 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
1ff80 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
1ff90 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
1ffa0 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
1ffb0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
1ffc0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1ffd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ffe0 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
1fff0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
20000 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
20010 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
20020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
20030 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
20040 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
20050 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
20060 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
20070 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
20080 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
20090 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
200a0 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
200b0 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
200c0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
200d0 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
200e0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
200f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
20100 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
20110 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
20120 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
20130 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
20140 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
20150 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
20160 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
20170 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
20180 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
20190 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
201a0 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20  3_value**);.int 
201b0 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d  sqlite3VdbeParam
201c0 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c  eterIndex(Vdbe*,
201d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e   const char*, in
201e0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  t);.int sqlite3T
201f0 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28  ransferBindings(
20200 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20  sqlite3_stmt *, 
20210 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b  sqlite3_stmt *);
20220 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
20230 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
20240 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
20250 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
20260 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
20270 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
20280 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
20290 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
202a0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
202b0 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
202c0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
202d0 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
202e0 74 65 33 2a 29 3b 0a 56 54 61 62 6c 65 20 2a 73  te3*);.VTable *s
202f0 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
20300 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
20310 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
20320 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
20330 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 69 6e 74 20  ename(int);.int 
20340 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
20350 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  t(sqlite3*, int)
20360 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
20370 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
20380 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
20390 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a   char*,int);../*
203a0 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f   Declarations fo
203b0 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66  r functions in f
203c0 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68  key.c. All of th
203d0 65 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64  ese are replaced
203e0 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63   by.** no-op mac
203f0 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45  ros if OMIT_FORE
20400 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e  IGN_KEY is defin
20410 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
20420 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b   no foreign.** k
20430 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  ey functionality
20440 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49   is available. I
20450 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69  f OMIT_TRIGGER i
20460 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a  s defined but.**
20470 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
20480 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73  Y is not, only s
20490 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ome of the funct
204a0 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64  ions are no-oped
204b0 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73  . In.** this cas
204c0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  e foreign keys a
204d0 72 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e  re parsed, but n
204e0 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e  o other function
204f0 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f  ality is .** pro
20500 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65  vided (enforceme
20510 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61  nt of FK constra
20520 69 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68  ints requires th
20530 65 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73  e triggers sub-s
20540 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21  ystem)..*/.#if !
20550 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
20560 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
20570 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
20580 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
20590 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
205a0 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20  FkCheck(Parse*, 
205b0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
205c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
205d0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
205e0 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
205f0 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
20600 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
20610 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
20620 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
20630 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
20640 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a  kRequired(Parse*
20650 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20  , Table*, int*, 
20660 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  int);.  u32 sqli
20670 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72  te3FkOldmask(Par
20680 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  se*, Table*);.  
20690 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52  FKey *sqlite3FkR
206a0 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20  eferences(Table 
206b0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
206c0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74  ine sqlite3FkAct
206d0 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 29 0a 20 20  ions(a,b,c,d).  
206e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
206f0 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 29 0a  kCheck(a,b,c,d).
20700 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
20710 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
20720 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
20730 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
20740 2c 62 29 20 20 20 20 20 20 30 0a 20 20 23 64 65  ,b)      0.  #de
20750 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
20760 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
20770 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
20780 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
20790 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20  EIGN_KEY.  void 
207a0 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
207b0 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 20  Table*);.#else. 
207c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
207d0 46 6b 44 65 6c 65 74 65 28 61 29 0a 23 65 6e 64  FkDelete(a).#end
207e0 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
207f0 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
20800 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
20810 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
20820 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
20830 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
20840 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
20850 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
20860 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
20870 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
20880 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
20890 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
208a0 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
208b0 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
208c0 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
208d0 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
208e0 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
208f0 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
20900 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
20910 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  T.** is not defi
20920 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
20930 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
20940 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20  TIN_TEST.  void 
20950 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
20960 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
20970 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
20980 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
20990 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
209a0 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
209b0 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
209c0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
209d0 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
209e0 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69  ().#endif..#defi
209f0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
20a00 44 20 20 20 20 20 20 20 20 20 20 20 31 0a 23 64  D           1.#d
20a10 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
20a20 50 48 20 20 20 20 20 20 20 20 20 20 20 20 20 32  PH             2
20a30 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
20a40 58 5f 49 4e 44 45 58 20 20 20 20 20 20 20 20 20  X_INDEX         
20a50 20 20 33 0a 69 6e 74 20 73 71 6c 69 74 65 33 46    3.int sqlite3F
20a60 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
20a70 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a   *, Expr *, int*
20a80 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
20a90 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
20aa0 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
20ab0 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
20ac0 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
20ad0 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
20ae0 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
20af0 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
20b00 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
20b10 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
20b20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
20b30 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
20b40 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6c 73  e3_file *);.#els
20b50 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
20b60 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
20b70 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
20b80 4f 73 46 69 6c 65 29 0a 23 65 6e 64 69 66 0a 0a  OsFile).#endif..
20b90 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
20ba0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
20bb0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20  e3_file *);.int 
20bc0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
20bd0 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74  lSize(void);.int
20be0 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75   sqlite3IsMemJou
20bf0 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c  rnal(sqlite3_fil
20c00 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54  e *);..#if SQLIT
20c10 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
20c20 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  >0.  void sqlite
20c30 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28 50  3ExprSetHeight(P
20c40 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
20c50 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71  pr *p);.  int sq
20c60 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
20c70 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
20c80 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
20c90 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
20ca0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
20cb0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
20cc0 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
20cd0 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
20ce0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
20cf0 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
20d00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
20d10 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
20d20 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
20d30 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
20d40 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
20d50 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
20d60 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
20d70 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
20d80 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
20d90 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
20da0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
20db0 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
20dc0 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
20dd0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
20de0 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
20df0 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
20e00 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
20e10 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
20e20 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
20e30 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
20e40 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
20e50 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
20e60 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
20e70 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
20e80 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
20e90 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
20ea0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
20eb0 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
20ec0 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
20ed0 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
20ee0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
20ef0 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
20f00 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
20f10 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
20f20 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
20f30 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
20f40 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
20f50 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
20f60 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
20f70 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
20f80 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a  g messages. .*/.
20f90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
20fa0 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64  ABLE_IOTRACE.# d
20fb0 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
20fc0 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54    if( sqlite3IoT
20fd0 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49  race ){ sqlite3I
20fe0 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f  oTrace A; }.  vo
20ff0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  id sqlite3VdbeIO
21000 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b  TraceSql(Vdbe*);
21010 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76  .SQLITE_EXTERN v
21020 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54  oid (*sqlite3IoT
21030 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
21040 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
21050 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
21060 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21070 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
21080 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
21090 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
210a0 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
210b0 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
210c0 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
210d0 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
210e0 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
210f0 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
21100 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
21110 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
21120 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
21130 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
21140 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
21150 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
21160 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
21170 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
21180 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
21190 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
211a0 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
211b0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
211c0 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
211d0 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
211e0 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
211f0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
21200 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
21210 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
21220 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
21230 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
21240 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
21250 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
21260 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
21270 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
21280 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
21290 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
212a0 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
212b0 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
212c0 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
212d0 65 6d 65 6e 74 73 2e 0a 2a 2a 20 46 6f 72 20 65  ements..** For e
212e0 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
212f0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
21300 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
21310 28 70 2c 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  (p, MEMTYPE_HEAP
21320 29 20 29 3b 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  ) );.**.** Perha
21330 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
21340 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
21350 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
21360 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
21370 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
21380 45 5f 44 42 2e 20 20 49 66 20 61 6e 20 61 6c 6c  E_DB.  If an all
21390 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
213a0 50 45 5f 44 42 2c 20 74 68 61 74 20 6d 65 61 6e  PE_DB, that mean
213b0 73 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 0a  s it might have.
213c0 2a 2a 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ** been allocate
213d0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
213e0 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
213f0 61 74 69 6f 6e 20 77 61 73 20 74 6f 6f 20 6c 61  ation was too la
21400 72 67 65 20 6f 72 0a 2a 2a 20 6c 6f 6f 6b 61 73  rge or.** lookas
21410 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
21420 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
21430 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
21440 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
21450 73 0a 2a 2a 20 74 68 61 74 20 6d 69 67 68 74 20  s.** that might 
21460 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
21470 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
21480 20 61 72 65 20 6e 6f 74 20 70 61 73 73 65 64 20   are not passed 
21490 62 61 63 6b 20 74 6f 20 0a 2a 2a 20 6e 6f 6e 2d  back to .** non-
214a0 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
214b0 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65   routines.  Asse
214c0 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65 20  rts such as the 
214d0 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
214e0 65 0a 2a 2a 20 70 6c 61 63 65 64 20 6f 6e 20 74  e.** placed on t
214f0 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  he non-lookaside
21500 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
21510 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 20   to verify this 
21520 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a  constraint. .**.
21530 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
21540 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
21550 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
21560 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
21570 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
21580 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
21590 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
215a0 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
215b0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
215c0 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
215d0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
215e0 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
215f0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
21600 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
21610 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
21620 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
21630 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
21640 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
21650 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
21660 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
21670 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 65 6e  Type(X,Y)  1.#en
21680 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54  dif.#define MEMT
21690 59 50 45 5f 48 45 41 50 20 20 20 20 20 30 78 30  YPE_HEAP     0x0
216a0 31 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20  1    /* General 
216b0 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  heap allocations
216c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
216d0 59 50 45 5f 44 42 20 20 20 20 20 20 20 30 78 30  YPE_DB       0x0
216e0 32 20 20 20 20 2f 2a 20 41 73 73 6f 63 69 61 74  2    /* Associat
216f0 65 64 20 77 69 74 68 20 61 20 64 61 74 61 62 61  ed with a databa
21700 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
21710 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
21720 5f 53 43 52 41 54 43 48 20 20 30 78 30 34 20 20  _SCRATCH  0x04  
21730 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c    /* Scratch all
21740 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
21750 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
21760 48 45 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20  HE   0x08    /* 
21770 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
21780 61 74 69 6f 6e 73 20 2a 2f 0a 0a 23 65 6e 64 69  ations */..#endi
21790 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f  f /* _SQLITEINT_
217a0 48 5f 20 2a 2f 0a                                H_ */.