/ Hex Artifact Content
Login

Artifact a9be6badc6cd6a3c1ae54475a98661cf351ecad5:


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 52 65 74 75 72  dif../*.** Retur
2550: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
2560: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
2570: 73 20 61 20 69 6e 74 65 67 65 72 20 74 68 61 74  s a integer that
2580: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a   is too large.**
2590: 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62 69   to fit in 32-bi
25a0: 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20  ts.  This macro 
25b0: 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
25c0: 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63 61  f various testca
25d0: 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20 74  se().** macros t
25e0: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77 65  o verify that we
25f0: 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51 4c   have tested SQL
2600: 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66 69  ite for large-fi
2610: 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23  le support..*/.#
2620: 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49 4e  define IS_BIG_IN
2630: 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69 36  T(X)  (((X)&~(i6
2640: 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d 30  4)0xffffffff)!=0
2650: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 63  )../*.** The mac
2660: 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69 73  ro unlikely() is
2670: 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75 72   a hint that sur
2680: 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61 6e  rounds a boolean
2690: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 74  .** expression t
26a0: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 66  hat is usually f
26b0: 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69 6b  alse.  Macro lik
26c0: 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73 0a  ely() surrounds.
26d0: 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ** a boolean exp
26e0: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
26f0: 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20 47  usually true.  G
2700: 43 43 20 69 73 20 61 62 6c 65 20 74 6f 0a 2a 2a  CC is able to.**
2710: 20 75 73 65 20 74 68 65 73 65 20 68 69 6e 74 73   use these hints
2720: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
2730: 74 65 72 20 63 6f 64 65 2c 20 73 6f 6d 65 74 69  ter code, someti
2740: 6d 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  mes..*/.#if defi
2750: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26  ned(__GNUC__) &&
2760: 20 30 0a 23 20 64 65 66 69 6e 65 20 6c 69 6b 65   0.# define like
2770: 6c 79 28 58 29 20 20 20 20 5f 5f 62 75 69 6c 74  ly(X)    __built
2780: 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c 31 29  in_expect((X),1)
2790: 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  .# define unlike
27a0: 6c 79 28 58 29 20 20 5f 5f 62 75 69 6c 74 69 6e  ly(X)  __builtin
27b0: 5f 65 78 70 65 63 74 28 28 58 29 2c 30 29 0a 23  _expect((X),0).#
27c0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6c 69  else.# define li
27d0: 6b 65 6c 79 28 58 29 20 20 20 20 21 21 28 58 29  kely(X)    !!(X)
27e0: 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  .# define unlike
27f0: 6c 79 28 58 29 20 20 21 21 28 58 29 0a 23 65 6e  ly(X)  !!(X).#en
2800: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
2810: 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e 63 6c 75  qlite3.h".#inclu
2820: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
2830: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
2840: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
2850: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
2860: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
2870: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
2880: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
2890: 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68  nclude <stddef.h
28a0: 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  >../*.** If comp
28b0: 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63  iling for a proc
28c0: 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73  essor that lacks
28d0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
28e0: 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73  support,.** subs
28f0: 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66  titute integer f
2900: 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e  or floating-poin
2910: 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  t.*/.#ifdef SQLI
2920: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
2930: 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20  _POINT.# define 
2940: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e  double sqlite_in
2950: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f  t64.# define flo
2960: 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  at sqlite_int64.
2970: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
2980: 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f  BLE_TYPE sqlite_
2990: 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53  int64.# ifndef S
29a0: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
29b0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
29c0: 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74  BIG_DBL (((sqlit
29d0: 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29  e3_int64)1)<<50)
29e0: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
29f0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41  e SQLITE_OMIT_DA
2a00: 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23  TETIME_FUNCS 1.#
2a10: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
2a20: 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e  MIT_TRACE 1.# un
2a30: 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44  def SQLITE_MIXED
2a40: 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c  _ENDIAN_64BIT_FL
2a50: 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  OAT.# undef SQLI
2a60: 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65  TE_HAVE_ISNAN.#e
2a70: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2a80: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65  ITE_BIG_DBL.# de
2a90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
2aa0: 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69  DBL (1e99).#endi
2ab0: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45  f../*.** OMIT_TE
2ac0: 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31  MPDB is set to 1
2ad0: 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
2ae0: 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65  TEMPDB is define
2af0: 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72  d, or 0.** after
2b00: 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69  ward. Having thi
2b10: 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75  s macro allows u
2b20: 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43  s to cause the C
2b30: 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f   compiler .** to
2b40: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
2b50: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
2b60: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
2b70: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
2b80: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2b90: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
2ba0: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
2bb0: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
2bc0: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
2bd0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2be0: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
2bf0: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
2c00: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
2c10: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
2c20: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
2c30: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
2c40: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
2c50: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
2c60: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
2c70: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
2c80: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
2c90: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
2ca0: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
2cb0: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
2cc0: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
2cd0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
2ce0: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
2cf0: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
2d00: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
2d10: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
2d20: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2d30: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 31 0a 23 65  FILE_FORMAT 1.#e
2d40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
2d50: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
2d60: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
2d70: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
2d80: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
2d90: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
2da0: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
2db0: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
2dc0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
2dd0: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
2de0: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
2df0: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
2e00: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
2e10: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
2e20: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
2e30: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
2e40: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
2e50: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
2e60: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
2e70: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
2e80: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e90: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
2ea0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
2eb0: 53 54 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a  STORE 1.#endif..
2ec0: 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e  /*.** GCC does n
2ed0: 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66  ot define the of
2ee0: 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73  fsetof() macro s
2ef0: 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20  o we'll have to 
2f00: 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76  do it.** ourselv
2f10: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f  es..*/.#ifndef o
2f20: 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20  ffsetof.#define 
2f30: 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54 55  offsetof(STRUCTU
2f40: 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29  RE,FIELD) ((int)
2f50: 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55 43  ((char*)&((STRUC
2f60: 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29  TURE*)0)->FIELD)
2f70: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
2f80: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
2f90: 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65  this machine use
2fa0: 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c  s EBCDIC.  (Yes,
2fb0: 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a   believe it or.*
2fc0: 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65  * not, there are
2fd0: 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20   still machines 
2fe0: 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75  out there that u
2ff0: 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23  se EBCDIC.).*/.#
3000: 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27  if 'A' == '\301'
3010: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3020: 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a  _EBCDIC 1.#else.
3030: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3040: 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a  ASCII 1.#endif..
3050: 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f  /*.** Integers o
3060: 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20  f known sizes.  
3070: 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d  These typedefs m
3080: 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20  ight change for 
3090: 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a  architectures.**
30a0: 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73   where the sizes
30b0: 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65   very.  Preproce
30c0: 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20  ssor macros are 
30d0: 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61  available so tha
30e0: 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63  t the.** types c
30f0: 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74  an be convenient
3100: 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20  ly redefined at 
3110: 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c  compile-type.  L
3120: 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
3130: 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49          cc '-DUI
3140: 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20  NTPTR_TYPE=long 
3150: 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f  long int' ....*/
3160: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f  .#ifndef UINT32_
3170: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
3180: 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65  E_UINT32_T.#  de
3190: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
31a0: 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65   uint32_t.# else
31b0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
31c0: 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  2_TYPE unsigned 
31d0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
31e0: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31  if.#ifndef UINT1
31f0: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
3200: 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20  AVE_UINT16_T.#  
3210: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
3220: 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c  PE uint16_t.# el
3230: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
3240: 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T16_TYPE unsigne
3250: 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  d short int.# en
3260: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
3270: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  ef INT16_TYPE.# 
3280: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36  ifdef HAVE_INT16
3290: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
32a0: 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a  16_TYPE int16_t.
32b0: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
32c0: 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72   INT16_TYPE shor
32d0: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
32e0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
32f0: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
3300: 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20  HAVE_UINT8_T.#  
3310: 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50  define UINT8_TYP
3320: 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  E uint8_t.# else
3330: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
3340: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63  _TYPE unsigned c
3350: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
3360: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f  if.#ifndef INT8_
3370: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
3380: 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69  E_INT8_T.#  defi
3390: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74  ne INT8_TYPE int
33a0: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
33b0: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73  fine INT8_TYPE s
33c0: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
33d0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
33e0: 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  f LONGDOUBLE_TYP
33f0: 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  E.# define LONGD
3400: 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20  OUBLE_TYPE long 
3410: 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79  double.#endif.ty
3420: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74  pedef sqlite_int
3430: 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20  64 i64;         
3440: 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65   /* 8-byte signe
3450: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
3460: 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74  edef sqlite_uint
3470: 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20  64 u64;         
3480: 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 8-byte unsign
3490: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
34a0: 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  pedef UINT32_TYP
34b0: 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20  E u32;          
34c0: 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67   /* 4-byte unsig
34d0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
34e0: 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ypedef UINT16_TY
34f0: 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20  PE u16;         
3500: 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69    /* 2-byte unsi
3510: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3520: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
3530: 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20  PE i16;         
3540: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67     /* 2-byte sig
3550: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3560: 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ypedef UINT8_TYP
3570: 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20  E u8;           
3580: 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69    /* 1-byte unsi
3590: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
35a0: 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50  typedef INT8_TYP
35b0: 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20  E i8;           
35c0: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67     /* 1-byte sig
35d0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a  ned integer */..
35e0: 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58  /*.** SQLITE_MAX
35f0: 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f  _U32 is a u64 co
3600: 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74  nstant that is t
3610: 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76  he maximum u64 v
3620: 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e  alue.** that can
3630: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
3640: 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73  u32 without loss
3650: 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76   of data.  The v
3660: 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30  alue.** is 0x000
3670: 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20  00000ffffffff.  
3680: 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71  But because of q
3690: 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f  uirks of some co
36a0: 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68  mpilers, we.** h
36b0: 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74  ave to specify t
36c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  he value in the 
36d0: 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d  less intuitive m
36e0: 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a  anner shown:.*/.
36f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3700: 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29  AX_U32  ((((u64)
3710: 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a  1)<<32)-1)../*.*
3720: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
3730: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
3740: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
3750: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
3760: 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65 64 20  n,.** evaluated 
3770: 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23  at runtime..*/.#
3780: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
3790: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
37a0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
37b0: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
37c0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
37d0: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
37e0: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
37f0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
3800: 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  6__) || defined(
3810: 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20 20 20  _M_IX86)\.      
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3830: 20 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65         || define
3840: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
3850: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
3860: 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
3870: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
3880: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
3890: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
38a0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
38b0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
38c0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c  LITE_UTF16LE.#el
38d0: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
38e0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
38f0: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
3900: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
3910: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
3920: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
3930: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
3940: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
3950: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
3960: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
3970: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
3980: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
3990: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
39a0: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
39b0: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
39c0: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
39d0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
39e0: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
39f0: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
3a00: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
3a10: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
3a20: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
3a30: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
3a40: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
3a50: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
3a60: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
3a70: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
3a80: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
3a90: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
3aa0: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
3ab0: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
3ac0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
3ad0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
3ae0: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
3af0: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
3b00: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
3b10: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
3b20: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
3b30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
3b40: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
3b50: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
3b60: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
3b70: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
3b80: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
3b90: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
3ba0: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
3bb0: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
3bc0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
3bd0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
3be0: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
3bf0: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
3c00: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
3c10: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
3c20: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
3c30: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
3c40: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
3c50: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
3c60: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
3c70: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
3c80: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
3c90: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
3ca0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
3cb0: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
3cc0: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
3cd0: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
3ce0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
3cf0: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
3d00: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
3d10: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
3d20: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
3d30: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
3d40: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
3d50: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
3d60: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
3d70: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
3d80: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
3d90: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
3da0: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
3db0: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
3dc0: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
3dd0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
3de0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
3df0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
3e00: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
3e10: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
3e20: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
3e30: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
3e40: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a  sqlite handle. .
3e50: 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  **.** The sqlite
3e60: 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d  .busyHandler mem
3e70: 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ber of the sqlit
3e80: 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e  e struct contain
3e90: 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61  s the busy.** ca
3ea0: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64  llback for the d
3eb0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
3ec0: 45 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65  Each pager opene
3ed0: 64 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  d via the sqlite
3ee0: 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61  .** handle is pa
3ef0: 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74  ssed a pointer t
3f00: 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e  o sqlite.busyHan
3f10: 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68  dler. The busy-h
3f20: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
3f30: 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ck is currently 
3f40: 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f  invoked only fro
3f50: 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63  m within pager.c
3f60: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
3f70: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
3f80: 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72  BusyHandler;.str
3f90: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
3fa0: 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29  {.  int (*xFunc)
3fb0: 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f  (void *,int);  /
3fc0: 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62  * The busy callb
3fd0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
3fe0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
3ff0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
4000: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
4010: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
4020: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4030: 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64    /* Incremented
4040: 20 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20   with each busy 
4050: 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  call */.};../*.*
4060: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61  * Name of the ma
4070: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
4080: 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72  ble.  The master
4090: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a   database table.
40a0: 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  ** is a special 
40b0: 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73  table that holds
40c0: 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61   the names and a
40d0: 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c  ttributes of all
40e0: 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20  .** user tables 
40f0: 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a  and indices..*/.
4100: 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e  #define MASTER_N
4110: 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74  AME       "sqlit
4120: 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e  e_master".#defin
4130: 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  e TEMP_MASTER_NA
4140: 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70  ME  "sqlite_temp
4150: 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20  _master"../*.** 
4160: 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  The root-page of
4170: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
4180: 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  base table..*/.#
4190: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f  define MASTER_RO
41a0: 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  OT       1../*.*
41b0: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
41c0: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a  e schema table..
41d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
41e0: 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f  A_TABLE(x)  ((!O
41f0: 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d  MIT_TEMPDB)&&(x=
4200: 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f  =1)?TEMP_MASTER_
4210: 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45  NAME:MASTER_NAME
4220: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65  )../*.** A conve
4230: 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61  nience macro tha
4240: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  t returns the nu
4250: 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
4260: 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e   in.** an array.
4270: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61  .*/.#define Arra
4280: 79 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e  ySize(X)    ((in
4290: 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a  t)(sizeof(X)/siz
42a0: 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a  eof(X[0])))../*.
42b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
42c0: 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74   value as a dest
42d0: 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20  ructor means to 
42e0: 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  use sqlite3DbFre
42f0: 65 28 29 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  e()..** This is 
4300: 61 6e 20 69 6e 74 65 72 6e 61 6c 20 65 78 74 65  an internal exte
4310: 6e 73 69 6f 6e 20 74 6f 20 53 51 4c 49 54 45 5f  nsion to SQLITE_
4320: 53 54 41 54 49 43 20 61 6e 64 20 53 51 4c 49 54  STATIC and SQLIT
4330: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
4340: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
4350: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
4360: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
4370: 70 65 29 73 71 6c 69 74 65 33 44 62 46 72 65 65  pe)sqlite3DbFree
4380: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
4390: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
43a0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
43b0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
43c0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
43d0: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
43e0: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
43f0: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
4400: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
4410: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
4420: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
4430: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
4440: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
4450: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
4460: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
4470: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
4480: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
4490: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
44a0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
44b0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
44c0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
44d0: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
44e0: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
44f0: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
4500: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
4510: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
4520: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
4530: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
4540: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
4550: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
4560: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
4570: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
4580: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
4590: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
45a0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
45b0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
45c0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
45d0: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
45e0: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
45f0: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
4600: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
4610: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
4620: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
4630: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
4640: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
4650: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
4660: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
4670: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
4680: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
4690: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
46a0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
46b0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
46c0: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
46d0: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
46e0: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
46f0: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
4700: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
4710: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
4720: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
4730: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
4740: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
4750: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
4760: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
4770: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
4780: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
4790: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
47a0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
47b0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
47c0: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
47d0: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
47e0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
47f0: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
4800: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
4810: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
4820: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
4830: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
4840: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
4850: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
4860: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
4870: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
4880: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
4890: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
48a0: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
48b0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
48c0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
48d0: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
48e0: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
48f0: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
4900: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
4910: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
4920: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
4930: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
4940: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
4950: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
4960: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
4970: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
4980: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
4990: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
49a0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
49b0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
49c0: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
49d0: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
49e0: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
49f0: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
4a00: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
4a10: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
4a20: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
4a30: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
4a40: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
4a50: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
4a60: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
4a70: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
4a80: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
4a90: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
4aa0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
4ab0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
4ac0: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
4ad0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
4ae0: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
4af0: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
4b00: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
4b10: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
4b20: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
4b30: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
4b40: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
4b50: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
4b60: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
4b70: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
4b80: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
4b90: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
4ba0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
4bb0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
4bc0: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
4bd0: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
4be0: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
4bf0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
4c00: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
4c10: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
4c20: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
4c30: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
4c40: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
4c50: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
4c60: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
4c70: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
4c80: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
4c90: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
4ca0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
4cb0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
4cc0: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
4cd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4ce0: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
4cf0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4d00: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
4d10: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
4d20: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
4d30: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
4d40: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
4d50: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
4d60: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
4d70: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
4d80: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
4d90: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
4da0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4db0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
4dc0: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
4dd0: 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64  f FuncDef;.typed
4de0: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
4df0: 66 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73  fHash FuncDefHas
4e00: 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  h;.typedef struc
4e10: 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b  t IdList IdList;
4e20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4e30: 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70  Index Index;.typ
4e40: 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65  edef struct Inde
4e50: 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d  xSample IndexSam
4e60: 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ple;.typedef str
4e70: 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79  uct KeyClass Key
4e80: 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73  Class;.typedef s
4e90: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65  truct KeyInfo Ke
4ea0: 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  yInfo;.typedef s
4eb0: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20  truct Lookaside 
4ec0: 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64  Lookaside;.typed
4ed0: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
4ee0: 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64  ideSlot Lookasid
4ef0: 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73  eSlot;.typedef s
4f00: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64  truct Module Mod
4f10: 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ule;.typedef str
4f20: 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
4f30: 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70  NameContext;.typ
4f40: 65 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73  edef struct Pars
4f50: 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66  e Parse;.typedef
4f60: 20 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52   struct RowSet R
4f70: 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73  owSet;.typedef s
4f80: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
4f90: 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64  Savepoint;.typed
4fa0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
4fb0: 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66   Select;.typedef
4fc0: 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20   struct SrcList 
4fd0: 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  SrcList;.typedef
4fe0: 20 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d   struct StrAccum
4ff0: 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64   StrAccum;.typed
5000: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
5010: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
5020: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
5030: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
5040: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
5050: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
5060: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
5070: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
5080: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
5090: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
50a0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
50b0: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
50c0: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
50d0: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
50e0: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
50f0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
5100: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
5110: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5120: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
5130: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
5140: 65 72 65 50 6c 61 6e 20 57 68 65 72 65 50 6c 61  erePlan WherePla
5150: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
5160: 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72  t WhereInfo Wher
5170: 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  eInfo;.typedef s
5180: 74 72 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c  truct WhereLevel
5190: 20 57 68 65 72 65 4c 65 76 65 6c 3b 0a 0a 2f 2a   WhereLevel;../*
51a0: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
51b0: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
51c0: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
51d0: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a  r the "u8" and .
51e0: 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22  ** "BusyHandler"
51f0: 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e   typedefs. vdbe.
5200: 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20  h also requires 
5210: 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61  a few of the opa
5220: 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  que.** pointer t
5230: 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44  ypes (i.e. FuncD
5240: 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76  ef) defined abov
5250: 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  e..*/.#include "
5260: 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64  btree.h".#includ
5270: 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c  e "vdbe.h".#incl
5280: 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69  ude "pager.h".#i
5290: 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68  nclude "pcache.h
52a0: 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  "..#include "os.
52b0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
52c0: 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ex.h".../*.** Ea
52d0: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
52e0: 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20   to be accessed 
52f0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73  by the system is
5300: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
5310: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
5320: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
5330: 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  re are normally 
5340: 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72  two of these str
5350: 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68  uctures.** in th
5360: 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61  e sqlite.aDb[] a
5370: 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73  rray.  aDb[0] is
5380: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
5390: 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61  se file and.** a
53a0: 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74  Db[1] is the dat
53b0: 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
53c0: 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  to hold temporar
53d0: 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74  y tables.  Addit
53e0: 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ional.** databas
53f0: 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  es may be attach
5400: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62  ed..*/.struct Db
5410: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
5420: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
5430: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
5440: 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
5450: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
5460: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
5470: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
5480: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
5490: 20 75 38 20 69 6e 54 72 61 6e 73 3b 20 20 20 20   u8 inTrans;    
54a0: 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 74 20        /* 0: not 
54b0: 77 72 69 74 61 62 6c 65 2e 20 20 31 3a 20 54 72  writable.  1: Tr
54c0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 32 3a 20 43  ansaction.  2: C
54d0: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 20 20 75  heckpoint */.  u
54e0: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
54f0: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
5500: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
5510: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
5520: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
5530: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
5540: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
5550: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
5560: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
5570: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
5580: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
5590: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
55a0: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
55b0: 68 65 6d 61 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  hema..*/.struct 
55c0: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
55d0: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
55e0: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
55f0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
5600: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
5610: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
5620: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
5630: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
5640: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
5650: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
5660: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
5670: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
5680: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
5690: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
56a0: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
56b0: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
56c0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
56d0: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
56e0: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
56f0: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
5700: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
5710: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
5720: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
5730: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
5740: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
5750: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
5760: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
5770: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
5780: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
5790: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
57a0: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
57b0: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
57c0: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
57d0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
57e0: 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  6 flags;        
57f0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
5800: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
5810: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
5820: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
5830: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
5840: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
5850: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
5860: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
5870: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
5880: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
5890: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
58a0: 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  e .** Db.pSchema
58b0: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
58c0: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
58d0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
58e0: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
58f0: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26  .pSchema->flags&
5900: 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
5910: 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65  ne DbHasAnyPrope
5920: 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44  rty(D,I,P)  (((D
5930: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
5940: 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  a->flags&(P))!=0
5950: 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50  ).#define DbSetP
5960: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
5970: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
5980: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28  Schema->flags|=(
5990: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
59a0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
59b0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
59c0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d  pSchema->flags&=
59d0: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
59e0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
59f0: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
5a00: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
5a10: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
5a20: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
5a30: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
5a40: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
5a50: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
5a60: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
5a70: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
5a80: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
5a90: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
5aa0: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
5ab0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
5ac0: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
5ad0: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
5ae0: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
5af0: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
5b00: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
5b10: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
5b20: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
5b30: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
5b40: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
5b50: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
5b60: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
5b70: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
5b80: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
5b90: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
5ba0: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
5bb0: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
5bc0: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
5bd0: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
5be0: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
5bf0: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
5c00: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
5c10: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
5c20: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
5c30: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
5c40: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
5c50: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
5c60: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
5c70: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
5c80: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
5c90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
5ca0: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
5cb0: 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b  T_TRIGGER_DEPTH+
5cc0: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
5cd0: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
5ce0: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
5cf0: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
5d00: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
5d10: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
5d20: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
5d30: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
5d40: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
5d50: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
5d60: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
5d70: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5d80: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
5d90: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
5da0: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
5db0: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
5dc0: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
5dd0: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
5de0: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
5df0: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
5e00: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
5e10: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
5e20: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
5e30: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
5e40: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
5e50: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
5e60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
5e70: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
5e80: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
5e90: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
5ea0: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
5eb0: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
5ec0: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
5ed0: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
5ee0: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
5ef0: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
5f00: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
5f10: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
5f20: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
5f30: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
5f40: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
5f50: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
5f60: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
5f70: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5f80: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
5f90: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
5fa0: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
5fb0: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
5fc0: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
5fd0: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
5fe0: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
5ff0: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
6000: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
6010: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
6020: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
6030: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
6040: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
6050: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
6060: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
6070: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
6080: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
6090: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
60a0: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
60b0: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
60c0: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
60d0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
60e0: 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20  .  u16 sz;      
60f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
6100: 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65  ze of each buffe
6110: 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  r in bytes */.  
6120: 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20  u8 bEnabled;    
6130: 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65          /* False
6140: 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20   to disable new 
6150: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
6160: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d  tions */.  u8 bM
6170: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
6180: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
6190: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
61a0: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
61b0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
61c0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
61d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
61e0: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
61f0: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
6200: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
6210: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
6220: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
6230: 4f 75 74 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  Out */.  Lookasi
6240: 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20  deSlot *pFree;  
6250: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69   /* List of avai
6260: 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f  lable buffers */
6270: 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b  .  void *pStart;
6280: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
6290: 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69  rst byte of avai
62a0: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  lable memory spa
62b0: 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45  ce */.  void *pE
62c0: 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
62d0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61  /* First byte pa
62e0: 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61  st end of availa
62f0: 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ble space */.};.
6300: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
6310: 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69  Slot {.  Lookasi
6320: 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20  deSlot *pNext;  
6330: 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72    /* Next buffer
6340: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
6350: 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  free buffers */.
6360: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68  };../*.** A hash
6370: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
6380: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ion definitions.
6390: 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68  .**.** Hash each
63a0: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
63b0: 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74  re into one of t
63c0: 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61  he FuncDefHash.a
63d0: 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c  [] slots..** Col
63e0: 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74  lisions are on t
63f0: 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68  he FuncDef.pHash
6400: 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63   chain..*/.struc
6410: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a  t FuncDefHash {.
6420: 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d    FuncDef *a[23]
6430: 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20  ;       /* Hash 
6440: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
6450: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ons */.};../*.**
6460: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
6470: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
6480: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
6490: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
64a0: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  ure..**.** The s
64b0: 71 6c 69 74 65 2e 6c 61 73 74 52 6f 77 69 64 20  qlite.lastRowid 
64c0: 72 65 63 6f 72 64 73 20 74 68 65 20 6c 61 73 74  records the last
64d0: 20 69 6e 73 65 72 74 20 72 6f 77 69 64 20 67 65   insert rowid ge
64e0: 6e 65 72 61 74 65 64 20 62 79 20 61 6e 0a 2a 2a  nerated by an.**
64f0: 20 69 6e 73 65 72 74 20 73 74 61 74 65 6d 65 6e   insert statemen
6500: 74 2e 20 20 49 6e 73 65 72 74 73 20 6f 6e 20 76  t.  Inserts on v
6510: 69 65 77 73 20 64 6f 20 6e 6f 74 20 61 66 66 65  iews do not affe
6520: 63 74 20 69 74 73 20 76 61 6c 75 65 2e 20 20 45  ct its value.  E
6530: 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 68  ach.** trigger h
6540: 61 73 20 69 74 73 20 6f 77 6e 20 63 6f 6e 74 65  as its own conte
6550: 78 74 2c 20 73 6f 20 74 68 61 74 20 6c 61 73 74  xt, so that last
6560: 52 6f 77 69 64 20 63 61 6e 20 62 65 20 75 70 64  Rowid can be upd
6570: 61 74 65 64 20 69 6e 73 69 64 65 0a 2a 2a 20 74  ated inside.** t
6580: 72 69 67 67 65 72 73 20 61 73 20 75 73 75 61 6c  riggers as usual
6590: 2e 20 20 54 68 65 20 70 72 65 76 69 6f 75 73 20  .  The previous 
65a0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65  value will be re
65b0: 73 74 6f 72 65 64 20 6f 6e 63 65 20 74 68 65 20  stored once the 
65c0: 74 72 69 67 67 65 72 0a 2a 2a 20 65 78 69 74 73  trigger.** exits
65d0: 2e 20 20 55 70 6f 6e 20 65 6e 74 65 72 69 6e 67  .  Upon entering
65e0: 20 61 20 62 65 66 6f 72 65 20 6f 72 20 69 6e 73   a before or ins
65f0: 74 65 61 64 20 6f 66 20 74 72 69 67 67 65 72 2c  tead of trigger,
6600: 20 6c 61 73 74 52 6f 77 69 64 20 69 73 20 6e 6f   lastRowid is no
6610: 0a 2a 2a 20 6c 6f 6e 67 65 72 20 28 73 69 6e 63  .** longer (sinc
6620: 65 20 61 66 74 65 72 20 76 65 72 73 69 6f 6e 20  e after version 
6630: 32 2e 38 2e 31 32 29 20 72 65 73 65 74 20 74 6f  2.8.12) reset to
6640: 20 2d 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73   -1..**.** The s
6650: 71 6c 69 74 65 2e 6e 43 68 61 6e 67 65 20 64 6f  qlite.nChange do
6660: 65 73 20 6e 6f 74 20 63 6f 75 6e 74 20 63 68 61  es not count cha
6670: 6e 67 65 73 20 77 69 74 68 69 6e 20 74 72 69 67  nges within trig
6680: 67 65 72 73 20 61 6e 64 20 6b 65 65 70 73 20 6e  gers and keeps n
6690: 6f 0a 2a 2a 20 63 6f 6e 74 65 78 74 2e 20 20 49  o.** context.  I
66a0: 74 20 69 73 20 72 65 73 65 74 20 61 74 20 73 74  t is reset at st
66b0: 61 72 74 20 6f 66 20 73 71 6c 69 74 65 33 5f 65  art of sqlite3_e
66c0: 78 65 63 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69  xec..** The sqli
66d0: 74 65 2e 6c 73 43 68 61 6e 67 65 20 72 65 70 72  te.lsChange repr
66e0: 65 73 65 6e 74 73 20 74 68 65 20 6e 75 6d 62 65  esents the numbe
66f0: 72 20 6f 66 20 63 68 61 6e 67 65 73 20 6d 61 64  r of changes mad
6700: 65 20 62 79 20 74 68 65 20 6c 61 73 74 0a 2a 2a  e by the last.**
6710: 20 69 6e 73 65 72 74 2c 20 75 70 64 61 74 65 2c   insert, update,
6720: 20 6f 72 20 64 65 6c 65 74 65 20 73 74 61 74 65   or delete state
6730: 6d 65 6e 74 2e 20 20 49 74 20 72 65 6d 61 69 6e  ment.  It remain
6740: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 72 6f 75  s constant throu
6750: 67 68 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 65 6e  ghout the.** len
6760: 67 74 68 20 6f 66 20 61 20 73 74 61 74 65 6d 65  gth of a stateme
6770: 6e 74 20 61 6e 64 20 69 73 20 74 68 65 6e 20 75  nt and is then u
6780: 70 64 61 74 65 64 20 62 79 20 4f 50 5f 53 65 74  pdated by OP_Set
6790: 43 6f 75 6e 74 73 2e 20 20 49 74 20 6b 65 65 70  Counts.  It keep
67a0: 73 20 61 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 73  s a.** context s
67b0: 74 61 63 6b 20 6a 75 73 74 20 6c 69 6b 65 20 6c  tack just like l
67c0: 61 73 74 52 6f 77 69 64 20 73 6f 20 74 68 61 74  astRowid so that
67d0: 20 74 68 65 20 63 6f 75 6e 74 20 6f 66 20 63 68   the count of ch
67e0: 61 6e 67 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20  anges.** within 
67f0: 61 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74  a trigger is not
6800: 20 73 65 65 6e 20 6f 75 74 73 69 64 65 20 74 68   seen outside th
6810: 65 20 74 72 69 67 67 65 72 2e 20 20 43 68 61 6e  e trigger.  Chan
6820: 67 65 73 20 74 6f 20 76 69 65 77 73 20 64 6f 20  ges to views do 
6830: 6e 6f 74 0a 2a 2a 20 61 66 66 65 63 74 20 74 68  not.** affect th
6840: 65 20 76 61 6c 75 65 20 6f 66 20 6c 73 43 68 61  e value of lsCha
6850: 6e 67 65 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69  nge..** The sqli
6860: 74 65 2e 63 73 43 68 61 6e 67 65 20 6b 65 65 70  te.csChange keep
6870: 73 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20 6e  s track of the n
6880: 75 6d 62 65 72 20 6f 66 20 63 75 72 72 65 6e 74  umber of current
6890: 20 63 68 61 6e 67 65 73 20 28 73 69 6e 63 65 0a   changes (since.
68a0: 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 74 61 74  ** the last stat
68b0: 65 6d 65 6e 74 29 20 61 6e 64 20 69 73 20 75 73  ement) and is us
68c0: 65 64 20 74 6f 20 75 70 64 61 74 65 20 73 71 6c  ed to update sql
68d0: 69 74 65 5f 6c 73 43 68 61 6e 67 65 2e 0a 2a 2a  ite_lsChange..**
68e0: 0a 2a 2a 20 54 68 65 20 6d 65 6d 62 65 72 20 76  .** The member v
68f0: 61 72 69 61 62 6c 65 73 20 73 71 6c 69 74 65 2e  ariables sqlite.
6900: 65 72 72 43 6f 64 65 2c 20 73 71 6c 69 74 65 2e  errCode, sqlite.
6910: 7a 45 72 72 4d 73 67 20 61 6e 64 20 73 71 6c 69  zErrMsg and sqli
6920: 74 65 2e 7a 45 72 72 4d 73 67 31 36 0a 2a 2a 20  te.zErrMsg16.** 
6930: 73 74 6f 72 65 20 74 68 65 20 6d 6f 73 74 20 72  store the most r
6940: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
6950: 20 61 6e 64 2c 20 69 66 20 61 70 70 6c 69 63 61   and, if applica
6960: 62 6c 65 2c 20 73 74 72 69 6e 67 2e 20 54 68 65  ble, string. The
6970: 0a 2a 2a 20 69 6e 74 65 72 6e 61 6c 20 66 75 6e  .** internal fun
6980: 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 45 72 72  ction sqlite3Err
6990: 6f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  or() is used to 
69a0: 73 65 74 20 74 68 65 73 65 20 76 61 72 69 61 62  set these variab
69b0: 6c 65 73 0a 2a 2a 20 63 6f 6e 73 69 73 74 65 6e  les.** consisten
69c0: 74 6c 79 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  tly..*/.struct s
69d0: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
69e0: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
69f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
6a00: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 69 6e  nterface */.  in
6a10: 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20  t nDb;          
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
6a30: 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64  umber of backend
6a40: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  s currently in u
6a50: 73 65 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b  se */.  Db *aDb;
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a70: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63        /* All bac
6a80: 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 66  kends */.  int f
6a90: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
6aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
6ab0: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
6ac0: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
6ad0: 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20  int openFlags;  
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6af0: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
6b00: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
6b10: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
6b20: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
6b30: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
6b40: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
6b50: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
6b60: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b80: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
6b90: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
6ba0: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
6bb0: 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b    u8 autoCommit;
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bd0: 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d  /* The auto-comm
6be0: 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38  it flag. */.  u8
6bf0: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20   temp_store;    
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
6c10: 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79  : file 2: memory
6c20: 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20   0: default */. 
6c30: 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64   u8 mallocFailed
6c40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
6c50: 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76  * True if we hav
6c60: 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20  e seen a malloc 
6c70: 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20  failure */.  u8 
6c80: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
6c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
6ca0: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
6cb0: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
6cc0: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
6cd0: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
6ce0: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
6cf0: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
6d00: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
6d10: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
6d20: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
6d30: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
6d40: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
6d50: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74  if true */.  int
6d60: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
6d70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
6d80: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
6d90: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 69  UUM if >0 */.  i
6da0: 6e 74 20 6e 54 61 62 6c 65 3b 20 20 20 20 20 20  nt nTable;      
6db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6dc0: 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
6dd0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
6de0: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
6df0: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
6e00: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
6e10: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
6e20: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
6e30: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
6e40: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
6e50: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
6e60: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
6e70: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
6e80: 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20    u32 magic;    
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ea0: 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20  /* Magic number 
6eb0: 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61  for detect libra
6ec0: 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69  ry misuse */.  i
6ed0: 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20  nt nChange;     
6ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6ef0: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
6f00: 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  y sqlite3_change
6f10: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f  s() */.  int nTo
6f20: 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20  talChange;      
6f30: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
6f40: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
6f50: 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
6f60: 73 28 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  s() */.  sqlite3
6f70: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
6f80: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
6f90: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
6fa0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
6fb0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
6fc0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72   Limits */.  str
6fd0: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
6fe0: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
6ff0: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
7000: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
7010: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
7020: 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
7030: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20          /* When 
7040: 62 61 63 6b 20 69 73 20 62 65 69 6e 67 20 69 6e  back is being in
7050: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
7060: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
7070: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7080: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
7090: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
70a0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
70b0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
70c0: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
70d0: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
70e0: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
70f0: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
7100: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
7110: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
7120: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
7130: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
7140: 69 74 3b 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e  it;.  int nExten
7150: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
7160: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7170: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
7180: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
7190: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
71a0: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
71b0: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
71c0: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 73 74   handles */.  st
71d0: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
71e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
71f0: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
7200: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
7210: 2f 0a 20 20 69 6e 74 20 61 63 74 69 76 65 56 64  /.  int activeVd
7220: 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20  beCnt;          
7230: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
7240: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 65  DBEs currently e
7250: 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20 69 6e  xecuting */.  in
7260: 74 20 77 72 69 74 65 56 64 62 65 43 6e 74 3b 20  t writeVdbeCnt; 
7270: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7280: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7290: 56 44 42 45 73 20 74 68 61 74 20 61 72 65 20 77  VDBEs that are w
72a0: 72 69 74 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  riting */.  void
72b0: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
72c0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20  ,const char*);  
72d0: 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66        /* Trace f
72e0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
72f0: 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20  d *pTraceArg;   
7300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7310: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7320: 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20  nt to the trace 
7330: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
7340: 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76  id (*xProfile)(v
7350: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
7360: 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69  ,u64);  /* Profi
7370: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ling function */
7380: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c  .  void *pProfil
7390: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
73b0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66  Argument to prof
73c0: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ile function */.
73d0: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
73e0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
73f0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
7400: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
7410: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74  ck() */   .  int
7420: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
7430: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
7440: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
7450: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
7460: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
7470: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7480: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
7490: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
74a0: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69  ck() */   .  voi
74b0: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
74c0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
74d0: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
74e0: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
74f0: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
7500: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
7510: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
7520: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
7530: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
7540: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69  qlite_int64);.#i
7550: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7560: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
7570: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
7580: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
7590: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
75a0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
75b0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
75c0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
75d0: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
75e0: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
75f0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
7600: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
7610: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
7620: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
7630: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
7640: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
7650: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
7660: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
7670: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7680: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
7690: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
76a0: 73 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sg;             
76b0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
76c0: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
76d0: 28 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 29 20  (UTF-8 encoded) 
76e0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
76f0: 73 67 31 36 3b 20 20 20 20 20 20 20 20 20 20 20  sg16;           
7700: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7710: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
7720: 28 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 29  (UTF-16 encoded)
7730: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
7740: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
7750: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
7760: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
7770: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
7780: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
7790: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
77a0: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
77b0: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
77c0: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
77d0: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
77e0: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
77f0: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
7800: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
7810: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
7820: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 6e 74 20  ORIZATION.  int 
7830: 28 2a 78 41 75 74 68 29 28 76 6f 69 64 2a 2c 69  (*xAuth)(void*,i
7840: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
7850: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
7860: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
7870: 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r*);.           
7880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7890: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
78a0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
78b0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
78c0: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
78d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
78e0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
78f0: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
7900: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
7910: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7920: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
7930: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
7940: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
7950: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
7960: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
7970: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
7980: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
7990: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
79a0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
79b0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
79c0: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
79d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
79e0: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
79f0: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
7a00: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
7a10: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7a20: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
7a30: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7a50: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
7a60: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
7a70: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 54 61 62 6c  dule() */.  Tabl
7a80: 65 20 2a 70 56 54 61 62 3b 20 20 20 20 20 20 20  e *pVTab;       
7a90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 76 74 61            /* vta
7aa0: 62 20 77 69 74 68 20 61 63 74 69 76 65 20 43 6f  b with active Co
7ab0: 6e 6e 65 63 74 2f 43 72 65 61 74 65 20 6d 65 74  nnect/Create met
7ac0: 68 6f 64 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  hod */.  VTable 
7ad0: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
7ae0: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
7af0: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
7b00: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
7b10: 2a 2f 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  */.  int nVTrans
7b20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7b30: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
7b40: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
7b50: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
7b60: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
7b70: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
7b80: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
7b90: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
7ba0: 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61  ndif.  FuncDefHa
7bb0: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
7bc0: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
7bd0: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
7be0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
7bf0: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7c10: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
7c20: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
7c30: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
7c40: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
7c50: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
7c60: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
7c70: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
7c80: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
7c90: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
7ca0: 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74   */.  Db aDbStat
7cb0: 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  ic[2];          
7cc0: 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70      /* Static sp
7cd0: 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65  ace for the 2 de
7ce0: 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a  fault backends *
7cf0: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
7d00: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
7d10: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
7d20: 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ive savepoints *
7d30: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
7d40: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
7d50: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
7d60: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
7d70: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
7d80: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7da0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
7db0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
7dc0: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 75 38  actions  */.  u8
7dd0: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
7de0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
7df0: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
7e00: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
7e10: 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 36 34 20  s a TS */.  i64 
7e20: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
7e30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
7e40: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
7e50: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
7e60: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 6e 74  action. */.  int
7e70: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
7e80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
7e90: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
7ea0: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
7eb0: 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65 66  ree() */..#ifdef
7ec0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
7ed0: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
7ee0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7ef0: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
7f00: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
7f10: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
7f20: 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f   .  ** mutex, no
7f30: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
7f40: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
7f50: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
7f60: 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a  ify.c. .  **.  *
7f70: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
7f80: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
7f90: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
7fa0: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
7fb0: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
7fc0: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
7fd0: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
7fe0: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
7ff0: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
8000: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
8010: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
8020: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
8030: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
8040: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
8050: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
8060: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
8070: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
8080: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
8090: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
80a0: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
80b0: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
80c0: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
80d0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
80e0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
80f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
8100: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
8110: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
8120: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
8130: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
8140: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8150: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
8160: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
8170: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
8180: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
8190: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
81a0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
81b0: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
81c0: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
81d0: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
81e0: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
81f0: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
8200: 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  f.};../*.** A ma
8210: 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20  cro to discover 
8220: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  the encoding of 
8230: 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23  a database..*/.#
8240: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 28  define ENC(db) (
8250: 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63  (db)->aDb[0].pSc
8260: 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a  hema->enc)../*.*
8270: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
8280: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
8290: 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66  3.flags..*/.#def
82a0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
82b0: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
82c0: 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0100  /* True to
82d0: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
82e0: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
82f0: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
8300: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 32 30  anges  0x0000020
8310: 30 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  0  /* Uncommitte
8320: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
8330: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
8340: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
8350: 6d 65 73 20 20 20 30 78 30 30 30 30 30 34 30 30  mes   0x00000400
8360: 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63    /* Show full c
8370: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53  olumn names on S
8380: 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  ELECT */.#define
8390: 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c   SQLITE_ShortCol
83a0: 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 38 30  Names  0x0000080
83b0: 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74  0  /* Show short
83c0: 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a   columns names *
83d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
83e0: 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20  _CountRows      
83f0: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 43  0x00001000  /* C
8400: 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65  ount rows change
8410: 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a  d by INSERT, */.
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44            /*   D
8450: 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
8460: 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20   and return */. 
8470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8490: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68           /*   th
84a0: 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20  e count using a 
84b0: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65  callback. */.#de
84c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c  fine SQLITE_Null
84d0: 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30  Callback   0x000
84e0: 30 32 30 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65  02000  /* Invoke
84f0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e   the callback on
8500: 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20  ce if the */.   
8510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 2f 2a 20 20 20 72 65 73 75         /*   resu
8540: 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20  lt set is empty 
8550: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8560: 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20  E_SqlTrace      
8570: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
8580: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
8590: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
85a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
85b0: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
85c0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 44  0x00008000  /* D
85d0: 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66  ebug listings of
85e0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a   VDBE programs *
85f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8600: 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20  _WriteSchema    
8610: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 4f  0x00010000  /* O
8620: 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49  K to update SQLI
8630: 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65  TE_MASTER */.#de
8640: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 52 65  fine SQLITE_NoRe
8650: 61 64 6c 6f 63 6b 20 20 20 20 20 30 78 30 30 30  adlock     0x000
8660: 32 30 30 30 30 20 20 2f 2a 20 52 65 61 64 6c 6f  20000  /* Readlo
8670: 63 6b 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  cks are omitted 
8680: 77 68 65 6e 20 0a 20 20 20 20 20 20 20 20 20 20  when .          
8690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86b0: 2a 2a 20 61 63 63 65 73 73 69 6e 67 20 72 65 61  ** accessing rea
86c0: 64 2d 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 73  d-only databases
86d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
86e0: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
86f0: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
8700: 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20   Do not enforce 
8710: 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
8720: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8730: 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
8740: 74 65 64 20 30 78 30 30 38 30 30 30 30 20 20 2f  ted 0x0080000  /
8750: 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63  * For shared-cac
8760: 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69  he mode */.#defi
8770: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
8780: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 31 30 30  FileFmt  0x00100
8790: 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  000  /* Create n
87a0: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
87b0: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
87c0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
87d0: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 32 30  Sync      0x0020
87e0: 30 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  0000  /* Use ful
87f0: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
8800: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
8810: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
8820: 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30  ension  0x004000
8830: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
8840: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
8850: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
8860: 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78  ecoveryMode   0x
8870: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 49 67 6e  00800000  /* Ign
8880: 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72  ore schema error
8890: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
88a0: 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
88b0: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
88c0: 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65  * Reverse unorde
88d0: 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23  red SELECTs */.#
88e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
88f0: 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30  cTriggers    0x0
8900: 32 30 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  2000000  /* Enab
8910: 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69  le recursive tri
8920: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
8930: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
8940: 65 79 73 20 20 20 20 30 78 30 34 30 30 30 30 30  eys    0x0400000
8950: 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f  0  /* Enforce fo
8960: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
8970: 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e  aints  */.#defin
8980: 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  e SQLITE_AutoInd
8990: 65 78 20 20 20 20 20 20 30 78 30 38 30 30 30 30  ex      0x080000
89a0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75  00  /* Enable au
89b0: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
89c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
89d0: 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  E_PreferBuiltin 
89e0: 20 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20   0x10000000  /* 
89f0: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
8a00: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
8a10: 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74  ./*.** Bits of t
8a20: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
8a30: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
8a40: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
8a50: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
8a60: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
8a70: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
8a80: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
8a90: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 75 73 74 20  ..** These must 
8aa0: 62 65 20 74 68 65 20 6c 6f 77 2d 6f 72 64 65 72  be the low-order
8ab0: 20 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61   bits of the fla
8ac0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
8ad0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
8ae0: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 31 20  yFlattener 0x01 
8af0: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c         /* Disabl
8b00: 65 20 71 75 65 72 79 20 66 6c 61 74 74 65 6e 69  e query flatteni
8b10: 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ng */.#define SQ
8b20: 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65  LITE_ColumnCache
8b30: 20 20 20 20 30 78 30 32 20 20 20 20 20 20 20 20      0x02        
8b40: 2f 2a 20 44 69 73 61 62 6c 65 20 74 68 65 20 63  /* Disable the c
8b50: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
8b60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
8b70: 64 65 78 53 6f 72 74 20 20 20 20 20 20 30 78 30  dexSort      0x0
8b80: 34 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 61  4        /* Disa
8b90: 62 6c 65 20 69 6e 64 65 78 65 73 20 66 6f 72 20  ble indexes for 
8ba0: 73 6f 72 74 69 6e 67 20 2a 2f 0a 23 64 65 66 69  sorting */.#defi
8bb0: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 64 65 78 53  ne SQLITE_IndexS
8bc0: 65 61 72 63 68 20 20 20 20 30 78 30 38 20 20 20  earch    0x08   
8bd0: 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20       /* Disable 
8be0: 69 6e 64 65 78 65 73 20 66 6f 72 20 73 65 61 72  indexes for sear
8bf0: 63 68 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ching */.#define
8c00: 20 53 51 4c 49 54 45 5f 49 6e 64 65 78 43 6f 76   SQLITE_IndexCov
8c10: 65 72 20 20 20 20 20 30 78 31 30 20 20 20 20 20  er     0x10     
8c20: 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 69 6e     /* Disable in
8c30: 64 65 78 20 63 6f 76 65 72 69 6e 67 20 74 61 62  dex covering tab
8c40: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  le */.#define SQ
8c50: 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65  LITE_GroupByOrde
8c60: 72 20 20 20 30 78 32 30 20 20 20 20 20 20 20 20  r   0x20        
8c70: 2f 2a 20 44 69 73 61 62 6c 65 20 47 52 4f 55 50  /* Disable GROUP
8c80: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
8c90: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
8ca0: 51 4c 49 54 45 5f 4f 70 74 4d 61 73 6b 20 20 20  QLITE_OptMask   
8cb0: 20 20 20 20 20 30 78 66 66 20 20 20 20 20 20 20       0xff       
8cc0: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 61 6c 6c 20   /* Mask of all 
8cd0: 64 69 73 61 62 6c 61 62 6c 65 20 6f 70 74 73 20  disablable opts 
8ce0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  */../*.** Possib
8cf0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
8d00: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
8d10: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
8d20: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
8d30: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
8d40: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
8d50: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
8d60: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
8d70: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
8d80: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
8d90: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
8da0: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
8db0: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
8dc0: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
8dd0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
8de0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
8df0: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
8e00: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
8e10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
8e20: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
8e30: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
8e40: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
8e50: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
8e60: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
8e70: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
8e80: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
8e90: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
8ea0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8eb0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
8ec0: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
8ed0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
8ee0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
8ef0: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
8f00: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
8f10: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
8f20: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
8f30: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
8f40: 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  re.  A pointer t
8f50: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
8f60: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
8f70: 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a  e sqlite.aFunc.*
8f80: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57  * hash table.  W
8f90: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e  hen multiple fun
8fa0: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20  ctions have the 
8fb0: 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68  same name, the h
8fc0: 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69  ash table.** poi
8fd0: 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20  nts to a linked 
8fe0: 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74  list of these st
8ff0: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
9000: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
9010: 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20  i16 nArg;       
9020: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9030: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
9040: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
9050: 20 2a 2f 0a 20 20 75 38 20 69 50 72 65 66 45 6e   */.  u8 iPrefEn
9060: 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72  c;         /* Pr
9070: 65 66 65 72 72 65 64 20 74 65 78 74 20 65 6e 63  eferred text enc
9080: 6f 64 69 6e 67 20 28 53 51 4c 49 54 45 5f 55 54  oding (SQLITE_UT
9090: 46 38 2c 20 31 36 4c 45 2c 20 31 36 42 45 29 20  F8, 16LE, 16BE) 
90a0: 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20  */.  u8 flags;  
90b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d            /* Som
90c0: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
90d0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
90e0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
90f0: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
9100: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
9110: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
9120: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
9130: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
9140: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
9150: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
9160: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
9170: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
9180: 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66  *); /* Regular f
9190: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
91a0: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
91b0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
91c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
91d0: 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73  ; /* Aggregate s
91e0: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
91f0: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
9200: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9220: 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69  Aggregate finali
9230: 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  zer */.  char *z
9240: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
9250: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
9260: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
9270: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
9280: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
9290: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
92a0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
92b0: 68 61 73 68 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  hash */.};../*.*
92c0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
92d0: 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c  s for FuncDef.fl
92e0: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ags.*/.#define S
92f0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
9300: 20 20 20 20 30 78 30 31 20 2f 2a 20 43 61 6e 64      0x01 /* Cand
9310: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
9320: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
9330: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9340: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
9350: 30 78 30 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0x02 /* Case-sen
9360: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
9370: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
9380: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
9390: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 34 20 2f  _EPHEM    0x04 /
93a0: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
93b0: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
93c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
93d0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
93e0: 78 30 38 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  x08 /* sqlite3Ge
93f0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
9400: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
9410: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9420: 5f 46 55 4e 43 5f 50 52 49 56 41 54 45 20 20 30  _FUNC_PRIVATE  0
9430: 78 31 30 20 2f 2a 20 41 6c 6c 6f 77 65 64 20 66  x10 /* Allowed f
9440: 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20  or internal use 
9450: 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
9460: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e  SQLITE_FUNC_COUN
9470: 54 20 20 20 20 30 78 32 30 20 2f 2a 20 42 75 69  T    0x20 /* Bui
9480: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
9490: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
94a0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
94b0: 43 4f 41 4c 45 53 43 45 20 30 78 34 30 20 2f 2a  COALESCE 0x40 /*
94c0: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73   Built-in coales
94d0: 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29  ce() or ifnull()
94e0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
94f0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
9500: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
9510: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
9520: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
9530: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
9540: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
9550: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
9560: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
9570: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
9580: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
9590: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
95a0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
95b0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
95c0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
95d0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
95e0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
95f0: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
9600: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
9610: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
9620: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
9630: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
9640: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
9650: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
9660: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
9670: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
9680: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
9690: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
96a0: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
96b0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
96c0: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
96d0: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
96e0: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
96f0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
9700: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
9710: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
9720: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
9730: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
9740: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
9750: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
9760: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
9770: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
9780: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
9790: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
97a0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
97b0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
97c0: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
97d0: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
97e0: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
97f0: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
9800: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
9810: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
9820: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
9830: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
9840: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
9850: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
9860: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
9870: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
9880: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
9890: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
98a0: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
98b0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
98c0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
98d0: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
98e0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
98f0: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
9900: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
9910: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
9920: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
9930: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
9940: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
9950: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
9960: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
9970: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
9980: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
9990: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
99a0: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
99b0: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
99c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
99d0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
99e0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
99f0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
9a00: 51 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a  QLITE_UTF8, bNC*
9a10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
9a20: 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53 51 4c 49 54  COLL, \.   SQLIT
9a30: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
9a40: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
9a50: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 7d 0a 23   0, #zName, 0}.#
9a60: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
9a70: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
9a80: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
9a90: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
9aa0: 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53  LITE_UTF8, bNC*S
9ab0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
9ac0: 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  OLL, \.   pArg, 
9ad0: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
9ae0: 23 7a 4e 61 6d 65 2c 20 30 7d 0a 23 64 65 66 69  #zName, 0}.#defi
9af0: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
9b00: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
9b10: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
9b20: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c 61  SQLITE_UTF8, fla
9b30: 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  gs, (void *)arg,
9b40: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
9b50: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 7d 0a 23   0, #zName, 0}.#
9b60: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
9b70: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
9b80: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
9b90: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
9ba0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 6e 63   SQLITE_UTF8, nc
9bb0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
9bc0: 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53 51 4c 49  DCOLL, \.   SQLI
9bd0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
9be0: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
9bf0: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 7d  xFinal,#zName,0}
9c00: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
9c10: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
9c20: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
9c30: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
9c40: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
9c50: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
9c60: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
9c70: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
9c80: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
9c90: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
9ca0: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
9cb0: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
9cc0: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
9cd0: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
9ce0: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
9cf0: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
9d00: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
9d10: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
9d30: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
9d40: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
9d50: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
9d60: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
9d70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9d80: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
9d90: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
9da0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
9db0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
9dc0: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
9dd0: 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
9de0: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
9df0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
9e00: 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
9e10: 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
9e20: 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
9e30: 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
9e40: 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
9e50: 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
9e60: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
9e70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
9e80: 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
9e90: 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
9ea0: 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
9eb0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
9ec0: 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
9ed0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
9ee0: 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
9ef0: 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
9f00: 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
9f10: 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
9f20: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
9f30: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
9f40: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
9f50: 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
9f60: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
9f70: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
9f80: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
9f90: 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
9fa0: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
9fb0: 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
9fc0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
9fd0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
9fe0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
9ff0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
a000: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
a010: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a030: 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
a040: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
a050: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
a060: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
a070: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a080: 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
a090: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
a0a0: 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
a0b0: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
a0c0: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
a0d0: 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
a0e0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
a0f0: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
a100: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
a110: 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
a120: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
a130: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
a140: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
a150: 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
a160: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
a170: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
a180: 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f  *zDflt;     /* O
a190: 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
a1a0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
a1b0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79  e */.  char *zTy
a1c0: 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20  pe;     /* Data 
a1d0: 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f  type for this co
a1e0: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
a1f0: 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
a200: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
a210: 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
a220: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
a230: 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
a240: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
a250: 72 65 20 69 73 20 61 20 4e 4f 54 20 4e 55 4c 4c  re is a NOT NULL
a260: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
a270: 20 75 38 20 69 73 50 72 69 6d 4b 65 79 3b 20 20   u8 isPrimKey;  
a280: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
a290: 73 20 63 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  s column is part
a2a0: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
a2b0: 4b 45 59 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  KEY */.  char af
a2c0: 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
a2d0: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
a2e0: 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
a2f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a300: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
a310: 45 0a 20 20 75 38 20 69 73 48 69 64 64 65 6e 3b  E.  u8 isHidden;
a320: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
a330: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 69 73 20 27  this column is '
a340: 68 69 64 64 65 6e 27 20 2a 2f 0a 23 65 6e 64 69  hidden' */.#endi
a350: 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  f.};../*.** A "C
a360: 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
a370: 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
a380: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
a390: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
a3a0: 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
a3b0: 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
a3c0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
a3d0: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
a3e0: 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
a3f0: 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
a400: 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
a410: 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
a420: 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uence..**.** The
a430: 72 65 20 6d 61 79 20 74 77 6f 20 73 65 70 61 72  re may two separ
a440: 61 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ate implementati
a450: 6f 6e 73 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ons of the colla
a460: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6f  tion function, o
a470: 6e 65 0a 2a 2a 20 74 68 61 74 20 70 72 6f 63 65  ne.** that proce
a480: 73 73 65 73 20 74 65 78 74 20 69 6e 20 55 54 46  sses text in UTF
a490: 2d 38 20 65 6e 63 6f 64 69 6e 67 20 28 43 6f 6c  -8 encoding (Col
a4a0: 6c 53 65 71 2e 78 43 6d 70 29 20 61 6e 64 20 61  lSeq.xCmp) and a
a4b0: 6e 6f 74 68 65 72 20 74 68 61 74 0a 2a 2a 20 70  nother that.** p
a4c0: 72 6f 63 65 73 73 65 73 20 74 65 78 74 20 65 6e  rocesses text en
a4d0: 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 31 36 20  coded in UTF-16 
a4e0: 28 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 31 36 29  (CollSeq.xCmp16)
a4f0: 2c 20 75 73 69 6e 67 20 74 68 65 20 6d 61 63 68  , using the mach
a500: 69 6e 65 0a 2a 2a 20 6e 61 74 69 76 65 20 62 79  ine.** native by
a510: 74 65 20 6f 72 64 65 72 2e 20 57 68 65 6e 20 61  te order. When a
a520: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
a530: 6e 63 65 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20  nce is invoked, 
a540: 53 51 4c 69 74 65 20 73 65 6c 65 63 74 73 0a 2a  SQLite selects.*
a550: 2a 20 74 68 65 20 76 65 72 73 69 6f 6e 20 74 68  * the version th
a560: 61 74 20 77 69 6c 6c 20 72 65 71 75 69 72 65 20  at will require 
a570: 74 68 65 20 6c 65 61 73 74 20 65 78 70 65 6e 73  the least expens
a580: 69 76 65 20 65 6e 63 6f 64 69 6e 67 0a 2a 2a 20  ive encoding.** 
a590: 74 72 61 6e 73 6c 61 74 69 6f 6e 73 2c 20 69 66  translations, if
a5a0: 20 61 6e 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   any..**.** The 
a5b0: 43 6f 6c 6c 53 65 71 2e 70 55 73 65 72 20 6d 65  CollSeq.pUser me
a5c0: 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 69 73  mber variable is
a5d0: 20 61 6e 20 65 78 74 72 61 20 70 61 72 61 6d 65   an extra parame
a5e0: 74 65 72 20 74 68 61 74 20 70 61 73 73 65 64 20  ter that passed 
a5f0: 69 6e 0a 2a 2a 20 61 73 20 74 68 65 20 66 69 72  in.** as the fir
a600: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
a610: 68 65 20 55 54 46 2d 38 20 63 6f 6d 70 61 72 69  he UTF-8 compari
a620: 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 78 43  son function, xC
a630: 6d 70 2e 0a 2a 2a 20 43 6f 6c 6c 53 65 71 2e 70  mp..** CollSeq.p
a640: 55 73 65 72 31 36 20 69 73 20 74 68 65 20 65 71  User16 is the eq
a650: 75 69 76 61 6c 65 6e 74 20 66 6f 72 20 74 68 65  uivalent for the
a660: 20 55 54 46 2d 31 36 20 63 6f 6d 70 61 72 69 73   UTF-16 comparis
a670: 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  on function,.** 
a680: 78 43 6d 70 31 36 2e 0a 2a 2a 0a 2a 2a 20 49 66  xCmp16..**.** If
a690: 20 62 6f 74 68 20 43 6f 6c 6c 53 65 71 2e 78 43   both CollSeq.xC
a6a0: 6d 70 20 61 6e 64 20 43 6f 6c 6c 53 65 71 2e 78  mp and CollSeq.x
a6b0: 43 6d 70 31 36 20 61 72 65 20 4e 55 4c 4c 2c 20  Cmp16 are NULL, 
a6c0: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
a6d0: 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
a6e0: 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
a6f0: 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
a700: 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
a710: 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
a720: 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
a730: 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
a740: 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
a750: 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
a760: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
a770: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
a780: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
a790: 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
a7a0: 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
a7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a7c0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
a7d0: 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
a7e0: 29 20 2a 2f 0a 20 20 75 38 20 74 79 70 65 3b 20  ) */.  u8 type; 
a7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a800: 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
a810: 45 5f 43 4f 4c 4c 5f 2e 2e 2e 20 76 61 6c 75 65  E_COLL_... value
a820: 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 76 6f 69  s below */.  voi
a830: 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
a840: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
a850: 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
a860: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
a870: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
a880: 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
a890: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
a8a0: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
a8b0: 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
a8c0: 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
a8d0: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
a8e0: 76 61 6c 75 65 73 20 6f 66 20 43 6f 6c 6c 53 65  values of CollSe
a8f0: 71 2e 74 79 70 65 3a 0a 2a 2f 0a 23 64 65 66 69  q.type:.*/.#defi
a900: 6e 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 42  ne SQLITE_COLL_B
a910: 49 4e 41 52 59 20 20 31 20 20 2f 2a 20 54 68 65  INARY  1  /* The
a920: 20 64 65 66 61 75 6c 74 20 6d 65 6d 63 6d 70 28   default memcmp(
a930: 29 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  ) collating sequ
a940: 65 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ence */.#define 
a950: 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41  SQLITE_COLL_NOCA
a960: 53 45 20 20 32 20 20 2f 2a 20 54 68 65 20 62 75  SE  2  /* The bu
a970: 69 6c 74 2d 69 6e 20 4e 4f 43 41 53 45 20 63 6f  ilt-in NOCASE co
a980: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
a990: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a9a0: 54 45 5f 43 4f 4c 4c 5f 52 45 56 45 52 53 45 20  TE_COLL_REVERSE 
a9b0: 33 20 20 2f 2a 20 54 68 65 20 62 75 69 6c 74 2d  3  /* The built-
a9c0: 69 6e 20 52 45 56 45 52 53 45 20 63 6f 6c 6c 61  in REVERSE colla
a9d0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f  ting sequence */
a9e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a9f0: 43 4f 4c 4c 5f 55 53 45 52 20 20 20 20 30 20 20  COLL_USER    0  
aa00: 2f 2a 20 41 6e 79 20 6f 74 68 65 72 20 75 73 65  /* Any other use
aa10: 72 2d 64 65 66 69 6e 65 64 20 63 6f 6c 6c 61 74  r-defined collat
aa20: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a  ing sequence */.
aa30: 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
aa40: 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
aa50: 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
aa60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
aa70: 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
aa80: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
aa90: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
aaa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
aab0: 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
aac0: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
aad0: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a  ng order */../*.
aae0: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
aaf0: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
ab00: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
ab10: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
ab20: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
ab30: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
ab40: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
ab50: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
ab60: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
ab70: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
ab80: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
ab90: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
aba0: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
abb0: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
abc0: 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a  cutively.  .**.*
abd0: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
abe0: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
abf0: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
ac00: 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77 61  th 'a'.  That wa
ac10: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
ac20: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
ac30: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
ac40: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
ac50: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
ac60: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
ac70: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
ac80: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
ac90: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
aca0: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
acb0: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
acc0: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
acd0: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
ace0: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
acf0: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
ad00: 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rison..*/.#defin
ad10: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
ad20: 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e  T     'a'.#defin
ad30: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  e SQLITE_AFF_NON
ad40: 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e  E     'b'.#defin
ad50: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
ad60: 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e  ERIC  'c'.#defin
ad70: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
ad80: 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e  EGER  'd'.#defin
ad90: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
ada0: 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69  L     'e'..#defi
adb0: 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
adc0: 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
add0: 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
ade0: 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
adf0: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
ae00: 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
ae10: 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
ae20: 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
ae30: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
ae40: 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ue. .*/.#define 
ae50: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
ae60: 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20      0x67../*.** 
ae70: 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
ae80: 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
ae90: 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
aea0: 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
aeb0: 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
aec0: 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a 23 64 65  affinity..*/.#de
aed0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
aee0: 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f  IFNULL   0x08  /
aef0: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
af00: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
af10: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
af20: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
af30: 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x10  /* Store 
af40: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
af50: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
af60: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
af70: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
af80: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
af90: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
afa0: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
afb0: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
afc0: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
afd0: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
afe0: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
aff0: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
b000: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
b010: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
b020: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
b030: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
b040: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
b050: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
b060: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
b070: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
b080: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
b090: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
b0a0: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
b0b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
b0c0: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
b0d0: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
b0e0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b0f0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
b100: 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
b110: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
b120: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
b130: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
b140: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
b150: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
b160: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
b170: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b180: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
b190: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
b1a0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
b1b0: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
b1c0: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
b1d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
b1e0: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
b1f0: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
b200: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
b210: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
b220: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
b230: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
b240: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
b250: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
b260: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
b270: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
b280: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
b290: 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
b2a0: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
b2b0: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
b2c0: 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20  ess real tables 
b2d0: 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64  .** within the d
b2e0: 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74  atabase. So that
b2f0: 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20   they appear as 
b300: 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c  part of the call
b310: 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74  ers .** transact
b320: 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
b330: 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
b340: 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
b350: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f   database .** co
b360: 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74  nnection as that
b370: 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
b380: 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20   SQL operations 
b390: 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
b3a0: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  able..**.** All 
b3b0: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74  VTable objects t
b3c0: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  hat correspond t
b3d0: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
b3e0: 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20   in a shared.** 
b3f0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
b400: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74  are initially st
b410: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
b420: 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f  -list pointed to
b430: 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65   by.** the Table
b440: 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20  .pVTable member 
b450: 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20  variable of the 
b460: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61  corresponding Ta
b470: 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57  ble object..** W
b480: 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70  hen an sqlite3_p
b490: 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69  repare() operati
b4a0: 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74  on is required t
b4b0: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
b4c0: 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69  tual.** table, i
b4d0: 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c  t searches the l
b4e0: 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62  ist for the VTab
b4f0: 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  le that correspo
b500: 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  nds to the.** da
b510: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b520: 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70  n doing the prep
b530: 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75  aring so as to u
b540: 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a  se the correct.*
b550: 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  * sqlite3_vtab* 
b560: 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f  handle in the co
b570: 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a  mpiled query..**
b580: 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d  .** When an in-m
b590: 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65  emory Table obje
b5a0: 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66  ct is deleted (f
b5b0: 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20  or example when 
b5c0: 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  the.** schema is
b5d0: 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20   being reloaded 
b5e0: 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29  for some reason)
b5f0: 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a  , the VTable obj
b600: 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a  ects are not .**
b610: 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
b620: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
b630: 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78  andles are not x
b640: 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a  Disconnect()ed .
b650: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
b660: 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
b670: 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
b680: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
b690: 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
b6a0: 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
b6b0: 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
b6c0: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
b6d0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
b6e0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
b6f0: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
b700: 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
b710: 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
b720: 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74  ected .** next t
b730: 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ime a statement 
b740: 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e  is prepared usin
b750: 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e  g said sqlite3*.
b760: 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a   This is done.**
b770: 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f   to avoid deadlo
b780: 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76  ck issues involv
b790: 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c  ing multiple sql
b7a0: 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
b7b0: 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20  es..** Refer to 
b7c0: 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66  comments above f
b7d0: 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56  unction sqlite3V
b7e0: 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20  tabUnlockList() 
b7f0: 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e  for an.** explan
b800: 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20  ation as to why 
b810: 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64  it is safe to ad
b820: 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e  d an entry to an
b830: 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
b840: 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74  nect.** list wit
b850: 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65  hout holding the
b860: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
b870: 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
b880: 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  ex..**.** The me
b890: 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73  mory for objects
b8a0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
b8b0: 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65   always allocate
b8c0: 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33  d by .** sqlite3
b8d0: 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e  DbMalloc(), usin
b8e0: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
b8f0: 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69   handle stored i
b900: 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a  n VTable.db as .
b910: 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
b920: 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
b930: 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
b940: 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
b950: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
b960: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
b970: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
b980: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
b990: 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
b9a0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
b9b0: 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
b9c0: 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
b9d0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
b9e0: 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
b9f0: 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
ba00: 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
ba10: 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
ba20: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ba30: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
ba40: 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
ba50: 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ba70: 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
ba80: 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
ba90: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
baa0: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65   SQL table is re
bab0: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
bac0: 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ory by an instan
bad0: 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c  ce of the.** fol
bae0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
baf0: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e  ..**.** Table.zN
bb00: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
bb10: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  of the table.  T
bb20: 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f  he case of the o
bb30: 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54  riginal.** CREAT
bb40: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
bb50: 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74  t is stored, but
bb60: 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67   case is not sig
bb70: 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20  nificant for.** 
bb80: 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a  comparisons..**.
bb90: 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73  ** Table.nCol is
bba0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
bbb0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
bbc0: 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f  able.  Table.aCo
bbd0: 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  l is a.** pointe
bbe0: 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66  r to an array of
bbf0: 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72   Column structur
bc00: 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68  es, one for each
bc10: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49   column..**.** I
bc20: 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20  f the table has 
bc30: 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  an INTEGER PRIMA
bc40: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62  RY KEY, then Tab
bc50: 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20  le.iPKey is the 
bc60: 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20  index of.** the 
bc70: 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74  column that is t
bc80: 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72  hat key.   Other
bc90: 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79  wise Table.iPKey
bca0: 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e   is negative.  N
bcb0: 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ote.** that the 
bcc0: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
bcd0: 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74  PRIMARY KEY must
bce0: 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20   be INTEGER for 
bcf0: 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a  this field to.**
bd00: 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54   be set.  An INT
bd10: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
bd20: 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
bd30: 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72  rowid for each r
bd40: 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62  ow of.** the tab
bd50: 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20  le.  If a table 
bd60: 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50  has no INTEGER P
bd70: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
bd80: 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a   a random rowid.
bd90: 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  ** is generated 
bda0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
bdb0: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48  the table.  TF_H
bdc0: 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20  asPrimaryKey is 
bdd0: 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61  set if.** the ta
bde0: 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d  ble has any PRIM
bdf0: 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52  ARY KEY, INTEGER
be00: 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a   or otherwise..*
be10: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20  *.** Table.tnum 
be20: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
be30: 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20  er for the root 
be40: 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68  BTree page of th
be50: 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a  e table in the.*
be60: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  * database file.
be70: 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69    If Table.iDb i
be80: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
be90: 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
bea0: 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20  e backend.** in 
beb0: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30  sqlite.aDb[].  0
bec0: 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e   is for the main
bed0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20   database and 1 
bee0: 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20  is for the file 
bef0: 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65  that.** holds te
bf00: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
bf10: 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20  nd indices.  If 
bf20: 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20  TF_Ephemeral is 
bf30: 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  set.** then the 
bf40: 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20  table is stored 
bf50: 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69  in a file that i
bf60: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
bf70: 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20  deleted.** when 
bf80: 74 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  the VDBE cursor 
bf90: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  to the table is 
bfa0: 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73  closed.  In this
bfb0: 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d   case Table.tnum
bfc0: 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45   .** refers VDBE
bfd0: 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74   cursor number t
bfe0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61  hat holds the ta
bff0: 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f  ble open, not to
c000: 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67   the root.** pag
c010: 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73  e number.  Trans
c020: 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20  ient tables are 
c030: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
c040: 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a   results of a.**
c050: 20 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20   sub-query that 
c060: 61 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20  appears instead 
c070: 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  of a real table 
c080: 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  name in the FROM
c090: 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61   clause .** of a
c0a0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
c0b0: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  t..*/.struct Tab
c0c0: 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
c0d0: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
c0e0: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
c0f0: 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 69 6e   or view */.  in
c100: 74 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20  t iPKey;        
c110: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67     /* If not neg
c120: 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b  ative, use aCol[
c130: 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72  iPKey] as the pr
c140: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69  imary key */.  i
c150: 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
c160: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c170: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
c180: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 43 6f 6c 75   table */.  Colu
c190: 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
c1a0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
c1b0: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
c1c0: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
c1d0: 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
c1e0: 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
c1f0: 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
c200: 2e 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  . */.  int tnum;
c210: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
c220: 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66  oot BTree node f
c230: 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28 73  or this table (s
c240: 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a  ee note above) *
c250: 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
c260: 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
c270: 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
c280: 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
c290: 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
c2a0: 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
c2b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c2c0: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
c2d0: 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
c2e0: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
c2f0: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
c300: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
c310: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
c320: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
c330: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
c340: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
c350: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
c360: 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
c370: 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
c380: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
c390: 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
c3a0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
c3b0: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
c3c0: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
c3d0: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
c3e0: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
c3f0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
c400: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
c410: 45 78 70 72 20 2a 70 43 68 65 63 6b 3b 20 20 20  Expr *pCheck;   
c420: 20 20 20 20 20 2f 2a 20 54 68 65 20 41 4e 44 20       /* The AND 
c430: 6f 66 20 61 6c 6c 20 43 48 45 43 4b 20 63 6f 6e  of all CHECK con
c440: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64  straints */.#end
c450: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
c460: 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
c470: 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
c480: 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
c490: 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
c4a0: 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
c4b0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
c4c0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
c4d0: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
c4e0: 4c 54 41 42 4c 45 0a 20 20 56 54 61 62 6c 65 20  LTABLE.  VTable 
c4f0: 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
c500: 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
c510: 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 20 20 69 6e  objects. */.  in
c520: 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  t nModuleArg;   
c530: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c540: 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
c550: 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61   module */.  cha
c560: 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b  r **azModuleArg;
c570: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c    /* Text of all
c580: 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30   module args. [0
c590: 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65  ] is module name
c5a0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
c5b0: 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
c5c0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
c5d0: 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
c5e0: 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
c5f0: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
c600: 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
c610: 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
c620: 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
c630: 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
c640: 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
c650: 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
c660: 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
c670: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
c680: 66 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67  for Tabe.tabFlag
c690: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  s..*/.#define TF
c6a0: 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
c6b0: 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64   0x01    /* Read
c6c0: 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62  -only system tab
c6d0: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
c6e0: 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20  _Ephemeral      
c6f0: 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65   0x02    /* An e
c700: 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
c710: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
c720: 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
c730: 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
c740: 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
c750: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
c760: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
c770: 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
c780: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
c790: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
c7a0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74  .#define TF_Virt
c7b0: 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30  ual         0x10
c7c0: 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74      /* Is a virt
c7d0: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
c7e0: 66 69 6e 65 20 54 46 5f 4e 65 65 64 4d 65 74 61  fine TF_NeedMeta
c7f0: 64 61 74 61 20 20 20 20 30 78 32 30 20 20 20 20  data    0x20    
c800: 2f 2a 20 61 43 6f 6c 5b 5d 2e 7a 54 79 70 65 20  /* aCol[].zType 
c810: 61 6e 64 20 61 43 6f 6c 5b 5d 2e 70 43 6f 6c 6c  and aCol[].pColl
c820: 20 6d 69 73 73 69 6e 67 20 2a 2f 0a 0a 0a 0a 2f   missing */..../
c830: 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
c840: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
c850: 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
c860: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
c870: 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
c880: 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
c890: 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
c8a0: 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
c8b0: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
c8c0: 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
c8d0: 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
c8e0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
c8f0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
c900: 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
c910: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
c920: 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
c930: 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21  s & TF_Virtual)!
c940: 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
c950: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
c960: 28 28 58 29 2d 3e 69 73 48 69 64 64 65 6e 29 0a  ((X)->isHidden).
c970: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
c980: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
c990: 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
c9a0: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
c9b0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
c9c0: 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
c9d0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
c9e0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
c9f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
ca00: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
ca10: 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
ca20: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
ca30: 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
ca40: 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
ca50: 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
ca60: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
ca70: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
ca80: 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
ca90: 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
caa0: 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
cab0: 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
cac0: 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
cad0: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
cae0: 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
caf0: 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
cb00: 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
cb10: 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
cb20: 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
cb30: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
cb40: 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
cb50: 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
cb60: 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
cb70: 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
cb80: 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
cb90: 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
cba0: 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
cbb0: 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
cbc0: 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a 20  is "ex2"..**.** 
cbd0: 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
cbe0: 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
cbf0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
cc00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
cc10: 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
cc20: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
cc30: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
cc40: 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
cc50: 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
cc60: 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
cc70: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
cc80: 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
cc90: 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
cca0: 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
ccb0: 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
ccc0: 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
ccd0: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
cce0: 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
ccf0: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
cd00: 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
cd10: 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
cd20: 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67    /* Next foreig
cd30: 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20 2a  n key in pFrom *
cd40: 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
cd50: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
cd60: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
cd70: 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
cd80: 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
cd90: 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
cda0: 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69     /* Next forei
cdb0: 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20  gn key on table 
cdc0: 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 46  named zTo */.  F
cdd0: 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
cde0: 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 66 6f 72   /* Previous for
cdf0: 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c  eign key on tabl
ce00: 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20  e named zTo */. 
ce10: 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
ce20: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ce30: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
ce40: 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
ce50: 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
ce60: 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
ce70: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
ce80: 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
ce90: 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
cea0: 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
ceb0: 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
cec0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44           /* ON D
ced0: 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
cee0: 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
cef0: 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
cf00: 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
cf10: 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69 67 67 65  r[2];  /* Trigge
cf20: 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
cf30: 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
cf40: 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
cf50: 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
cf60: 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
cf70: 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
cf80: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
cf90: 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  m;         /* In
cfa0: 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
cfb0: 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
cfc0: 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
cfd0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
cfe0: 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 30  mn in zTo.  If 0
cff0: 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
d000: 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
d010: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
d020: 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
d030: 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20 2a   nCol column s *
d040: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
d050: 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
d060: 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
d070: 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
d080: 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
d090: 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
d0a0: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
d0b0: 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
d0c0: 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
d0d0: 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
d0e0: 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
d0f0: 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
d100: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
d110: 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
d120: 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
d130: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
d140: 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
d150: 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
d160: 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
d170: 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
d180: 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
d190: 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
d1a0: 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
d1b0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
d1c0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
d1d0: 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
d1e0: 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
d1f0: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
d200: 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
d210: 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
d220: 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
d230: 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
d240: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
d250: 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
d260: 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
d270: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
d280: 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
d290: 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
d2a0: 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
d2b0: 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
d2c0: 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
d2d0: 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
d2e0: 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
d2f0: 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
d300: 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
d310: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
d320: 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
d330: 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
d340: 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
d350: 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
d360: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
d370: 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
d380: 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
d390: 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
d3a0: 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
d3b0: 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
d3c0: 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
d3d0: 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
d3e0: 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
d3f0: 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
d400: 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
d410: 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
d420: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
d430: 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
d440: 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
d450: 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
d460: 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
d470: 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
d480: 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
d490: 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
d4a0: 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
d4b0: 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
d4c0: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
d4d0: 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
d4e0: 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
d4f0: 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
d500: 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
d510: 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
d520: 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
d530: 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
d540: 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
d550: 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  .** .** The foll
d560: 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
d570: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
d580: 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
d590: 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
d5a0: 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
d5b0: 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
d5c0: 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
d5d0: 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
d5e0: 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
d5f0: 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
d600: 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
d610: 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
d620: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
d630: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
d640: 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
d650: 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
d660: 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
d670: 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
d680: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
d690: 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
d6a0: 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
d6b0: 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
d6c0: 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
d6d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
d6e0: 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
d6f0: 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
d700: 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
d710: 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
d720: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
d730: 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
d740: 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
d750: 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
d760: 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
d770: 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
d780: 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
d790: 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
d7a0: 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
d7b0: 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
d7c0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
d7d0: 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
d7e0: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
d7f0: 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
d800: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
d810: 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
d820: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
d830: 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
d840: 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
d850: 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
d860: 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
d870: 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
d880: 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
d890: 39 39 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  99  /* Do whatev
d8a0: 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
d8b0: 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
d8c0: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
d8d0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
d8e0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
d8f0: 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
d900: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
d910: 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
d920: 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
d930: 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
d940: 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  e .** comparison
d950: 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
d960: 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74 72 75 63  x keys..*/.struc
d970: 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73 71  t KeyInfo {.  sq
d980: 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
d990: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
d9a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
d9b0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
d9c0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
d9d0: 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
d9e0: 74 68 65 20 54 45 58 54 5f 55 74 66 2a 20 76 61  the TEXT_Utf* va
d9f0: 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46  lues */.  u16 nF
da00: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
da10: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
da20: 65 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d 20 2a 2f  es in aColl[] */
da30: 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
da40: 72 3b 20 20 20 20 20 2f 2a 20 49 66 20 64 65 66  r;     /* If def
da50: 69 6e 65 64 20 61 6e 20 61 53 6f 72 74 4f 72 64  ined an aSortOrd
da60: 65 72 5b 69 5d 20 69 73 20 74 72 75 65 2c 20 73  er[i] is true, s
da70: 6f 72 74 20 44 45 53 43 20 2a 2f 0a 20 20 43 6f  ort DESC */.  Co
da80: 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
da90: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
daa0: 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
dab0: 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
dac0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
dad0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
dae0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
daf0: 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
db00: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a  mation about a.*
db10: 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72  * single index r
db20: 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
db30: 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73  lready been pars
db40: 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
db50: 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73  vidual.** values
db60: 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
db70: 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
db80: 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
db90: 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
dba0: 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
dbb0: 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
dbc0: 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
dbd0: 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
dbe0: 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
dbf0: 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
dc00: 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
dc10: 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
dc20: 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
dc30: 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
dc40: 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
dc50: 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
dc60: 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
dc70: 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
dc80: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
dc90: 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  is structure hol
dca0: 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  ds a record that
dcb0: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
dcc0: 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a  n disassembled.*
dcd0: 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74  * into its const
dce0: 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a  ituent fields..*
dcf0: 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
dd00: 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
dd10: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
dd20: 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
dd30: 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
dd40: 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36  rmation */.  u16
dd50: 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
dd60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
dd70: 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
dd80: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
dd90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f            /* Boo
dda0: 6c 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20  lean settings.  
ddb0: 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c  UNPACKED_... bel
ddc0: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69  ow */.  i64 rowi
ddd0: 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55  d;          /* U
dde0: 73 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f  sed by UNPACKED_
ddf0: 50 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f  PREFIX_SEARCH */
de00: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
de10: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
de20: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
de30: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20  lowed values of 
de40: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66  UnpackedRecord.f
de50: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
de60: 55 4e 50 41 43 4b 45 44 5f 4e 45 45 44 5f 46 52  UNPACKED_NEED_FR
de70: 45 45 20 20 20 20 20 30 78 30 30 30 31 20 20 2f  EE     0x0001  /
de80: 2a 20 4d 65 6d 6f 72 79 20 69 73 20 66 72 6f 6d  * Memory is from
de90: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 29   sqlite3Malloc()
dea0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41   */.#define UNPA
deb0: 43 4b 45 44 5f 4e 45 45 44 5f 44 45 53 54 52 4f  CKED_NEED_DESTRO
dec0: 59 20 20 30 78 30 30 30 32 20 20 2f 2a 20 61 70  Y  0x0002  /* ap
ded0: 4d 65 6d 5b 5d 73 20 73 68 6f 75 6c 64 20 61 6c  Mem[]s should al
dee0: 6c 20 62 65 20 64 65 73 74 72 6f 79 65 64 20 2a  l be destroyed *
def0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
df00: 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 20  ED_IGNORE_ROWID 
df10: 20 30 78 30 30 30 34 20 20 2f 2a 20 49 67 6e 6f   0x0004  /* Igno
df20: 72 65 20 74 72 61 69 6c 69 6e 67 20 72 6f 77 69  re trailing rowi
df30: 64 20 6f 6e 20 6b 65 79 31 20 2a 2f 0a 23 64 65  d on key1 */.#de
df40: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 4e  fine UNPACKED_IN
df50: 43 52 4b 45 59 20 20 20 20 20 20 20 30 78 30 30  CRKEY       0x00
df60: 30 38 20 20 2f 2a 20 4d 61 6b 65 20 74 68 69 73  08  /* Make this
df70: 20 6b 65 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20   key an epsilon 
df80: 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65 66 69 6e  larger */.#defin
df90: 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  e UNPACKED_PREFI
dfa0: 58 5f 4d 41 54 43 48 20 20 30 78 30 30 31 30 20  X_MATCH  0x0010 
dfb0: 20 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61 74   /* A prefix mat
dfc0: 63 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ch is considered
dfd0: 20 4f 4b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55   OK */.#define U
dfe0: 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
dff0: 45 41 52 43 48 20 30 78 30 30 32 30 20 20 2f 2a  EARCH 0x0020  /*
e000: 20 41 20 70 72 65 66 69 78 20 6d 61 74 63 68 20   A prefix match 
e010: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b  is considered OK
e020: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
e030: 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
e040: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
e050: 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
e060: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
e070: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
e080: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
e090: 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
e0a0: 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
e0b0: 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
e0c0: 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
e0d0: 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
e0e0: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
e0f0: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
e100: 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
e110: 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
e120: 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
e130: 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
e140: 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
e150: 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
e160: 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
e170: 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
e180: 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
e190: 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
e1a0: 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
e1b0: 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
e1c0: 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
e1d0: 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
e1e0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
e1f0: 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
e200: 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
e210: 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
e220: 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
e230: 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
e240: 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
e250: 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
e260: 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
e270: 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
e280: 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
e290: 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73  use the .** firs
e2a0: 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
e2b0: 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
e2c0: 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
e2d0: 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
e2e0: 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
e2f0: 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
e300: 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
e310: 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
e320: 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
e330: 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
e340: 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
e350: 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
e360: 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
e370: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
e380: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
e390: 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
e3a0: 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
e3b0: 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
e3c0: 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
e3d0: 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
e3e0: 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
e3f0: 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
e400: 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
e410: 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
e420: 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
e430: 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
e440: 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
e450: 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
e460: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a  ict resolution .
e470: 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
e480: 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
e490: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
e4a0: 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
e4b0: 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
e4c0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
e4d0: 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
e4e0: 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
e4f0: 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
e500: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d   */.  int nColum
e510: 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
e520: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
e530: 68 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  he table used by
e540: 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
e550: 20 69 6e 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   int *aiColumn; 
e560: 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d    /* Which colum
e570: 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74  ns are used by t
e580: 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20  his index.  1st 
e590: 69 73 20 30 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  is 0 */.  unsign
e5a0: 65 64 20 2a 61 69 52 6f 77 45 73 74 3b 20 2f 2a  ed *aiRowEst; /*
e5b0: 20 52 65 73 75 6c 74 20 6f 66 20 41 4e 41 4c 59   Result of ANALY
e5c0: 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65  ZE: Est. rows se
e5d0: 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63  lected by each c
e5e0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  olumn */.  Table
e5f0: 20 2a 70 54 61 62 6c 65 3b 20 20 20 2f 2a 20 54   *pTable;   /* T
e600: 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
e610: 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
e620: 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
e630: 20 2f 2a 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   /* Page contain
e640: 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
e650: 20 69 6e 64 65 78 20 69 6e 20 64 61 74 61 62 61   index in databa
e660: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
e670: 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 2f 2a  onError;      /*
e680: 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
e690: 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
e6a0: 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
e6b0: 20 20 75 38 20 61 75 74 6f 49 6e 64 65 78 3b 20    u8 autoIndex; 
e6c0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 73     /* True if is
e6d0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
e6e0: 72 65 61 74 65 64 20 28 65 78 3a 20 62 79 20 55  reated (ex: by U
e6f0: 4e 49 51 55 45 29 20 2a 2f 0a 20 20 63 68 61 72  NIQUE) */.  char
e700: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 2f 2a 20   *zColAff;   /* 
e710: 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
e720: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
e730: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
e740: 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
e750: 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
e760: 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
e770: 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
e780: 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
e790: 70 53 63 68 65 6d 61 3b 20 2f 2a 20 53 63 68 65  pSchema; /* Sche
e7a0: 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
e7b0: 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
e7c0: 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 2f   *aSortOrder;  /
e7d0: 2a 20 41 72 72 61 79 20 6f 66 20 73 69 7a 65 20  * Array of size 
e7e0: 49 6e 64 65 78 2e 6e 43 6f 6c 75 6d 6e 2e 20 54  Index.nColumn. T
e7f0: 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65  rue==DESC, False
e800: 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20  ==ASC */.  char 
e810: 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 2f 2a 20 41  **azColl;   /* A
e820: 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
e830: 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
e840: 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
e850: 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61  IndexSample *aSa
e860: 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 41 72 72 61  mple;    /* Arra
e870: 79 20 6f 66 20 53 51 4c 49 54 45 5f 49 4e 44 45  y of SQLITE_INDE
e880: 58 5f 53 41 4d 50 4c 45 53 20 73 61 6d 70 6c 65  X_SAMPLES sample
e890: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  s */.};../*.** E
e8a0: 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
e8b0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
e8c0: 73 74 61 74 32 20 74 61 62 6c 65 20 69 73 20 72  stat2 table is r
e8d0: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
e8e0: 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61  mory .** using a
e8f0: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
e900: 69 73 20 74 79 70 65 2e 0a 2a 2f 0a 73 74 72 75  is type..*/.stru
e910: 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
e920: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
e930: 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
e940: 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65  * Value if eType
e950: 20 69 73 20 53 51 4c 49 54 45 5f 54 45 58 54 20   is SQLITE_TEXT 
e960: 6f 72 20 53 51 4c 49 54 45 5f 42 4c 4f 42 20 2a  or SQLITE_BLOB *
e970: 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 20  /.    double r; 
e980: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69        /* Value i
e990: 66 20 65 54 79 70 65 20 69 73 20 53 51 4c 49 54  f eType is SQLIT
e9a0: 45 5f 46 4c 4f 41 54 20 6f 72 20 53 51 4c 49 54  E_FLOAT or SQLIT
e9b0: 45 5f 49 4e 54 45 47 45 52 20 2a 2f 0a 20 20 7d  E_INTEGER */.  }
e9c0: 20 75 3b 0a 20 20 75 38 20 65 54 79 70 65 3b 20   u;.  u8 eType; 
e9d0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
e9e0: 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 49  E_NULL, SQLITE_I
e9f0: 4e 54 45 47 45 52 20 2e 2e 2e 20 65 74 63 2e 20  NTEGER ... etc. 
ea00: 2a 2f 0a 20 20 75 38 20 6e 42 79 74 65 3b 20 20  */.  u8 nByte;  
ea10: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 69         /* Size i
ea20: 6e 20 62 79 74 65 20 6f 66 20 74 65 78 74 20 6f  n byte of text o
ea30: 72 20 62 6c 6f 62 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  r blob. */.};../
ea40: 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
ea50: 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
ea60: 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
ea70: 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
ea80: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
ea90: 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
eaa0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
eab0: 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
eac0: 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
ead0: 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
eae0: 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
eaf0: 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
eb00: 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
eb10: 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
eb20: 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
eb30: 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
eb40: 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
eb50: 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
eb60: 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
eb70: 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
eb80: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
eb90: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
eba0: 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
ebb0: 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
ebc0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
ebd0: 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
ebe0: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
ebf0: 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
ec00: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
ec10: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
ec20: 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
ec30: 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
ec40: 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
ec50: 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
ec60: 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
ec70: 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
ec80: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
ec90: 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
eca0: 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
ecb0: 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
ecc0: 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
ecd0: 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
ece0: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
ecf0: 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
ed00: 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
ed10: 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
ed20: 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
ed30: 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
ed40: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
ed50: 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
ed60: 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
ed70: 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
ed80: 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
ed90: 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
eda0: 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
edb0: 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
edc0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
edd0: 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
ede0: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
edf0: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
ee00: 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
ee10: 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
ee20: 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
ee30: 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
ee40: 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
ee50: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
ee60: 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
ee70: 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
ee80: 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
ee90: 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
eea0: 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
eeb0: 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
eec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eed0: 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
eee0: 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
eef0: 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
ef00: 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
ef10: 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
ef20: 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
ef30: 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
ef40: 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
ef50: 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef70: 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
ef80: 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
ef90: 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
efa0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
efb0: 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
efc0: 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
efd0: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
efe0: 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
eff0: 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
f000: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
f010: 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
f020: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
f030: 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
f040: 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 73 74  ng index */.  st
f050: 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
f060: 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
f070: 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
f080: 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
f090: 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
f0a0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
f0b0: 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
f0c0: 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
f0d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
f0e0: 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
f0f0: 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
f100: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
f110: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
f120: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
f130: 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
f140: 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
f150: 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
f160: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
f170: 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
f180: 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
f190: 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
f1a0: 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
f1b0: 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
f1c0: 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
f1d0: 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
f1e0: 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
f1f0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
f200: 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
f210: 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
f220: 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
f230: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
f240: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
f250: 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
f260: 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
f270: 43 6f 6c 75 6d 6e 41 6c 6c 6f 63 3b 20 20 20 20  ColumnAlloc;    
f280: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f290: 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
f2a0: 66 6f 72 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20  for aCol[] */.  
f2b0: 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
f2c0: 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
f2d0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
f2e0: 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
f2f0: 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
f300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f310: 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
f320: 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
f330: 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
f340: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f360: 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
f370: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
f380: 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
f390: 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
f3a0: 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
f3b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
f3c0: 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
f3d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
f3e0: 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
f3f0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
f400: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
f410: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
f420: 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
f430: 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
f440: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
f450: 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
f460: 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
f470: 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
f480: 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
f490: 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
f4a0: 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
f4b0: 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
f4c0: 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
f4d0: 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
f4e0: 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
f4f0: 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
f500: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f510: 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
f520: 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 6e 74  aFunc[] */.  int
f530: 20 6e 46 75 6e 63 41 6c 6c 6f 63 3b 20 20 20 20   nFuncAlloc;    
f540: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
f550: 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65  f slots allocate
f560: 64 20 66 6f 72 20 61 46 75 6e 63 5b 5d 20 2a 2f  d for aFunc[] */
f570: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
f580: 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
f590: 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
f5a0: 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
f5b0: 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
f5c0: 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
f5d0: 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
f5e0: 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
f5f0: 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
f600: 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
f610: 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
f620: 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
f630: 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
f640: 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
f650: 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
f660: 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
f670: 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
f680: 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
f690: 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
f6a0: 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
f6b0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
f6c0: 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
f6d0: 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
f6e0: 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
f6f0: 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
f700: 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
f710: 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
f720: 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
f730: 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
f740: 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
f750: 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
f760: 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
f770: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
f780: 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
f790: 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
f7a0: 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
f7b0: 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
f7c0: 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
f7d0: 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
f7e0: 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
f7f0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
f800: 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
f810: 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
f820: 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
f830: 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
f840: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
f850: 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
f860: 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
f870: 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
f880: 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
f890: 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
f8a0: 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
f8b0: 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
f8c0: 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
f8d0: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
f8e0: 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
f8f0: 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
f900: 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
f910: 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
f920: 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
f930: 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
f940: 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
f950: 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
f960: 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
f970: 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
f980: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
f990: 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
f9a0: 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
f9b0: 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a  LOAT, TK_BLOB, .
f9c0: 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
f9d0: 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
f9e0: 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
f9f0: 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
fa00: 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
fa10: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
fa20: 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
fa30: 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
fa40: 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
fa50: 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61  ns the .** varia
fa60: 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
fa70: 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
fa80: 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
fa90: 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
faa0: 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
fab0: 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
fac0: 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
fad0: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
fae0: 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
faf0: 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
fb00: 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
fb10: 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
fb20: 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
fb30: 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
fb40: 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
fb50: 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
fb60: 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
fb70: 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
fb80: 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
fb90: 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
fba0: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
fbb0: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
fbc0: 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
fbd0: 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
fbe0: 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
fbf0: 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
fc00: 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
fc10: 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
fc20: 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
fc30: 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
fc40: 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
fc50: 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
fc60: 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
fc70: 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
fc80: 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
fc90: 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
fca0: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
fcb0: 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
fcc0: 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
fcd0: 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
fce0: 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a  .** valid..**.**
fcf0: 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   An expression o
fd00: 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72  f the form ID or
fd10: 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f   ID.ID refers to
fd20: 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74   a column in a t
fd30: 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63  able..** For suc
fd40: 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45  h expressions, E
fd50: 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f  xpr.op is set to
fd60: 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45   TK_COLUMN and E
fd70: 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a  xpr.iTable is.**
fd80: 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72   the integer cur
fd90: 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20  sor number of a 
fda0: 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e  VDBE cursor poin
fdb0: 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62  ting to that tab
fdc0: 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69  le and.** Expr.i
fdd0: 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f  Column is the co
fde0: 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  lumn number for 
fdf0: 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c  the specific col
fe00: 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  umn.  If the.** 
fe10: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
fe20: 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69  ed as a result i
fe30: 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53  n an aggregate S
fe40: 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a  ELECT, then the.
fe50: 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f  ** value is also
fe60: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45   stored in the E
fe70: 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20  xpr.iAgg column 
fe80: 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65  in the aggregate
fe90: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63   so that.** it c
fea0: 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61  an be accessed a
feb0: 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61  fter all aggrega
fec0: 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  tes are computed
fed0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
fee0: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
fef0: 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65  unbound variable
ff00: 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74   marker (a quest
ff10: 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61  ion mark .** cha
ff20: 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
ff30: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
ff40: 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
ff50: 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
ff60: 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20  ndex .** number 
ff70: 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
ff80: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
ff90: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
ffa0: 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
ffb0: 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
ffc0: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
ffd0: 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
ffe0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
fff0: 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
10000 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
10010 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
10020 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
10030 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
10040 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
10050 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
10060 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
10070 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
10080 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
10090 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
100a0 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
100b0 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
100c0 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
100d0 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
100e0 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
100f0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
10100 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
10110 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
10120 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
10130 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
10140 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
10150 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
10160 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
10170 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
10180 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
10190 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
101a0 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
101b0 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
101c0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
101d0 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
101e0 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
101f0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
10200 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
10210 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
10220 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
10230 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
10240 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
10250 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
10260 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
10270 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
10280 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
10290 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
102a0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
102b0 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
102c0 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
102d0 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
102e0 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
102f0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
10300 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
10310 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
10320 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
10330 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
10340 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
10350 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
10360 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
10370 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
10380 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
10390 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
103a0 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
103b0 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
103c0 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
103d0 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
103e0 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
103f0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
10400 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
10410 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
10420 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
10430 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
10440 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
10450 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
10460 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
10470 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
10480 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
10490 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
104a0 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
104c0 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
104d0 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
104e0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
104f0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
10500 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
10510 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
10520 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
10530 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
10540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
10550 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
10560 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
10570 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
10580 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
10590 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
105a0 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
105b0 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
105c0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
105d0 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
105e0 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
105f0 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
10600 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
10610 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
10620 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
10630 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
10640 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
10650 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
10660 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
10670 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
10680 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
10690 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
106a0 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
106b0 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
106c0 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
106d0 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n. .  **********
106e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
106f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
10720 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
10730 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
10740 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
10750 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
10760 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
10770 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
10780 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
10790 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75 6e  List;     /* Fun
107a0 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20  ction arguments 
107b0 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49 4e  or in "<expr> IN
107c0 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20 2a   (<expr-list)" *
107d0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
107e0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55 73  elect;     /* Us
107f0 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65 63  ed for sub-selec
10800 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20 49  ts and "<expr> I
10810 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a 2f  N (<select>)" */
10820 0a 20 20 7d 20 78 3b 0a 20 20 43 6f 6c 6c 53 65  .  } x;.  CollSe
10830 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 20 20 20  q *pColl;       
10840 20 2f 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f   /* The collatio
10850 6e 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  n type of the co
10860 6c 75 6d 6e 20 6f 72 20 30 20 2a 2f 0a 0a 20 20  lumn or 0 */..  
10870 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
10880 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
10890 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
108a0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
108b0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
108c0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
108d0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
108e0 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
108f0 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
10900 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
10910 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
10920 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
10930 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
10940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69  **********/..  i
10980 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
10990 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
109a0 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  MN: cursor numbe
109b0 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69  r of table holdi
109c0 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  ng column.      
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109e0 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45     ** TK_REGISTE
109f0 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  R: register numb
10a00 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
10a10 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
10a20 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20  K_TRIGGER: 1 -> 
10a30 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f  new, 0 -> old */
10a40 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e  .  ynVar iColumn
10a50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  ;         /* TK_
10a60 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69  COLUMN: column i
10a70 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f  ndex.  -1 for ro
10a80 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20  wid..           
10a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
10aa0 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61   TK_VARIABLE: va
10ab0 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61  riable number (a
10ac0 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a  lways >= 1). */.
10ad0 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
10ae0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
10af0 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
10b00 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
10b10 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
10b20 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
10b30 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
10b40 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
10b50 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
10b60 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67  oin */.  u8 flag
10b70 73 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  s2;             
10b80 2f 2a 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66  /* Second set of
10b90 20 66 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e 2e   flags.  EP2_...
10ba0 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
10bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10bc0 49 66 20 61 20 54 4b 5f 52 45 47 49 53 54 45 52  If a TK_REGISTER
10bd0 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 76  , the original v
10be0 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 20  alue of Expr.op 
10bf0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
10c00 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
10c10 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
10c20 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
10c30 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
10c40 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
10c50 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
10c60 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
10c70 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 23 69 66 20  essions. */.#if 
10c80 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
10c90 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
10ca0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
10cb0 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
10cc0 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
10cd0 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
10ce0 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ndif.};../*.** T
10cf0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
10d00 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
10d10 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
10d20 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
10d30 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
10d40 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 31 20 20  mJoin   0x0001  
10d50 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e  /* Originated in
10d60 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
10d70 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
10d80 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
10d90 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f         0x0002  /
10da0 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
10db0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
10dc0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
10dd0 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65  efine EP_Resolve
10de0 64 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49  d   0x0004  /* I
10df0 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  Ds have been res
10e00 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73  olved to COLUMNs
10e10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
10e20 72 72 6f 72 20 20 20 20 20 20 30 78 30 30 30 38  rror      0x0008
10e30 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
10e40 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
10e50 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23  more errors */.#
10e60 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
10e70 63 74 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  ct   0x0010  /* 
10e80 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
10e90 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
10ea0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
10eb0 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
10ec0 20 20 30 78 30 30 32 30 20 20 2f 2a 20 70 53 65    0x0020  /* pSe
10ed0 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
10ee0 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
10ef0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
10f00 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30 34 30  blQuoted  0x0040
10f10 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73    /* token.z was
10f20 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
10f30 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
10f40 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20 30 78  EP_InfixFunc  0x
10f50 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 66 6f  0080  /* True fo
10f60 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
10f70 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
10f80 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
10f90 45 50 5f 45 78 70 43 6f 6c 6c 61 74 65 20 30 78  EP_ExpCollate 0x
10fa0 30 31 30 30 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  0100  /* Collati
10fb0 6e 67 20 73 65 71 75 65 6e 63 65 20 73 70 65 63  ng sequence spec
10fc0 69 66 69 65 64 20 65 78 70 6c 69 63 69 74 6c 79  ified explicitly
10fd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46   */.#define EP_F
10fe0 69 78 65 64 44 65 73 74 20 20 30 78 30 32 30 30  ixedDest  0x0200
10ff0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65 64    /* Result need
11000 65 64 20 69 6e 20 61 20 73 70 65 63 69 66 69 63  ed in a specific
11010 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64 65   register */.#de
11020 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
11030 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49 6e     0x0400  /* In
11040 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
11050 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
11060 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
11070 78 49 73 53 65 6c 65 63 74 20 20 30 78 30 38 30  xIsSelect  0x080
11080 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  0  /* x.pSelect 
11090 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
110a0 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
110b0 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 45 50 5f 52  */..#define EP_R
110c0 65 64 75 63 65 64 20 20 20 20 30 78 31 30 30 30  educed    0x1000
110d0 20 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74    /* Expr struct
110e0 20 69 73 20 45 58 50 52 5f 52 45 44 55 43 45 44   is EXPR_REDUCED
110f0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
11100 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f  */.#define EP_To
11110 6b 65 6e 4f 6e 6c 79 20 20 30 78 32 30 30 30 20  kenOnly  0x2000 
11120 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
11130 69 73 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  is EXPR_TOKENONL
11140 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
11150 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
11160 74 61 74 69 63 20 20 20 20 20 30 78 34 30 30 30  tatic     0x4000
11170 20 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d    /* Held in mem
11180 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
11190 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
111a0 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
111b0 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
111c0 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
111d0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
111e0 73 32 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  s2 field..*/.#de
111f0 66 69 6e 65 20 45 50 32 5f 4d 61 6c 6c 6f 63 65  fine EP2_Malloce
11200 64 54 6f 6b 65 6e 20 20 30 78 30 30 30 31 20 20  dToken  0x0001  
11210 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
11220 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
11230 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
11240 65 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c  e EP2_Irreducibl
11250 65 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  e    0x0002  /* 
11260 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52  Cannot EXPRDUP_R
11270 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20  EDUCE this Expr 
11280 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 73  */../*.** The ps
11290 65 75 64 6f 2d 72 6f 75 74 69 6e 65 20 73 71 6c  eudo-routine sql
112a0 69 74 65 33 45 78 70 72 53 65 74 49 72 72 65 64  ite3ExprSetIrred
112b0 75 63 69 62 6c 65 20 73 65 74 73 20 74 68 65 20  ucible sets the 
112c0 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a  EP2_Irreducible.
112d0 2a 2a 20 66 6c 61 67 20 6f 6e 20 61 6e 20 65 78  ** flag on an ex
112e0 70 72 65 73 73 69 6f 6e 20 73 74 72 75 63 74 75  pression structu
112f0 72 65 2e 20 20 54 68 69 73 20 66 6c 61 67 20 69  re.  This flag i
11300 73 20 75 73 65 64 20 66 6f 72 20 56 56 26 41 20  s used for VV&A 
11310 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a 2a 20 72 6f  only.  The.** ro
11320 75 74 69 6e 65 20 69 73 20 69 6d 70 6c 65 6d 65  utine is impleme
11330 6e 74 65 64 20 61 73 20 61 20 6d 61 63 72 6f 20  nted as a macro 
11340 74 68 61 74 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  that only works 
11350 77 68 65 6e 20 69 6e 20 64 65 62 75 67 67 69 6e  when in debuggin
11360 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61 73  g mode,.** so as
11370 20 6e 6f 74 20 74 6f 20 62 75 72 64 65 6e 20 70   not to burden p
11380 72 6f 64 75 63 74 69 6f 6e 20 63 6f 64 65 2e 0a  roduction code..
11390 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
113a0 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
113b0 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62  ExprSetIrreducib
113c0 6c 65 28 58 29 20 20 28 58 29 2d 3e 66 6c 61 67  le(X)  (X)->flag
113d0 73 32 20 7c 3d 20 45 50 32 5f 49 72 72 65 64 75  s2 |= EP2_Irredu
113e0 63 69 62 6c 65 0a 23 65 6c 73 65 0a 23 20 64 65  cible.#else.# de
113f0 66 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65  fine ExprSetIrre
11400 64 75 63 69 62 6c 65 28 58 29 0a 23 65 6e 64 69  ducible(X).#endi
11410 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  f../*.** These m
11420 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
11430 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
11440 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
11450 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c   the .** Expr.fl
11460 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
11470 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
11480 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
11490 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
114a0 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
114b0 78 70 72 48 61 73 41 6e 79 50 72 6f 70 65 72 74  xprHasAnyPropert
114c0 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
114d0 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
114e0 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
114f0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
11500 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
11510 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
11520 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
11530 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
11540 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
11550 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
11560 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
11570 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
11580 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74  rmal Expr .** st
11590 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
115a0 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
115b0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
115c0 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20  t in Expr.flags 
115d0 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
115e0 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
115f0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
11600 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
11610 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
11620 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
11630 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
11640 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
11650 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
11660 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
11670 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
11680 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
11690 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
116a0 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
116b0 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
116c0 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
116d0 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
116e0 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
116f0 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
11700 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
11710 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
11720 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
11730 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65  omment .** above
11740 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
11750 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
11760 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
11770 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
11780 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
11790 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
117a0 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
117b0 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
117c0 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
117d0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
117e0 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
117f0 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
11800 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
11810 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
11820 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
11830 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
11840 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
11850 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
11860 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
11870 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
11880 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
11890 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
118a0 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
118b0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
118c0 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
118d0 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
118e0 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
118f0 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
11900 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
11910 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
11920 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
11930 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
11940 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11950 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
11960 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
11970 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c  st */.  int nAll
11980 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  oc;            /
11990 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
119a0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 65  ies allocated be
119b0 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 69 45 43  low */.  int iEC
119c0 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20 20  ursor;          
119d0 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72 20 61  /* VDBE Cursor a
119e0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
119f0 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a 2f 0a  his ExprList */.
11a00 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
11a10 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 45 78 70  t_item {.    Exp
11a20 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
11a30 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
11a40 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
11a50 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
11a60 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
11a70 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
11a80 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
11a90 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
11aa0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
11ab0 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
11ac0 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
11ad0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
11ae0 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
11af0 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
11b00 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
11b10 2a 2f 0a 20 20 20 20 75 38 20 64 6f 6e 65 3b 20  */.    u8 done; 
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11b30 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63   A flag to indic
11b40 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73  ate when process
11b50 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20  ing is finished 
11b60 2a 2f 0a 20 20 20 20 75 31 36 20 69 43 6f 6c 3b  */.    u16 iCol;
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11b80 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
11b90 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
11ba0 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
11bb0 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
11bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
11bd0 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
11be0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
11bf0 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20  */.  } *a;      
11c00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
11c10 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
11c20 68 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  h expression */.
11c30 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
11c40 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
11c50 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
11c60 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
11c70 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
11c80 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
11c90 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
11ca0 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
11cb0 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
11cc0 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
11cd0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
11ce0 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
11cf0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
11d00 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
11d10 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
11d20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
11d30 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
11d40 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
11d50 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
11d60 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
11d70 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
11d80 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
11d90 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
11da0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
11db0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
11dc0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
11dd0 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
11de0 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
11df0 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
11e00 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
11e10 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11e20 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
11e30 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
11e40 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
11e50 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
11e60 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
11e70 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
11e80 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
11e90 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
11ea0 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
11eb0 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
11ec0 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
11ed0 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
11ee0 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
11ef0 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
11f00 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
11f10 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
11f20 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
11f30 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
11f40 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
11f50 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
11f60 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
11f70 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
11f80 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
11f90 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
11fa0 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
11fb0 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
11fc0 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
11fd0 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
11fe0 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
11ff0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
12000 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
12010 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
12020 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
12030 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
12040 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
12050 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
12060 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
12070 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
12080 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
12090 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
120a0 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e   list */.  int n
120b0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
120c0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
120d0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
120e0 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  [] below */.};..
120f0 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73  /*.** The bitmas
12100 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e  k datatype defin
12110 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64  ed below is used
12120 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74   for various opt
12130 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  imizations..**.*
12140 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20  * Changing this 
12150 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f  from a 64-bit to
12160 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c   a 32-bit type l
12170 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72  imits the number
12180 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e   of.** tables in
12190 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e   a join to 32 in
121a0 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75  stead of 64.  Bu
121b0 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65  t it also reduce
121c0 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66  s the size.** of
121d0 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20   the library by 
121e0 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38  738 bytes on ix8
121f0 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36  6..*/.typedef u6
12200 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a  4 Bitmask;../*.*
12210 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
12220 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73  bits in a Bitmas
12230 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20  k.  "BMS" means 
12240 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a  "BitMask Size"..
12250 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20  */.#define BMS  
12260 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69  ((int)(sizeof(Bi
12270 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a  tmask)*8))../*.*
12280 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
12290 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
122a0 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
122b0 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
122c0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
122d0 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
122e0 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
122f0 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
12300 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
12310 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
12320 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
12330 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
12340 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
12350 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
12360 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
12370 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
12380 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
12390 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
123a0 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
123b0 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
123c0 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
123d0 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
123e0 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
123f0 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
12400 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
12410 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
12420 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
12430 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
12440 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
12450 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
12460 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
12470 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
12480 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
12490 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
124a0 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
124b0 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
124c0 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
124d0 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
124e0 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
124f0 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
12500 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
12510 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
12520 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
12530 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
12540 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
12550 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
12560 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
12570 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
12580 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
12590 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
125a0 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
125b0 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
125c0 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
125d0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
125e0 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
125f0 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
12600 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
12610 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
12620 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
12630 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
12640 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
12650 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
12660 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
12670 72 63 4c 69 73 74 20 7b 0a 20 20 69 31 36 20 6e  rcList {.  i16 n
12680 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
12690 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
126a0 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
126b0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
126c0 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c 6c 6f 63   */.  i16 nAlloc
126d0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
126e0 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
126f0 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
12700 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
12710 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
12720 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
12730 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
12740 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
12750 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
12760 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
12770 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
12780 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
12790 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
127a0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
127b0 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
127c0 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
127d0 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
127e0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
127f0 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
12800 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
12810 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
12820 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
12830 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
12840 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
12850 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
12860 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 75 38  e name */.    u8
12870 20 69 73 50 6f 70 75 6c 61 74 65 64 3b 20 20 20   isPopulated;   
12880 2f 2a 20 54 65 6d 70 6f 72 61 72 79 20 74 61 62  /* Temporary tab
12890 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
128a0 74 68 20 53 45 4c 45 43 54 20 69 73 20 70 6f 70  th SELECT is pop
128b0 75 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 38  ulated */.    u8
128c0 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
128d0 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
128e0 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
128f0 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
12900 75 73 20 2a 2f 0a 20 20 20 20 75 38 20 6e 6f 74  us */.    u8 not
12910 49 6e 64 65 78 65 64 3b 20 20 20 20 2f 2a 20 54  Indexed;    /* T
12920 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
12930 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
12940 61 75 73 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ause */.    int 
12950 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
12960 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
12970 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
12980 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
12990 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
129a0 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
129b0 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
129c0 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
129d0 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
129e0 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
129f0 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
12a00 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
12a10 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
12a20 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
12a30 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
12a40 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61   used */.    cha
12a50 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f  r *zIndex;     /
12a60 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
12a70 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
12a80 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
12a90 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e  /.    Index *pIn
12aa0 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78  dex;    /* Index
12ab0 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65   structure corre
12ac0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64  sponding to zInd
12ad0 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20  ex, if any */.  
12ae0 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
12af0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
12b00 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
12b10 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
12b20 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
12b30 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
12b40 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
12b50 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
12b60 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
12b70 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
12b80 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
12b90 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
12ba0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
12bb0 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
12bc0 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
12bd0 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
12be0 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
12bf0 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
12c00 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
12c10 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
12c20 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
12c30 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
12c40 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
12c50 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
12c60 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
12c70 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
12c80 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
12c90 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
12ca0 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
12cb0 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
12cc0 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
12cd0 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
12ce0 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
12cf0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
12d00 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
12d10 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
12d20 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68 65 72  /.../*.** A Wher
12d30 65 50 6c 61 6e 20 6f 62 6a 65 63 74 20 68 6f 6c  ePlan object hol
12d40 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  ds information t
12d50 68 61 74 20 64 65 73 63 72 69 62 65 73 20 61 20  hat describes a 
12d60 6c 6f 6f 6b 75 70 0a 2a 2a 20 73 74 72 61 74 65  lookup.** strate
12d70 67 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  gy..**.** This o
12d80 62 6a 65 63 74 20 69 73 20 69 6e 74 65 6e 64 65  bject is intende
12d90 64 20 74 6f 20 62 65 20 6f 70 61 71 75 65 20 6f  d to be opaque o
12da0 75 74 73 69 64 65 20 6f 66 20 74 68 65 20 77 68  utside of the wh
12db0 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a  ere.c module..**
12dc0 20 49 74 20 69 73 20 69 6e 63 6c 75 64 65 64 20   It is included 
12dd0 68 65 72 65 20 6f 6e 6c 79 20 73 6f 20 74 68 61  here only so tha
12de0 74 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 72 20  t that compiler 
12df0 77 69 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20 62 69  will know how bi
12e00 67 20 69 74 0a 2a 2a 20 69 73 2e 20 20 4e 6f 6e  g it.** is.  Non
12e10 65 20 6f 66 20 74 68 65 20 66 69 65 6c 64 73 20  e of the fields 
12e20 69 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73  in this object s
12e30 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 6f 75  hould be used ou
12e40 74 73 69 64 65 20 6f 66 0a 2a 2a 20 74 68 65 20  tside of.** the 
12e50 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a  where.c module..
12e60 2a 2a 0a 2a 2a 20 57 69 74 68 69 6e 20 74 68 65  **.** Within the
12e70 20 75 6e 69 6f 6e 2c 20 70 49 64 78 20 69 73 20   union, pIdx is 
12e80 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77  only used when w
12e90 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 44  sFlags&WHERE_IND
12ea0 45 58 45 44 20 69 73 20 74 72 75 65 2e 0a 2a 2a  EXED is true..**
12eb0 20 70 54 65 72 6d 20 69 73 20 6f 6e 6c 79 20 75   pTerm is only u
12ec0 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73  sed when wsFlags
12ed0 26 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20  &WHERE_MULTI_OR 
12ee0 69 73 20 74 72 75 65 2e 20 20 41 6e 64 20 70 56  is true.  And pV
12ef0 74 61 62 49 64 78 0a 2a 2a 20 69 73 20 6f 6e 6c  tabIdx.** is onl
12f00 79 20 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c  y used when wsFl
12f10 61 67 73 26 57 48 45 52 45 5f 56 49 52 54 55 41  ags&WHERE_VIRTUA
12f20 4c 54 41 42 4c 45 20 69 73 20 74 72 75 65 2e 20  LTABLE is true. 
12f30 20 49 74 20 69 73 20 6e 65 76 65 72 20 74 68 65   It is never the
12f40 0a 2a 2a 20 63 61 73 65 20 74 68 61 74 20 6d 6f  .** case that mo
12f50 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66 20 74  re than one of t
12f60 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20  hese conditions 
12f70 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 72 75  is true..*/.stru
12f80 63 74 20 57 68 65 72 65 50 6c 61 6e 20 7b 0a 20  ct WherePlan {. 
12f90 20 75 33 32 20 77 73 46 6c 61 67 73 3b 20 20 20   u32 wsFlags;   
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fb0 2f 2a 20 57 48 45 52 45 5f 2a 20 66 6c 61 67 73  /* WHERE_* flags
12fc0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 20 74   that describe t
12fd0 68 65 20 73 74 72 61 74 65 67 79 20 2a 2f 0a 20  he strategy */. 
12fe0 20 75 33 32 20 6e 45 71 3b 20 20 20 20 20 20 20   u32 nEq;       
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13000 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 3d 3d 20  /* Number of == 
13010 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
13020 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 49 6e 64   union {.    Ind
13030 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20 20 20  ex *pIdx;       
13040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
13050 6e 64 65 78 20 77 68 65 6e 20 57 48 45 52 45 5f  ndex when WHERE_
13060 49 4e 44 45 58 45 44 20 69 73 20 74 72 75 65 20  INDEXED is true 
13070 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57 68  */.    struct Wh
13080 65 72 65 54 65 72 6d 20 2a 70 54 65 72 6d 3b 20  ereTerm *pTerm; 
13090 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63        /* WHERE c
130a0 6c 61 75 73 65 20 74 65 72 6d 20 66 6f 72 20 4f  lause term for O
130b0 52 2d 73 65 61 72 63 68 20 2a 2f 0a 20 20 20 20  R-search */.    
130c0 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
130d0 66 6f 20 2a 70 56 74 61 62 49 64 78 3b 20 20 2f  fo *pVtabIdx;  /
130e0 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 20  * Virtual table 
130f0 69 6e 64 65 78 20 74 6f 20 75 73 65 20 2a 2f 0a  index to use */.
13100 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
13110 20 46 6f 72 20 65 61 63 68 20 6e 65 73 74 65 64   For each nested
13120 20 6c 6f 6f 70 20 69 6e 20 61 20 57 48 45 52 45   loop in a WHERE
13130 20 63 6c 61 75 73 65 20 69 6d 70 6c 65 6d 65 6e   clause implemen
13140 74 61 74 69 6f 6e 2c 20 74 68 65 20 57 68 65 72  tation, the Wher
13150 65 49 6e 66 6f 0a 2a 2a 20 73 74 72 75 63 74 75  eInfo.** structu
13160 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  re contains a si
13170 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66  ngle instance of
13180 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
13190 20 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65    This structure
131a0 0a 2a 2a 20 69 73 20 69 6e 74 65 6e 64 65 64 20  .** is intended 
131b0 74 6f 20 62 65 20 70 72 69 76 61 74 65 20 74 68  to be private th
131c0 65 20 74 68 65 20 77 68 65 72 65 2e 63 20 6d 6f  e the where.c mo
131d0 64 75 6c 65 20 61 6e 64 20 73 68 6f 75 6c 64 20  dule and should 
131e0 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63 65 73 73  not be.** access
131f0 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 62 79 20   or modified by 
13200 6f 74 68 65 72 20 6d 6f 64 75 6c 65 73 2e 0a 2a  other modules..*
13210 2a 0a 2a 2a 20 54 68 65 20 70 49 64 78 49 6e 66  *.** The pIdxInf
13220 6f 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  o field is used 
13230 74 6f 20 68 65 6c 70 20 70 69 63 6b 20 74 68 65  to help pick the
13240 20 62 65 73 74 20 69 6e 64 65 78 20 6f 6e 20 61   best index on a
13250 0a 2a 2a 20 76 69 72 74 75 61 6c 20 74 61 62 6c  .** virtual tabl
13260 65 2e 20 20 54 68 65 20 70 49 64 78 49 6e 66 6f  e.  The pIdxInfo
13270 20 70 6f 69 6e 74 65 72 20 63 6f 6e 74 61 69 6e   pointer contain
13280 73 20 69 6e 64 65 78 69 6e 67 0a 2a 2a 20 69 6e  s indexing.** in
13290 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68  formation for th
132a0 65 20 69 2d 74 68 20 74 61 62 6c 65 20 69 6e 20  e i-th table in 
132b0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
132c0 62 65 66 6f 72 65 20 72 65 6f 72 64 65 72 69 6e  before reorderin
132d0 67 2e 0a 2a 2a 20 41 6c 6c 20 74 68 65 20 70 49  g..** All the pI
132e0 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 73 20  dxInfo pointers 
132f0 61 72 65 20 66 72 65 65 64 20 62 79 20 77 68 65  are freed by whe
13300 72 65 49 6e 66 6f 46 72 65 65 28 29 20 69 6e 20  reInfoFree() in 
13310 77 68 65 72 65 2e 63 2e 0a 2a 2a 20 41 6c 6c 20  where.c..** All 
13320 6f 74 68 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  other informatio
13330 6e 20 69 6e 20 74 68 65 20 69 2d 74 68 20 57 68  n in the i-th Wh
13340 65 72 65 4c 65 76 65 6c 20 6f 62 6a 65 63 74 20  ereLevel object 
13350 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61 62  for the i-th tab
13360 6c 65 0a 2a 2a 20 61 66 74 65 72 20 46 52 4f 4d  le.** after FROM
13370 20 63 6c 61 75 73 65 20 6f 72 64 65 72 69 6e 67   clause ordering
13380 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72  ..*/.struct Wher
13390 65 4c 65 76 65 6c 20 7b 0a 20 20 57 68 65 72 65  eLevel {.  Where
133a0 50 6c 61 6e 20 70 6c 61 6e 3b 20 20 20 20 20 20  Plan plan;      
133b0 20 2f 2a 20 71 75 65 72 79 20 70 6c 61 6e 20 66   /* query plan f
133c0 6f 72 20 74 68 69 73 20 65 6c 65 6d 65 6e 74 20  or this element 
133d0 6f 66 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  of the FROM clau
133e0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 65 66  se */.  int iLef
133f0 74 4a 6f 69 6e 3b 20 20 20 20 20 20 20 20 2f 2a  tJoin;        /*
13400 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 75 73 65   Memory cell use
13410 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 4c  d to implement L
13420 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 2a  EFT OUTER JOIN *
13430 2f 0a 20 20 69 6e 74 20 69 54 61 62 43 75 72 3b  /.  int iTabCur;
13440 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
13450 20 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65   VDBE cursor use
13460 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
13470 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69  table */.  int i
13480 49 64 78 43 75 72 3b 20 20 20 20 20 20 20 20 20  IdxCur;         
13490 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
134a0 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  sor used to acce
134b0 73 73 20 70 49 64 78 20 2a 2f 0a 20 20 69 6e 74  ss pIdx */.  int
134c0 20 61 64 64 72 42 72 6b 3b 20 20 20 20 20 20 20   addrBrk;       
134d0 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
134e0 74 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f 66 20  to break out of 
134f0 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
13500 74 20 61 64 64 72 4e 78 74 3b 20 20 20 20 20 20  t addrNxt;      
13510 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
13520 20 74 6f 20 73 74 61 72 74 20 74 68 65 20 6e 65   to start the ne
13530 78 74 20 49 4e 20 63 6f 6d 62 69 6e 61 74 69 6f  xt IN combinatio
13540 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  n */.  int addrC
13550 6f 6e 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ont;         /* 
13560 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63 6f 6e  Jump here to con
13570 74 69 6e 75 65 20 77 69 74 68 20 74 68 65 20 6e  tinue with the n
13580 65 78 74 20 6c 6f 6f 70 20 63 79 63 6c 65 20 2a  ext loop cycle *
13590 2f 0a 20 20 69 6e 74 20 61 64 64 72 46 69 72 73  /.  int addrFirs
135a0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72  t;        /* Fir
135b0 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
135c0 66 20 69 6e 74 65 72 69 6f 72 20 6f 66 20 74 68  f interior of th
135d0 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75 38 20 69  e loop */.  u8 i
135e0 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
135f0 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
13600 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
13610 75 73 65 20 2a 2f 0a 20 20 75 38 20 6f 70 2c 20  use */.  u8 op, 
13620 70 35 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p5;            /
13630 2a 20 4f 70 63 6f 64 65 20 61 6e 64 20 50 35 20  * Opcode and P5 
13640 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 74 68  of the opcode th
13650 61 74 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70  at ends the loop
13660 20 2a 2f 0a 20 20 69 6e 74 20 70 31 2c 20 70 32   */.  int p1, p2
13670 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
13680 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65 20 6f  perands of the o
13690 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 65 6e  pcode used to en
136a0 64 73 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  ds the loop */. 
136b0 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
136c0 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
136d0 61 74 69 6f 6e 20 74 68 61 74 20 64 65 70 65 6e  ation that depen
136e0 64 73 20 6f 6e 20 70 6c 61 6e 2e 77 73 46 6c 61  ds on plan.wsFla
136f0 67 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  gs */.    struct
13700 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 49 6e   {.      int nIn
13710 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13720 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
13730 69 65 73 20 69 6e 20 61 49 6e 4c 6f 6f 70 5b 5d  ies in aInLoop[]
13740 20 2a 2f 0a 20 20 20 20 20 20 73 74 72 75 63 74   */.      struct
13750 20 49 6e 4c 6f 6f 70 20 7b 0a 20 20 20 20 20 20   InLoop {.      
13760 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
13770 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
13780 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65 64  VDBE cursor used
13790 20 62 79 20 74 68 69 73 20 49 4e 20 6f 70 65 72   by this IN oper
137a0 61 74 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  ator */.        
137b0 69 6e 74 20 61 64 64 72 49 6e 54 6f 70 3b 20 20  int addrInTop;  
137c0 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66         /* Top of
137d0 20 74 68 65 20 49 4e 20 6c 6f 6f 70 20 2a 2f 0a   the IN loop */.
137e0 20 20 20 20 20 20 7d 20 2a 61 49 6e 4c 6f 6f 70        } *aInLoop
137f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
13800 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
13810 20 65 61 63 68 20 6e 65 73 74 65 64 20 49 4e 20   each nested IN 
13820 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  operator */.    
13830 7d 20 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  } in;           
13840 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 77 68        /* Used wh
13850 65 6e 20 70 6c 61 6e 2e 77 73 46 6c 61 67 73 26  en plan.wsFlags&
13860 57 48 45 52 45 5f 49 4e 5f 41 42 4c 45 20 2a 2f  WHERE_IN_ABLE */
13870 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 54 68  .  } u;..  /* Th
13880 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c  e following fiel
13890 64 20 69 73 20 72 65 61 6c 6c 79 20 6e 6f 74 20  d is really not 
138a0 70 61 72 74 20 6f 66 20 74 68 65 20 63 75 72 72  part of the curr
138b0 65 6e 74 20 6c 65 76 65 6c 2e 20 20 42 75 74 0a  ent level.  But.
138c0 20 20 2a 2a 20 77 65 20 6e 65 65 64 20 61 20 70    ** we need a p
138d0 6c 61 63 65 20 74 6f 20 63 61 63 68 65 20 76 69  lace to cache vi
138e0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 64 65  rtual table inde
138f0 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  x information fo
13900 72 20 65 61 63 68 0a 20 20 2a 2a 20 76 69 72 74  r each.  ** virt
13910 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 74 68 65  ual table in the
13920 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 61 6e 64   FROM clause and
13930 20 74 68 65 20 57 68 65 72 65 4c 65 76 65 6c 20   the WhereLevel 
13940 73 74 72 75 63 74 75 72 65 20 69 73 0a 20 20 2a  structure is.  *
13950 2a 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  * a convenient p
13960 6c 61 63 65 20 73 69 6e 63 65 20 74 68 65 72 65  lace since there
13970 20 69 73 20 6f 6e 65 20 57 68 65 72 65 4c 65 76   is one WhereLev
13980 65 6c 20 66 6f 72 20 65 61 63 68 20 46 52 4f 4d  el for each FROM
13990 20 63 6c 61 75 73 65 0a 20 20 2a 2a 20 65 6c 65   clause.  ** ele
139a0 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  ment..  */.  sql
139b0 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20  ite3_index_info 
139c0 2a 70 49 64 78 49 6e 66 6f 3b 20 20 2f 2a 20 49  *pIdxInfo;  /* I
139d0 6e 64 65 78 20 69 6e 66 6f 20 66 6f 72 20 6e 2d  ndex info for n-
139e0 74 68 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  th source table 
139f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  */.};../*.** Fla
13a00 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
13a10 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
13a20 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
13a30 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
13a40 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
13a50 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
13a60 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64  gs member..*/.#d
13a70 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
13a80 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
13a90 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
13aa0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
13ab0 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
13ac0 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
13ad0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
13ae0 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
13af0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
13b00 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
13b10 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
13b20 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
13b30 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
13b40 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
13b50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
13b60 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
13b70 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
13b80 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
13b90 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
13ba0 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30  ATES_OK    0x000
13bb0 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  8 /* Ok to retur
13bc0 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
13bd0 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
13be0 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45  e WHERE_OMIT_OPE
13bf0 4e 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  N        0x0010 
13c00 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73  /* Table cursors
13c10 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65   are already ope
13c20 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  n */.#define WHE
13c30 52 45 5f 4f 4d 49 54 5f 43 4c 4f 53 45 20 20 20  RE_OMIT_CLOSE   
13c40 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 4f 6d      0x0020 /* Om
13c50 69 74 20 63 6c 6f 73 65 20 6f 66 20 74 61 62 6c  it close of tabl
13c60 65 20 26 20 69 6e 64 65 78 20 63 75 72 73 6f 72  e & index cursor
13c70 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
13c80 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20  RE_FORCE_TABLE  
13c90 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 44 6f      0x0040 /* Do
13ca0 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65   not use an inde
13cb0 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f  x-only search */
13cc0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
13cd0 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20  NETABLE_ONLY    
13ce0 30 78 30 30 38 30 20 2f 2a 20 4f 6e 6c 79 20 63  0x0080 /* Only c
13cf0 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c  ode the 1st tabl
13d00 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f  e in pTabList */
13d10 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 57 48 45 52  ../*.** The WHER
13d20 45 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  E clause process
13d30 69 6e 67 20 72 6f 75 74 69 6e 65 20 68 61 73 20  ing routine has 
13d40 74 77 6f 20 68 61 6c 76 65 73 2e 20 20 54 68 65  two halves.  The
13d50 0a 2a 2a 20 66 69 72 73 74 20 70 61 72 74 20 64  .** first part d
13d60 6f 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66  oes the start of
13d70 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20   the WHERE loop 
13d80 61 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a  and the second.*
13d90 2a 20 68 61 6c 66 20 64 6f 65 73 20 74 68 65 20  * half does the 
13da0 74 61 69 6c 20 6f 66 20 74 68 65 20 57 48 45 52  tail of the WHER
13db0 45 20 6c 6f 6f 70 2e 20 20 41 6e 20 69 6e 73 74  E loop.  An inst
13dc0 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
13dd0 73 74 72 75 63 74 75 72 65 20 69 73 20 72 65 74  structure is ret
13de0 75 72 6e 65 64 20 62 79 20 74 68 65 20 66 69 72  urned by the fir
13df0 73 74 20 68 61 6c 66 20 61 6e 64 20 70 61 73 73  st half and pass
13e00 65 64 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73  ed.** into the s
13e10 65 63 6f 6e 64 20 68 61 6c 66 20 74 6f 20 67 69  econd half to gi
13e20 76 65 20 73 6f 6d 65 20 63 6f 6e 74 69 6e 75 69  ve some continui
13e30 74 79 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68  ty..*/.struct Wh
13e40 65 72 65 49 6e 66 6f 20 7b 0a 20 20 50 61 72 73  ereInfo {.  Pars
13e50 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
13e60 20 2f 2a 20 50 61 72 73 69 6e 67 20 61 6e 64 20   /* Parsing and 
13e70 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6e 67 20  code generating 
13e80 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 75 31 36  context */.  u16
13e90 20 77 63 74 72 6c 46 6c 61 67 73 3b 20 20 20 20   wctrlFlags;    
13ea0 20 20 2f 2a 20 46 6c 61 67 73 20 6f 72 69 67 69    /* Flags origi
13eb0 6e 61 6c 6c 79 20 70 61 73 73 65 64 20 74 6f 20  nally passed to 
13ec0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
13ed0 6e 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 4f 6e  n() */.  u8 okOn
13ee0 65 50 61 73 73 3b 20 20 20 20 20 20 20 20 2f 2a  ePass;        /*
13ef0 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e 65 2d 70   Ok to use one-p
13f00 61 73 73 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f  ass algorithm fo
13f10 72 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  r UPDATE or DELE
13f20 54 45 20 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73  TE */.  u8 untes
13f30 74 65 64 54 65 72 6d 73 3b 20 20 20 20 2f 2a 20  tedTerms;    /* 
13f40 4e 6f 74 20 61 6c 6c 20 57 48 45 52 45 20 74 65  Not all WHERE te
13f50 72 6d 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  rms resolved by 
13f60 6f 75 74 65 72 20 6c 6f 6f 70 20 2a 2f 0a 20 20  outer loop */.  
13f70 53 72 63 4c 69 73 74 20 2a 70 54 61 62 4c 69 73  SrcList *pTabLis
13f80 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
13f90 2a 20 4c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  * List of tables
13fa0 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   in the join */.
13fb0 20 20 69 6e 74 20 69 54 6f 70 3b 20 20 20 20 20    int iTop;     
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fd0 20 2f 2a 20 54 68 65 20 76 65 72 79 20 62 65 67   /* The very beg
13fe0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 57 48  inning of the WH
13ff0 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  ERE loop */.  in
14000 74 20 69 43 6f 6e 74 69 6e 75 65 3b 20 20 20 20  t iContinue;    
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14020 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 63 6f 6e  Jump here to con
14030 74 69 6e 75 65 20 77 69 74 68 20 6e 65 78 74 20  tinue with next 
14040 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
14050 69 42 72 65 61 6b 3b 20 20 20 20 20 20 20 20 20  iBreak;         
14060 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75             /* Ju
14070 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b  mp here to break
14080 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70   out of the loop
14090 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c   */.  int nLevel
140a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
140b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
140c0 66 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 2a 2f  f nested loop */
140d0 0a 20 20 73 74 72 75 63 74 20 57 68 65 72 65 43  .  struct WhereC
140e0 6c 61 75 73 65 20 2a 70 57 43 3b 20 20 20 20 20  lause *pWC;     
140f0 20 20 2f 2a 20 44 65 63 6f 6d 70 6f 73 69 74 69    /* Decompositi
14100 6f 6e 20 6f 66 20 74 68 65 20 57 48 45 52 45 20  on of the WHERE 
14110 63 6c 61 75 73 65 20 2a 2f 0a 20 20 64 6f 75 62  clause */.  doub
14120 6c 65 20 73 61 76 65 64 4e 51 75 65 72 79 4c 6f  le savedNQueryLo
14130 6f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 70 50  op;        /* pP
14140 61 72 73 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70  arse->nQueryLoop
14150 20 6f 75 74 73 69 64 65 20 74 68 65 20 57 48 45   outside the WHE
14160 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 57 68 65  RE loop */.  Whe
14170 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20 20  reLevel a[1];   
14180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
14190 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
141a0 20 65 61 63 68 20 6e 65 73 74 20 6c 6f 6f 70 20   each nest loop 
141b0 69 6e 20 57 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a  in WHERE */.};..
141c0 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
141d0 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
141e0 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
141f0 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
14200 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
14210 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
14220 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
14230 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
14240 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
14250 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
14260 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
14270 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
14280 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
14290 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
142a0 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
142b0 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
142c0 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
142d0 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
142e0 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
142f0 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
14300 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
14310 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
14320 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
14330 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
14340 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
14350 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
14360 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
14370 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
14380 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
14390 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
143a0 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
143b0 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
143c0 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
143d0 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
143e0 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
143f0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
14400 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
14410 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
14420 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
14430 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
14440 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
14450 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
14460 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
14470 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
14480 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
14490 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
144a0 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
144b0 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
144c0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
144d0 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
144e0 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
144f0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
14500 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
14510 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
14520 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
14530 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
14540 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
14550 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
14560 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
14570 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
14580 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
14590 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
145a0 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
145b0 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
145c0 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
145d0 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
145e0 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
145f0 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
14600 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
14610 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
14620 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
14630 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
14640 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
14650 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
14660 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
14670 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
14680 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
14690 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
146a0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
146b0 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
146c0 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
146d0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ions */.  int nR
146e0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
146f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
14700 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
14710 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
14720 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
14730 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14740 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
14750 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
14760 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
14770 75 38 20 61 6c 6c 6f 77 41 67 67 3b 20 20 20 20  u8 allowAgg;    
14780 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74       /* Aggregat
14790 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 6c 6f  e functions allo
147a0 77 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 38  wed here */.  u8
147b0 20 68 61 73 41 67 67 3b 20 20 20 20 20 20 20 20   hasAgg;        
147c0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 67     /* True if ag
147d0 67 72 65 67 61 74 65 73 20 61 72 65 20 73 65 65  gregates are see
147e0 6e 20 2a 2f 0a 20 20 75 38 20 69 73 43 68 65 63  n */.  u8 isChec
147f0 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  k;          /* T
14800 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
14810 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43   names in a CHEC
14820 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  K constraint */.
14830 20 20 69 6e 74 20 6e 44 65 70 74 68 3b 20 20 20    int nDepth;   
14840 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
14850 6f 66 20 73 75 62 71 75 65 72 79 20 72 65 63 75  of subquery recu
14860 72 73 69 6f 6e 2e 20 31 20 66 6f 72 20 6e 6f 20  rsion. 1 for no 
14870 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 20 20 41  recursion */.  A
14880 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
14890 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
148a0 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
148b0 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
148c0 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
148d0 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
148e0 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
148f0 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
14900 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 7d  r outermost */.}
14910 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
14920 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
14930 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
14940 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
14950 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
14960 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
14970 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
14980 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
14990 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
149a0 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
149b0 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
149c0 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
149d0 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
149e0 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
149f0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
14a00 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
14a10 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
14a20 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
14a30 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
14a40 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
14a50 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
14a60 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
14a70 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
14a80 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
14a90 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
14aa0 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
14ab0 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
14ac0 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
14ad0 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
14ae0 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
14af0 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
14b00 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
14b10 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
14b20 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
14b30 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
14b40 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
14b50 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
14b60 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
14b70 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
14b80 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
14b90 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
14ba0 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
14bb0 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
14bc0 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
14bd0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
14be0 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
14bf0 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
14c00 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
14c10 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
14c20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
14c30 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
14c40 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
14c50 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
14c60 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
14c70 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
14c80 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
14c90 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
14ca0 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
14cb0 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
14cc0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
14cd0 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
14ce0 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
14cf0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
14d00 6e 54 72 61 6e 5b 32 5d 20 63 6f 6e 74 61 69 6e  nTran[2] contain
14d10 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
14d20 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
14d30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
14d40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
14d50 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
14d60 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
14d70 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
14d80 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
14d90 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
14da0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
14db0 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
14dc0 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
14dd0 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 63 68 61  _EXCEPT */.  cha
14de0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
14df0 20 20 20 20 2f 2a 20 4d 61 6b 65 52 65 63 6f 72      /* MakeRecor
14e00 64 20 77 69 74 68 20 74 68 69 73 20 61 66 66 69  d with this affi
14e10 6e 69 74 79 20 66 6f 72 20 53 52 54 5f 53 65 74  nity for SRT_Set
14e20 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61   */.  u16 selFla
14e30 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
14e40 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
14e50 75 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ues */.  SrcList
14e60 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20   *pSrc;         
14e70 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75  /* The FROM clau
14e80 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  se */.  Expr *pW
14e90 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f  here;          /
14ea0 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
14eb0 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
14ec0 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f   *pGroupBy;    /
14ed0 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  * The GROUP BY c
14ee0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
14ef0 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20  *pHaving;       
14f00 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20    /* The HAVING 
14f10 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
14f20 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
14f30 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20     /* The ORDER 
14f40 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53  BY clause */.  S
14f50 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20  elect *pPrior;  
14f60 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73        /* Prior s
14f70 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
14f80 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
14f90 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ment */.  Select
14fa0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
14fb0 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20   /* Next select 
14fc0 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61  to the left in a
14fd0 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53   compound */.  S
14fe0 65 6c 65 63 74 20 2a 70 52 69 67 68 74 6d 6f 73  elect *pRightmos
14ff0 74 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d  t;    /* Right-m
15000 6f 73 74 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ost select in a 
15010 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
15020 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45  statement */.  E
15030 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20  xpr *pLimit;    
15040 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65        /* LIMIT e
15050 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
15060 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
15070 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73  */.  Expr *pOffs
15080 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  et;         /* O
15090 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e  FFSET expression
150a0 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
150b0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 69 6e 74 20   used. */.  int 
150c0 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
150d0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
150e0 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
150f0 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
15100 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  unters */.  int 
15110 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b  addrOpenEphm[3];
15120 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
15130 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
15140 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
15150 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
15160 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
15170 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
15180 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
15190 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
151a0 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
151b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
151c0 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30  istinct        0
151d0 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  x0001  /* Output
151e0 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
151f0 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
15200 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
15210 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65    0x0002  /* Ide
15220 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
15230 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
15240 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
15250 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34  ate       0x0004
15260 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
15270 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15280 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
15290 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20  UsesEphemeral   
152a0 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20  0x0008  /* Uses 
152b0 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
152c0 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
152d0 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
152e0 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f         0x0010  /
152f0 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
15300 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
15310 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
15320 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
15330 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
15340 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
15350 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
15360 61 74 61 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  ata */.../*.** T
15370 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
15380 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20 64 69  select can be di
15390 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76  stributed in sev
153a0 65 72 61 6c 20 77 61 79 73 2e 20 20 54 68 65 0a  eral ways.  The.
153b0 2a 2a 20 22 53 52 54 22 20 70 72 65 66 69 78 20  ** "SRT" prefix 
153c0 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
153d0 73 75 6c 74 20 54 79 70 65 22 2e 0a 2a 2f 0a 23  sult Type"..*/.#
153e0 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
153f0 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
15400 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
15410 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
15420 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
15430 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
15440 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
15450 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
15460 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
15470 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
15480 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
15490 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
154a0 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
154b0 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
154c0 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
154d0 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
154e0 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a   anywhere */../*
154f0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
15500 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20  ause is ignored 
15510 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  for all of the a
15520 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
15530 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79  IgnorableOrderby
15540 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c  (X) ((X->eDest)<
15550 3d 53 52 54 5f 44 69 73 63 61 72 64 29 0a 0a 23  =SRT_Discard)..#
15560 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
15570 74 20 20 20 20 20 20 20 35 20 20 2f 2a 20 4f 75  t       5  /* Ou
15580 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
15590 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
155a0 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
155b0 20 20 20 20 36 20 20 2f 2a 20 53 74 6f 72 65 20      6  /* Store 
155c0 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
155d0 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
155e0 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
155f0 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
15600 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
15610 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
15620 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
15630 20 20 20 20 20 20 20 20 38 20 20 2f 2a 20 53 74          8  /* St
15640 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
15650 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
15660 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
15670 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
15680 61 62 20 20 20 20 20 39 20 20 2f 2a 20 43 72 65  ab     9  /* Cre
15690 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
156a0 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
156b0 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
156c0 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
156d0 69 6e 65 20 20 20 31 30 20 20 2f 2a 20 47 65 6e  ine   10  /* Gen
156e0 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
156f0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
15700 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72 75 63 74 75  ./*.** A structu
15710 72 65 20 75 73 65 64 20 74 6f 20 63 75 73 74 6f  re used to custo
15720 6d 69 7a 65 20 74 68 65 20 62 65 68 61 76 69 6f  mize the behavio
15730 72 20 6f 66 20 73 71 6c 69 74 65 33 53 65 6c 65  r of sqlite3Sele
15740 63 74 28 29 2e 20 53 65 65 0a 2a 2a 20 63 6f 6d  ct(). See.** com
15750 6d 65 6e 74 73 20 61 62 6f 76 65 20 73 71 6c 69  ments above sqli
15760 74 65 33 53 65 6c 65 63 74 28 29 20 66 6f 72 20  te3Select() for 
15770 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 74 79 70 65  details..*/.type
15780 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63  def struct Selec
15790 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74  tDest SelectDest
157a0 3b 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  ;.struct SelectD
157b0 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
157c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77  ;         /* How
157d0 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
157e0 68 65 20 72 65 73 75 6c 74 73 20 2a 2f 0a 20 20  he results */.  
157f0 75 38 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  u8 affinity;    
15800 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73    /* Affinity us
15810 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53  ed when eDest==S
15820 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20  RT_Set */.  int 
15830 69 50 61 72 6d 3b 20 20 20 20 20 20 20 20 2f 2a  iParm;        /*
15840 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65   A parameter use
15850 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64  d by the eDest d
15860 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a  isposal method *
15870 2f 0a 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20  /.  int iMem;   
15880 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
15890 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
158a0 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
158b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
158c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
158d0 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
158e0 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a  llocated */.};..
158f0 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
15900 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
15910 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
15920 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
15930 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a  AUTOINCREMENT .*
15940 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f  * tables, the fo
15950 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74  llowing informat
15960 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
15970 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61  to the Table.u.a
15980 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e  utoInc.p.** poin
15990 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f  ter of each auto
159a0 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20  increment table 
159b0 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73  to record some s
159c0 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ide information 
159d0 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65  that.** the code
159e0 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73   generator needs
159f0 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65  .  We have to ke
15a00 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74  ep per-table aut
15a10 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e  oincrement.** in
15a20 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73  formation in cas
15a30 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f  e inserts are do
15a40 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  wn within trigge
15a50 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f  rs.  Triggers do
15a60 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79   not.** normally
15a70 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69   coordinate thei
15a80 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75  r activities, bu
15a90 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20  t we do need to 
15aa0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a  coordinate the.*
15ab0 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61  * loading and sa
15ac0 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72  ving of autoincr
15ad0 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ement informatio
15ae0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  n..*/.struct Aut
15af0 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74  oincInfo {.  Aut
15b00 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b  oincInfo *pNext;
15b10 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20     /* Next info 
15b20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20  block in a list 
15b30 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20  of them all */. 
15b40 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
15b50 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
15b60 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  this info block 
15b70 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69  refers to */.  i
15b80 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
15b90 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
15ba0 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
15bb0 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
15bc0 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74  ng pTab */.  int
15bd0 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20   regCtr;        
15be0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
15bf0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68  ister holding th
15c00 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20  e rowid counter 
15c10 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
15c20 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
15c30 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  cache.*/.#ifndef
15c40 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
15c50 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  HE.# define SQLI
15c60 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30  TE_N_COLCACHE 10
15c70 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
15c80 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
15c90 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
15ca0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
15cb0 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
15cc0 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20  ach .** trigger 
15cd0 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65  that may be fire
15ce0 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20  d while parsing 
15cf0 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  an INSERT, UPDAT
15d00 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73  E or DELETE.** s
15d10 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75  tatement. All su
15d20 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73  ch objects are s
15d30 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e  tored in the lin
15d40 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
15d50 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69  at.** Parse.pTri
15d60 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65  ggerPrg and dele
15d70 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65  ted once stateme
15d80 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68  nt compilation h
15d90 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c  as been.** compl
15da0 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64  eted..**.** A Vd
15db0 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  be sub-program t
15dc0 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
15dd0 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e  he body and WHEN
15de0 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67   clause of trigg
15df0 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  er.** TriggerPrg
15e00 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d  .pTrigger, assum
15e10 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e  ing a default ON
15e20 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
15e30 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72   of.** TriggerPr
15e40 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f  g.orconf, is sto
15e50 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67  red in the Trigg
15e60 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76  erPrg.pProgram v
15e70 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  ariable..** The 
15e80 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
15e90 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e  g list never con
15ea0 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65  tains two entrie
15eb0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a  s with the same.
15ec0 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f  ** values for bo
15ed0 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20  th pTrigger and 
15ee0 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  orconf..**.** Th
15ef0 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f  e TriggerPrg.aCo
15f00 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c  lmask[0] variabl
15f10 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61  e is set to a ma
15f20 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
15f30 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20  mns.** accessed 
15f40 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72  (or set to 0 for
15f50 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20   triggers fired 
15f60 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49  as a result of I
15f70 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d  NSERT .** statem
15f80 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
15f90 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
15fa0 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
15fb0 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
15fc0 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
15fd0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
15fe0 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
15ff0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
16000 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
16010 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
16020 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
16030 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
16040 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74  ed from */.  int
16050 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
16060 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
16070 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
16080 63 79 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  cy */.  SubProgr
16090 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
160a0 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65  /* Program imple
160b0 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72  menting pTrigger
160c0 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 75 33 32  /orconf */.  u32
160d0 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
160e0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
160f0 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
16100 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
16110 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
16120 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
16130 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
16140 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
16150 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
16160 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
16170 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
16180 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
16190 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
161a0 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
161b0 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
161c0 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
161d0 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
161e0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
161f0 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
16200 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
16210 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
16220 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
16230 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
16240 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
16250 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
16260 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
16270 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
16280 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
16290 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
162a0 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
162b0 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
162c0 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
162d0 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
162e0 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
162f0 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
16300 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
16310 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
16320 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
16330 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
16340 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
16350 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
16360 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75  -cache .** featu
16370 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
16380 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
16390 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
163a0 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
163b0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
163c0 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
163d0 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
163e0 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
163f0 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
16400 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
16410 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
16420 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
16430 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
16440 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
16450 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
16460 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
16470 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
16480 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
16490 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
164a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
164b0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65  turn code from e
164c0 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 63 68  xecution */.  ch
164d0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
164e0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
164f0 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
16500 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
16510 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
16520 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
16530 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
16540 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
16550 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
16560 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
16570 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
16580 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
16590 20 20 75 38 20 6e 61 6d 65 43 6c 61 73 68 3b 20    u8 nameClash; 
165a0 20 20 20 20 20 20 20 2f 2a 20 41 20 70 65 72 6d         /* A perm
165b0 61 6e 65 6e 74 20 74 61 62 6c 65 20 6e 61 6d 65  anent table name
165c0 20 63 6c 61 73 68 65 73 20 77 69 74 68 20 74 65   clashes with te
165d0 6d 70 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f  mp table name */
165e0 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
165f0 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
16600 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
16610 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
16620 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
16630 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
16640 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
16650 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
16660 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
16670 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 70 61  rator */.  u8 pa
16680 72 73 65 45 72 72 6f 72 3b 20 20 20 20 20 20 20  rseError;       
16690 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 61 20  /* True after a 
166a0 70 61 72 73 69 6e 67 20 65 72 72 6f 72 2e 20 20  parsing error.  
166b0 54 69 63 6b 65 74 20 23 31 37 39 34 20 2a 2f 0a  Ticket #1794 */.
166c0 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
166d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
166e0 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
166f0 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
16700 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54  Reg[] */.  u8 nT
16710 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20  empInUse;       
16720 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65  /* Number of aTe
16730 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c  mpReg[] currentl
16740 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f  y checked out */
16750 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
16760 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
16770 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
16780 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
16790 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
167a0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
167b0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
167c0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
167d0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
167e0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
167f0 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
16800 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
16810 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
16820 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
16830 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16840 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
16850 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
16860 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16870 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
16880 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
16890 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
168a0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
168b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
168c0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
168d0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
168e0 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
168f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
16900 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
16910 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20  .  int ckBase;  
16920 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
16930 72 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61  register of data
16940 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f   during check co
16950 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
16960 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20  nt iCacheLevel; 
16970 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20      /* ColCache 
16980 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43  valid when aColC
16990 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69  ache[].iLevel<=i
169a0 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20  CacheLevel */.  
169b0 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20  int iCacheCnt;  
169c0 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
169d0 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
169e0 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75   aColCache[].lru
169f0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
16a00 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20  nColCache;      
16a10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16a20 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 63 6f  ntries in the co
16a30 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 20 20  lumn cache */.  
16a40 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20  u8 iColCache;   
16a50 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
16a60 72 79 20 6f 66 20 74 68 65 20 63 61 63 68 65 20  ry of the cache 
16a70 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20  to replace */.  
16a80 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65  struct yColCache
16a90 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c   {.    int iTabl
16aa0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
16ab0 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d  Table cursor num
16ac0 62 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ber */.    int i
16ad0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
16ae0 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e   /* Table column
16af0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75   number */.    u
16b00 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20  8 tempReg;      
16b10 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20       /* iReg is 
16b20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20  a temp register 
16b30 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65  that needs to be
16b40 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e   freed */.    in
16b50 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
16b60 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c      /* Nesting l
16b70 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20  evel */.    int 
16b80 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  iReg;           
16b90 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61    /* Reg with va
16ba0 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
16bb0 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65  mn. 0 means none
16bc0 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75  . */.    int lru
16bd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
16be0 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  * Least recently
16bf0 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20   used entry has 
16c00 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
16c10 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61  ue */.  } aColCa
16c20 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  che[SQLITE_N_COL
16c30 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20  CACHE];  /* One 
16c40 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
16c50 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20  cache entry */. 
16c60 20 75 33 32 20 77 72 69 74 65 4d 61 73 6b 3b 20   u32 writeMask; 
16c70 20 20 20 20 20 20 2f 2a 20 53 74 61 72 74 20 61        /* Start a
16c80 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
16c90 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
16ca0 62 61 73 65 73 20 2a 2f 0a 20 20 75 33 32 20 63  bases */.  u32 c
16cb0 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 20 20 20 20  ookieMask;      
16cc0 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
16cd0 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
16ce0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 75 38 20  tabases */.  u8 
16cf0 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
16d00 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
16d10 74 65 6d 65 6e 74 20 6d 61 79 20 61 66 66 65 63  tement may affec
16d20 74 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  t/insert multipl
16d30 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
16d40 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
16d50 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
16d60 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
16d70 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
16d80 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  on */.  int cook
16d90 69 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20  ieGoto;      /* 
16da0 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f  Address of OP_Go
16db0 74 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72  to to cookie ver
16dc0 69 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65  ifier subroutine
16dd0 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
16de0 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
16df0 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
16e00 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
16e10 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
16e20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
16e30 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
16e40 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f  E.  int nTableLo
16e50 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ck;        /* Nu
16e60 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e  mber of locks in
16e70 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20   aTableLock */. 
16e80 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62   TableLock *aTab
16e90 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69  leLock; /* Requi
16ea0 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20  red table locks 
16eb0 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  for shared-cache
16ec0 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   mode */.#endif.
16ed0 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
16ee0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
16ef0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
16f00 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
16f10 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
16f20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
16f30 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
16f40 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
16f50 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
16f60 6a 65 63 74 73 20 2a 2f 0a 20 20 41 75 74 6f 69  jects */.  Autoi
16f70 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
16f80 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
16f90 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
16fa0 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  NT counters */. 
16fb0 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
16fc0 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
16fd0 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
16fe0 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
16ff0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 0a 20 20 2f  -program */..  /
17000 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
17010 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20  ed while coding 
17020 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
17030 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54  . */.  Parse *pT
17040 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50  oplevel;    /* P
17050 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66  arse structure f
17060 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20  or main program 
17070 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54  (or NULL) */.  T
17080 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61  able *pTriggerTa
17090 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69  b;  /* Table tri
170a0 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20  ggers are being 
170b0 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 75  coded for */.  u
170c0 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
170d0 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
170e0 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
170f0 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
17100 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
17110 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
17120 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
17130 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
17140 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
17150 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
17160 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
17170 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
17180 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
17190 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
171a0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
171b0 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
171c0 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
171d0 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
171e0 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
171f0 67 65 72 73 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  gers */.  double
17200 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f   nQueryLoop;   /
17210 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
17220 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73  er of iterations
17230 20 6f 66 20 61 20 71 75 65 72 79 20 2a 2f 0a 0a   of a query */..
17240 20 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    /* Above is co
17250 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
17260 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
17270 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
17280 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
17290 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20   each recursion 
172a0 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20  */..  int nVar; 
172b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
172c0 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
172d0 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
172e0 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
172f0 20 20 69 6e 74 20 6e 56 61 72 45 78 70 72 3b 20    int nVarExpr; 
17300 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17310 20 6f 66 20 75 73 65 64 20 73 6c 6f 74 73 20 69   of used slots i
17320 6e 20 61 70 56 61 72 45 78 70 72 5b 5d 20 2a 2f  n apVarExpr[] */
17330 0a 20 20 69 6e 74 20 6e 56 61 72 45 78 70 72 41  .  int nVarExprA
17340 6c 6c 6f 63 3b 20 20 20 2f 2a 20 4e 75 6d 62 65  lloc;   /* Numbe
17350 72 20 6f 66 20 61 6c 6c 6f 63 61 74 65 64 20 73  r of allocated s
17360 6c 6f 74 73 20 69 6e 20 61 70 56 61 72 45 78 70  lots in apVarExp
17370 72 5b 5d 20 2a 2f 0a 20 20 45 78 70 72 20 2a 2a  r[] */.  Expr **
17380 61 70 56 61 72 45 78 70 72 3b 20 20 20 20 2f 2a  apVarExpr;    /*
17390 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 3a 61 61   Pointers to :aa
173a0 61 20 61 6e 64 20 24 61 61 61 61 20 77 69 6c 64  a and $aaaa wild
173b0 63 61 72 64 20 65 78 70 72 65 73 73 69 6f 6e 73  card expressions
173c0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
173d0 72 65 70 61 72 65 3b 20 20 20 20 2f 2a 20 56 4d  repare;    /* VM
173e0 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
173f0 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
17400 61 72 65 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20  are()) */.  int 
17410 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
17420 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c   /* Number of al
17430 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74  iased result set
17440 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e   columns */.  in
17450 74 20 6e 41 6c 69 61 73 41 6c 6c 6f 63 3b 20 20  t nAliasAlloc;  
17460 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17470 61 6c 6c 6f 63 61 74 65 64 20 73 6c 6f 74 73 20  allocated slots 
17480 66 6f 72 20 61 41 6c 69 61 73 5b 5d 20 2a 2f 0a  for aAlias[] */.
17490 20 20 69 6e 74 20 2a 61 41 6c 69 61 73 3b 20 20    int *aAlias;  
174a0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
174b0 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  er used to hold 
174c0 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 2a  aliased result *
174d0 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
174e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
174f0 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
17500 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
17510 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 20 20   the query */.  
17520 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e  Token sNameToken
17530 3b 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69  ;    /* Token wi
17540 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
17550 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
17560 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  e */.  Token sLa
17570 73 74 54 6f 6b 65 6e 3b 20 20 20 20 2f 2a 20 54  stToken;    /* T
17580 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61  he last token pa
17590 72 73 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  rsed */.  const 
175a0 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 2f  char *zTail;   /
175b0 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70  * All SQL text p
175c0 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d  ast the last sem
175d0 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f  icolon parsed */
175e0 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61  .  Table *pNewTa
175f0 62 6c 65 3b 20 20 20 20 2f 2a 20 41 20 74 61 62  ble;    /* A tab
17600 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
17610 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
17620 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
17630 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
17640 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
17650 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
17660 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
17670 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
17680 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
17690 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
176a0 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
176b0 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
176c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
176d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
176e0 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20  E.  Token sArg; 
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17700 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
17710 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
17720 6d 65 6e 74 20 2a 2f 0a 20 20 75 38 20 64 65 63  ment */.  u8 dec
17730 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
17740 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
17750 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
17760 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
17770 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
17780 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17790 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
177a0 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
177b0 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  k */.  Table **a
177c0 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
177d0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
177e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
177f0 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
17800 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
17810 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
17820 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
17830 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
17840 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
17850 63 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ct */.  Table *p
17860 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
17870 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
17880 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
17890 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
178a0 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
178b0 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
178c0 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
178d0 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
178e0 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65  ers */.};..#ifde
178f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
17900 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
17910 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
17920 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
17930 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
17940 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
17950 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
17960 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
17970 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
17980 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
17990 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
179a0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
179b0 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
179c0 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
179d0 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
179e0 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
179f0 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
17a00 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
17a10 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
17a20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
17a30 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
17a40 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
17a50 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
17a60 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
17a70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
17a80 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
17a90 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
17aa0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
17ab0 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 4f  or P5 value in O
17ac0 50 5f 49 6e 73 65 72 74 20 61 6e 64 20 4f 50 5f  P_Insert and OP_
17ad0 44 65 6c 65 74 65 0a 2a 2f 0a 23 64 65 66 69 6e  Delete.*/.#defin
17ae0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
17af0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
17b00 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
17b10 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23  db->nChange */.#
17b20 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
17b30 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
17b40 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
17b50 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
17b60 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
17b70 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
17b80 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
17b90 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
17ba0 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
17bb0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
17bc0 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
17bd0 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
17be0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
17bf0 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
17c00 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
17c10 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
17c20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
17c30 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
17c40 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
17c50 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  ne OPFLAG_CLEARC
17c60 41 43 48 45 20 20 20 20 30 78 32 30 20 20 20 20  ACHE    0x20    
17c70 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d  /* Clear pseudo-
17c80 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20 4f  table cache in O
17c90 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a  P_Column */../*.
17ca0 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
17cb0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
17cc0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
17cd0 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
17ce0 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
17cf0 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
17d00 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
17d10 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
17d20 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
17d30 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
17d40 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
17d50 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
17d60 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
17d70 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
17d80 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
17d90 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
17da0 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
17db0 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
17dc0 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
17dd0 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
17de0 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
17df0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
17e00 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
17e10 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
17e20 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
17e30 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
17e40 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
17e50 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
17e60 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
17e70 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
17e80 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
17e90 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
17ea0 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
17eb0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
17ec0 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
17ed0 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
17ee0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
17ef0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
17f00 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
17f10 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
17f20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
17f30 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
17f40 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
17f50 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
17f60 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
17f70 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
17f80 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
17f90 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
17fa0 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
17fd0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
17fe0 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
17ff0 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
18000 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
18010 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18030 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
18040 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
18050 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
18060 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
18070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
18080 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
18090 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
180a0 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
180b0 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
180c0 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
180d0 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
180e0 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
180f0 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
18100 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
18110 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
18120 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
18130 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
18140 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
18150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18160 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
18170 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
18180 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
18190 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
181a0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
181b0 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
181c0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
181d0 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
181e0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
181f0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
18200 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
18210 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
18220 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
18230 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
18240 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
18250 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
18260 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
18270 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
18280 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
18290 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
182a0 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
182b0 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
182c0 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
182d0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
182e0 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
182f0 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
18300 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
18310 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
18320 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
18330 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
18340 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
18350 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
18360 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
18370 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
18380 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
18390 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
183a0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
183b0 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
183c0 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
183d0 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
183e0 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
183f0 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
18400 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
18410 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
18420 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
18430 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
18440 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
18450 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
18460 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
18470 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
18480 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
18490 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
184a0 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
184b0 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
184c0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
184d0 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
184e0 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
184f0 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
18500 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
18510 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
18520 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
18530 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
18540 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
18550 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
18560 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
18570 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
18580 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
18590 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
185a0 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
185b0 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
185c0 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
185d0 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
185e0 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
185f0 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
18600 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
18610 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
18620 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
18630 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
18640 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
18650 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
18660 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
18670 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
18680 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
18690 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
186a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
186b0 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
186c0 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
186d0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
186e0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
186f0 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
18700 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
18710 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
18720 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
18730 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
18740 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
18750 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
18760 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
18770 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
18780 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
18790 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
187a0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
187b0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
187c0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
187d0 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
187e0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
187f0 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
18800 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
18810 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
18820 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
18830 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
18840 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
18850 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
18860 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
18870 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
18880 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74   TK_DELETE). * t
18890 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
188a0 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
188b0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
188c0 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
188d0 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
188e0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
188f0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
18900 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
18910 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
18920 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
18930 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
18940 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
18950 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
18960 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
18970 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
18980 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
18990 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
189a0 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a  update rows of..
189b0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
189c0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
189d0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
189e0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
189f0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
18a10 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
18a20 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
18a30 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
18a40 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
18a50 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
18a60 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
18a70 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
18a80 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
18a90 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
18aa0 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
18ab0 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
18ac0 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
18ad0 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  * . */.struct Tr
18ae0 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
18af0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
18b00 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
18b10 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
18b20 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
18b30 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
18b40 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
18b50 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
18b60 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
18b70 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
18b80 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
18b90 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
18ba0 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
18bb0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
18bc0 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
18bd0 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  tatment or RHS o
18be0 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  f INSERT INTO ..
18bf0 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
18c00 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20   Token target;  
18c10 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
18c20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
18c30 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
18c40 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
18c50 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
18c60 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
18c70 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
18c80 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
18c90 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
18ca0 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
18cb0 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 20 56  e for UPDATE.  V
18cc0 41 4c 55 45 53 20 63 6c 61 75 73 65 20 66 6f 72  ALUES clause for
18cd0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 49 64 4c   INSERT */.  IdL
18ce0 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
18cf0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
18d00 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
18d10 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
18d20 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
18d30 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
18d40 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
18d50 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
18d60 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
18d70 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
18d80 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
18d90 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
18da0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
18db0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
18dc0 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
18dd0 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
18de0 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
18df0 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
18e00 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
18e10 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
18e20 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
18e30 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66  it.  .*/.typedef
18e40 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20   struct DbFixer 
18e50 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20  DbFixer;.struct 
18e60 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73  DbFixer {.  Pars
18e70 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
18e80 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63  /* The parsing c
18e90 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d  ontext.  Error m
18ea0 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20  essages written 
18eb0 68 65 72 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  here */.  const 
18ec0 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
18ed0 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
18ee0 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
18ef0 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
18f00 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
18f10 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
18f20 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
18f30 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
18f40 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
18f50 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
18f60 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
18f70 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
18f80 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
18f90 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
18fa0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
18fb0 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
18fc0 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
18fd0 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
18fe0 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
18ff0 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
19000 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
19010 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
19020 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
19030 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
19040 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
19050 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
19060 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
19070 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
19080 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
19090 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
190a0 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
190b0 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
190c0 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
190d0 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
190e0 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
190f0 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
19100 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61  r */.  int  nCha
19110 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
19120 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
19130 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
19140 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  int  nAlloc;    
19150 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
19160 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
19170 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
19180 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  int  mxAlloc;   
19190 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
191a0 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c  allowed string l
191b0 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20  ength */.  u8   
191c0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
191d0 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20  /* Becomes true 
191e0 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c  if any memory al
191f0 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a  location fails *
19200 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c  /.  u8   useMall
19210 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e  oc;      /* 0: n
19220 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33  one,  1: sqlite3
19230 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71  DbMalloc,  2: sq
19240 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  lite3_malloc */.
19250 20 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20    u8   tooBig;  
19260 20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65         /* Become
19270 73 20 74 72 75 65 20 69 66 20 73 74 72 69 6e 67  s true if string
19280 20 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69   size exceeds li
19290 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mits */.};../*.*
192a0 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
192b0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
192c0 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
192d0 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
192e0 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
192f0 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
19300 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
19310 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
19320 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
19330 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
19340 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
19350 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
19360 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
19370 64 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  d */.  int iDb; 
19380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
19390 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
193a0 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
193b0 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
193c0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
193d0 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
193e0 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
193f0 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
19400 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
19410 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
19420 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
19430 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
19440 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
19450 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
19460 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
19470 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
19480 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
19490 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
194a0 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
194b0 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
194c0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
194d0 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
194e0 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
19510 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
19520 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
19530 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
19540 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
19550 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
19560 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
19570 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19590 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
195a0 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
195b0 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
195c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
195d0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
195e0 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
195f0 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73  /.  int szLookas
19600 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
19610 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
19620 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
19630 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20  r size */.  int 
19640 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  nLookaside;     
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19660 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
19670 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20  de buffer count 
19680 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
19690 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
196a0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
196b0 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
196c0 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
196d0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
196e0 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
196f0 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
19700 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
19710 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
19720 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 20  _pcache_methods 
19730 70 63 61 63 68 65 3b 20 20 20 20 2f 2a 20 4c 6f  pcache;    /* Lo
19740 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
19750 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
19760 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
19790 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
197a0 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
197d0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
197e0 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
197f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
19800 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
19810 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
19820 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63  .  void *pScratc
19830 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
19840 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20       /* Scratch 
19850 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
19860 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  szScratch;      
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19880 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63   Size of each sc
19890 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a  ratch buffer */.
198a0 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20    int nScratch; 
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
198d0 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73   scratch buffers
198e0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
198f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
19900 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
19910 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
19920 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
19950 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
19960 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
19970 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
19980 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
19990 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
199a0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
199b0 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
199c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199d0 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
199e0 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
199f0 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
19a00 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
19a10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
19a20 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
19a30 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
19a40 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
19a50 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
19a60 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
19a70 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
19a80 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
19a90 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
19aa0 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
19ab0 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
19ac0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
19ad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
19ae0 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
19af0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
19b00 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
19b10 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
19b20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19b30 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
19b40 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
19b50 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
19b60 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
19b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19b80 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
19b90 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
19ba0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
19bb0 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
19bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
19bd0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
19be0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
19bf0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
19c00 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
19c10 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
19c20 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
19c30 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c  ialized */.  sql
19c40 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
19c50 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
19c60 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
19c70 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
19c80 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ze() */.  int nR
19c90 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19cb0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
19cc0 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
19cd0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
19ce0 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
19cf0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
19d00 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
19d10 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
19d20 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
19d30 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
19d40 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
19d50 6f 67 28 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  og() */.};../*.*
19d60 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
19d70 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
19d80 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
19d90 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
19da0 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  alker {.  int (*
19db0 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
19dc0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
19dd0 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
19de0 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
19df0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
19e00 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
19e10 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
19e20 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
19e30 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73  ELECTs */.  Pars
19e40 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
19e70 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 75  context.  */.  u
19e80 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72           /* Extr
19eb0 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
19ec0 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
19ed0 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
19f00 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
19f10 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74            /* Int
19f40 65 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20  eger value */.  
19f50 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
19f60 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
19f70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
19f80 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
19f90 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
19fa0 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
19fb0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
19fc0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
19fd0 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
19fe0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
19ff0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1a000 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
1a010 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1a020 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1a030 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
1a040 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  elect*);../*.** 
1a050 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1a060 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
1a070 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
1a080 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
1a090 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
1a0a0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
1a0b0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
1a0c0 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
1a0d0 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
1a0e0 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
1a0f0 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
1a100 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
1a110 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
1a120 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
1a130 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
1a140 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
1a150 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
1a160 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
1a170 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
1a180 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1a190 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
1a1a0 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
1a1b0 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
1a1c0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
1a1d0 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
1a1e0 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
1a1f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
1a200 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
1a230 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
1a240 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1a260 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
1a270 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
1a280 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
1a290 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2d0 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
1a2e0 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
1a2f0 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
1a300 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
1a310 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
1a320 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
1a330 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
1a340 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
1a350 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
1a360 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
1a370 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
1a380 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
1a390 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
1a3a0 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
1a3b0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
1a3c0 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
1a3d0 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
1a3e0 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
1a3f0 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
1a400 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
1a410 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
1a420 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
1a430 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
1a440 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
1a450 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1a460 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
1a470 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
1a480 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
1a490 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
1a4a0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
1a4b0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
1a4c0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
1a4d0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
1a4e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
1a4f0 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
1a500 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
1a510 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a  __LINE__).../*.*
1a520 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
1a530 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
1a540 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
1a550 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
1a560 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
1a570 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
1a580 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
1a590 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c  usion we also al
1a5a0 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
1a5b0 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
1a5c0 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
1a5d0 20 61 6c 69 73 73 65 20 66 6f 72 20 53 51 4c 49   alisse for SQLI
1a5e0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
1a5f0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1a600 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1a610 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
1a620 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1a630 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
1a640 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23  TE_ENABLE_FTS3.#
1a650 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1a660 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
1a670 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
1a680 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
1a690 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
1a6a0 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
1a6b0 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
1a6c0 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
1a6d0 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
1a6e0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1a6f0 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
1a700 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
1a710 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
1a720 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1a730 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
1a740 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
1a750 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1a760 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1a770 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
1a780 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
1a790 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
1a7a0 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
1a7b0 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
1a7c0 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
1a7d0 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
1a7e0 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
1a7f0 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
1a800 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
1a810 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
1a820 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
1a830 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
1a840 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
1a850 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
1a860 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
1a870 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1a880 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1a890 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
1a8a0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
1a8b0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1a8c0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1a8d0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
1a8e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1a8f0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
1a900 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1a910 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1a920 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
1a930 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
1a940 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1a950 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1a960 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
1a970 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1a980 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
1a990 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1a9a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1a9b0 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
1a9c0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
1a9d0 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
1a9e0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1a9f0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
1aa00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1aa10 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
1aa20 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
1aa30 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
1aa40 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20  r)(x)]).#else.# 
1aa50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1aa60 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70  upper(x)   toupp
1aa70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
1aa80 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1aa90 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
1aaa0 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73  )   isspace((uns
1aab0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1aac0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1aad0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61  Isalnum(x)   isa
1aae0 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63  lnum((unsigned c
1aaf0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1ab00 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
1ab10 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75  (x)   isalpha((u
1ab20 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1ab30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1ab40 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69  e3Isdigit(x)   i
1ab50 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  sdigit((unsigned
1ab60 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1ab70 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
1ab80 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74  git(x)  isxdigit
1ab90 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1aba0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1abb0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1abc0 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67    tolower((unsig
1abd0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65  ned char)(x)).#e
1abe0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
1abf0 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
1ac00 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20  ototypes.*/.int 
1ac10 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63  sqlite3StrICmp(c
1ac20 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
1ac30 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20  st char *);.int 
1ac40 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72 28  sqlite3IsNumber(
1ac50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1ac60 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
1ac70 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
1ac80 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
1ac90 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
1aca0 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
1acb0 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
1acc0 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
1acd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
1ace0 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
1acf0 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
1ad00 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  c(int);.void *sq
1ad10 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
1ad20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1ad30 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
1ad40 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
1ad50 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
1ad60 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
1ad70 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  *, int);.char *s
1ad80 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
1ad90 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1ada0 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
1adb0 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
1adc0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1add0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1ade0 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
1adf0 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  id*, int);.void 
1ae00 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
1ae10 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
1ae20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b  *, void *, int);
1ae30 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1ae40 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
1ae50 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b  *, void *, int);
1ae60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
1ae70 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
1ae80 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
1ae90 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
1aea0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
1aeb0 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
1aec0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
1aed0 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
1aee0 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
1aef0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
1af00 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
1af10 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
1af20 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1af30 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
1af40 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
1af50 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
1af60 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ult(void);.void 
1af70 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
1af80 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
1af90 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
1afa0 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71  )(void));.int sq
1afb0 6c 69 74 65 33 4d 65 6d 6f 72 79 41 6c 61 72 6d  lite3MemoryAlarm
1afc0 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 2a 2c  (void (*)(void*,
1afd0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c 20   sqlite3_int64, 
1afe0 69 6e 74 29 2c 20 76 6f 69 64 2a 2c 20 73 71 6c  int), void*, sql
1aff0 69 74 65 33 5f 69 6e 74 36 34 29 3b 0a 0a 2f 2a  ite3_int64);../*
1b000 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
1b010 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
1b020 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
1b030 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
1b040 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
1b050 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
1b060 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
1b070 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
1b080 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
1b090 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
1b0a0 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
1b0b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
1b0c0 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
1b0d0 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
1b0e0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
1b0f0 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
1b100 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
1b110 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1b120 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
1b130 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
1b140 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1b150 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
1b160 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1b170 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
1b180 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
1b190 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1b1a0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
1b1b0 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
1b1c0 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
1b1d0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
1b1e0 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c  (D,P)       .#el
1b1f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1b200 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
1b210 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
1b220 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
1b230 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1b240 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
1b250 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
1b260 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
1b270 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1b280 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
1b290 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1b2a0 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69  (D,P).#endif..#i
1b2b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1b2c0 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
1b2d0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1b2e0 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
1b2f0 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
1b300 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1b310 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1b320 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
1b330 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1b340 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
1b350 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e  msys5(void);.#en
1b360 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
1b370 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
1b380 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1b390 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
1b3a0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
1b3b0 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
1b3c0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1b3d0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
1b3e0 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
1b3f0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1b400 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
1b410 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
1b420 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
1b430 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
1b440 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
1b450 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  id);.#endif..int
1b460 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
1b470 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
1b480 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28  qlite3StatusAdd(
1b490 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1b4a0 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74  sqlite3StatusSet
1b4b0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  (int, int);..#if
1b4c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1b4d0 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
1b4e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
1b4f0 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
1b500 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1b510 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
1b520 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
1b530 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63  e3VXPrintf(StrAc
1b540 63 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  cum*, int, const
1b550 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
1b560 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1b570 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64  _OMIT_TRACE.void
1b580 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
1b590 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74  StrAccum*, const
1b5a0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
1b5b0 6e 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74  ndif.char *sqlit
1b5c0 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
1b5d0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1b5e0 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
1b5f0 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
1b600 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1b610 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72  , va_list);.char
1b620 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64   *sqlite3MAppend
1b630 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a  f(sqlite3*,char*
1b640 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  ,const char*,...
1b650 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
1b660 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64  QLITE_TEST) || d
1b670 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1b680 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
1b690 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
1b6a0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1b6b0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
1b6c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
1b6d0 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
1b6e0 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
1b6f0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
1b700 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
1b710 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
1b720 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
1b730 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1b740 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
1b750 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
1b760 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1b770 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f  int sqlite3Dequo
1b780 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  te(char*);.int s
1b790 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
1b7a0 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
1b7b0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
1b7c0 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
1b7d0 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
1b7e0 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
1b7f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
1b800 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
1b810 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
1b820 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
1b830 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1b840 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
1b850 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
1b860 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
1b870 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
1b880 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
1b890 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
1b8a0 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  se*,int,int);.Ex
1b8b0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
1b8c0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
1b8d0 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
1b8e0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
1b8f0 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
1b900 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1b910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1b920 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
1b930 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
1b940 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
1b950 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
1b960 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
1b970 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  pr*, Expr*, cons
1b980 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  t Token*);.Expr 
1b990 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
1b9a0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20  sqlite3*,Expr*, 
1b9b0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
1b9c0 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f  lite3ExprFunctio
1b9d0 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
1b9e0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  t*, Token*);.voi
1b9f0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
1ba00 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
1ba10 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
1ba20 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c  d sqlite3ExprDel
1ba30 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
1ba40 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
1ba50 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
1ba60 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  ppend(Parse*,Exp
1ba70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76  rList*,Expr*);.v
1ba80 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
1ba90 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65  istSetName(Parse
1baa0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65  *,ExprList*,Toke
1bab0 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
1bac0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
1bad0 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  Span(Parse*,Expr
1bae0 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29  List*,ExprSpan*)
1baf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1bb00 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
1bb10 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
1bb20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
1bb30 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  it(sqlite3*, cha
1bb40 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
1bb50 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
1bb60 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  id*, int, char**
1bb70 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20  , char**);.void 
1bb80 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61  sqlite3Pragma(Pa
1bb90 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
1bba0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  n*,Token*,int);.
1bbb0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
1bbc0 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
1bbd0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
1bbe0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1bbf0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e  nParse(Parse*,in
1bc00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1bc10 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
1bc20 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
1bc30 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
1bc40 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
1bc50 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29  (Parse*,Select*)
1bc60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
1bc70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
1bc80 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  rse *, int);.voi
1bc90 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
1bca0 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
1bcb0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
1bcc0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
1bcd0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
1bce0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
1bcf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1bd00 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
1bd10 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1bd20 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
1bd30 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
1bd40 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1bd50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1bd60 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
1bd70 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
1bd80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1bd90 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73  dColumnType(Pars
1bda0 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
1bdb0 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
1bdc0 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
1bdd0 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
1bde0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
1bdf0 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
1be00 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1be10 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
1be20 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1be30 2c 53 65 6c 65 63 74 2a 29 3b 0a 0a 42 69 74 76  ,Select*);..Bitv
1be40 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
1be50 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
1be60 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
1be70 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
1be80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
1be90 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
1bea0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
1beb0 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
1bec0 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
1bed0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
1bee0 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
1bef0 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
1bf00 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
1bf10 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c  itvec*);.int sql
1bf20 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
1bf30 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
1bf40 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65  ..RowSet *sqlite
1bf50 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69  3RowSetInit(sqli
1bf60 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73  te3*, void*, uns
1bf70 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64  igned int);.void
1bf80 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c   sqlite3RowSetCl
1bf90 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f  ear(RowSet*);.vo
1bfa0 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
1bfb0 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20  Insert(RowSet*, 
1bfc0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
1bfd0 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53  3RowSetTest(RowS
1bfe0 65 74 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20  et*, u8 iBatch, 
1bff0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
1c000 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
1c010 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
1c020 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
1c030 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
1c040 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1c050 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
1c060 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
1c070 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
1c080 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
1c090 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1c0a0 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
1c0b0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
1c0c0 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
1c0d0 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
1c0e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
1c0f0 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
1c100 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
1c110 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1c120 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
1c130 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
1c140 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1c150 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
1c160 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
1c170 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c180 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
1c190 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
1c1a0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
1c1b0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
1c1c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
1c1d0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1c1e0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
1c1f0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1c200 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
1c210 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
1c220 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
1c230 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
1c240 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
1c250 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
1c260 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
1c270 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
1c280 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
1c290 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
1c2a0 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
1c2b0 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
1c2c0 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 69 6e 74 2a 29  ,int*,int*,int*)
1c2d0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
1c2e0 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
1c2f0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
1c300 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
1c310 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
1c320 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
1c330 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
1c340 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
1c350 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
1c360 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
1c370 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
1c380 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
1c390 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
1c3a0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
1c3b0 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
1c3c0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1c3d0 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
1c3e0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1c3f0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
1c430 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
1c440 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
1c450 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
1c460 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
1c470 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
1c480 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
1c490 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
1c4a0 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
1c4b0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
1c4c0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1c4d0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
1c4e0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
1c4f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
1c500 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
1c510 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
1c520 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
1c530 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1c540 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
1c550 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
1c560 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1c570 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
1c580 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49   *sqlite3CreateI
1c590 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
1c5a0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
1c5b0 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
1c5c0 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5e0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69 6e   Token*, int, in
1c5f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1c600 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
1c610 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1c620 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
1c630 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
1c640 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1c650 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
1c660 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
1c670 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
1c680 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1c690 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1c6c0 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  int,Expr*,Expr*)
1c6d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
1c6e0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
1c6f0 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
1c700 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
1c710 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
1c720 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
1c730 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
1c740 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
1c750 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1c760 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
1c770 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
1c780 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
1c790 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
1c7a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c7b0 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
1c7c0 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
1c7d0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1c7e0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
1c7f0 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
1c800 65 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  e(Parse *, SrcLi
1c810 73 74 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  st *, Expr *, Ex
1c820 70 72 4c 69 73 74 20 2a 2c 20 45 78 70 72 20 2a  prList *, Expr *
1c830 2c 20 45 78 70 72 20 2a 2c 20 63 68 61 72 20 2a  , Expr *, char *
1c840 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
1c850 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d  qlite3DeleteFrom
1c860 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1c870 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
1c880 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61  sqlite3Update(Pa
1c890 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1c8a0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
1c8b0 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66  , int);.WhereInf
1c8c0 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
1c8d0 65 67 69 6e 28 50 61 72 73 65 2a 2c 20 53 72 63  egin(Parse*, Src
1c8e0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78  List*, Expr*, Ex
1c8f0 70 72 4c 69 73 74 2a 2a 2c 20 75 31 36 29 3b 0a  prList**, u16);.
1c900 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72  void sqlite3Wher
1c910 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  eEnd(WhereInfo*)
1c920 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1c930 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
1c940 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1c950 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1c960 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1c970 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
1c980 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
1c990 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1c9a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1c9b0 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
1c9c0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1c9d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1c9e0 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72  ExprCodeCopy(Par
1c9f0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
1ca00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1ca10 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28  3ExprCacheStore(
1ca20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1ca30 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1ca40 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73  ite3ExprCachePus
1ca50 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  h(Parse*);.void 
1ca60 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
1ca70 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Pop(Parse*, int)
1ca80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1ca90 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
1caa0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
1cab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1cac0 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
1cad0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1cae0 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
1caf0 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
1cb00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1cb10 20 73 71 6c 69 74 65 33 45 78 70 72 48 61 72 64   sqlite3ExprHard
1cb20 43 6f 70 79 28 50 61 72 73 65 2a 2c 69 6e 74 2c  Copy(Parse*,int,
1cb30 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1cb40 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a  3ExprCode(Parse*
1cb50 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
1cb60 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1cb70 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45  deTemp(Parse*, E
1cb80 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
1cb90 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1cba0 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45  Target(Parse*, E
1cbb0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
1cbc0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
1cbd0 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
1cbe0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
1cbf0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1cc00 65 43 6f 6e 73 74 61 6e 74 73 28 50 61 72 73 65  eConstants(Parse
1cc10 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
1cc20 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
1cc30 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
1cc40 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
1cc50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1cc60 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
1cc70 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
1cc80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1cc90 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
1cca0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1ccb0 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
1ccc0 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
1ccd0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1cce0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
1ccf0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
1cd00 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
1cd10 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
1cd20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1cd30 73 74 20 63 68 61 72 2a 29 3b 0a 49 6e 64 65 78  st char*);.Index
1cd40 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
1cd50 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
1cd60 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
1cd70 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1cd80 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
1cd90 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
1cda0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1cdb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1cdc0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
1cdd0 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
1cde0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1cdf0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
1ce00 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
1ce10 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
1ce20 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
1ce30 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1ce40 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
1ce50 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
1ce60 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1ce70 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
1ce80 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1ce90 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
1cea0 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
1ceb0 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
1cec0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
1ced0 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
1cee0 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
1cef0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1cf00 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28  rAnalyzeAggList(
1cf10 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70  NameContext*,Exp
1cf20 72 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  rList*);.Vdbe *s
1cf30 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
1cf40 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1cf50 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
1cf60 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1cf70 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
1cf80 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
1cf90 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 65   sqlite3PrngRese
1cfa0 74 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  tState(void);.vo
1cfb0 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
1cfc0 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 29 3b  ckAll(sqlite3*);
1cfd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1cfe0 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
1cff0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1d000 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
1d010 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
1d020 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1d030 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
1d040 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
1d050 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
1d060 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
1d070 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1d080 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
1d090 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
1d0a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1d0b0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
1d0c0 71 6c 69 74 65 33 20 2a 29 3b 0a 69 6e 74 20 73  qlite3 *);.int s
1d0d0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
1d0e0 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
1d0f0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
1d100 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
1d110 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1d120 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
1d130 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29  rFunction(Expr*)
1d140 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1d150 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
1d160 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
1d170 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
1d180 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
1d190 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1d1a0 43 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56  CodeIsNullJump(V
1d1b0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  dbe*, const Expr
1d1c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
1d1d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
1d1e0 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
1d1f0 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
1d200 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
1d210 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
1d220 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
1d230 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
1d240 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
1d250 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1d260 69 6e 74 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  int, Trigger *, 
1d270 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d280 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
1d290 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
1d2a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1d2b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1d2c0 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
1d2d0 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
1d2e0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1d2f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
1d300 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
1d310 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
1d320 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  le*,int,int,.   
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d350 20 20 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69    int*,int,int,i
1d360 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  nt,int,int*);.vo
1d370 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
1d380 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
1d390 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1d3a0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c   int, int*, int,
1d3b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1d3c0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
1d3d0 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
1d3e0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1d3f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d400 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
1d410 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
1d420 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1d430 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
1d440 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1d450 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
1d460 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1d470 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
1d480 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  t(Parse*, int, c
1d490 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  har*, int);.Expr
1d4a0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
1d4b0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
1d4c0 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
1d4d0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
1d4e0 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
1d4f0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
1d500 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
1d510 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
1d520 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
1d530 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
1d540 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
1d550 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
1d560 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
1d570 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
1d580 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ect*,int);.void 
1d590 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e  sqlite3FuncDefIn
1d5a0 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68  sert(FuncDefHash
1d5b0 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75  *, FuncDef*);.Fu
1d5c0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
1d5d0 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
1d5e0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1d5f0 69 6e 74 2c 69 6e 74 2c 75 38 2c 69 6e 74 29 3b  int,int,u8,int);
1d600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1d610 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
1d620 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
1d630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1d640 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
1d650 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
1d660 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
1d670 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  erGlobalFunction
1d680 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
1d690 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
1d6a0 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
1d6b0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
1d6c0 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
1d6d0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1d6e0 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
1d6f0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
1d700 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1d710 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
1d720 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1d730 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
1d740 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
1d750 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
1d760 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
1d770 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
1d780 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1d790 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
1d7a0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
1d7b0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
1d7c0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
1d7d0 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
1d7e0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d800 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
1d810 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d820 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
1d830 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
1d840 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
1d850 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1d860 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1d870 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
1d880 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
1d890 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
1d8a0 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
1d8b0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
1d8c0 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
1d8d0 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
1d8e0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
1d8f0 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
1d900 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
1d910 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
1d920 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
1d930 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
1d940 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
1d950 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
1d960 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
1d970 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
1d9a0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
1d9b0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
1d9c0 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
1d9d0 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
1d9e0 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
1d9f0 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
1da00 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
1da10 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
1da20 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
1da30 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
1da40 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1da50 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
1da60 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
1da70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
1da80 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
1da90 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
1daa0 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
1dab0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1dac0 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
1dad0 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
1dae0 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
1daf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 20 20 20 20 20 20 20 20 20 45 78 70 72 4c 69 73           ExprLis
1db20 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a  t*,Select*,u8);.
1db30 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1db40 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
1db50 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
1db60 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
1db70 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
1db80 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1db90 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
1dba0 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
1dbb0 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
1dbc0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
1dbd0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
1dbe0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
1dbf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
1dc00 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
1dc10 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
1dc20 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1dc30 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
1dc40 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
1dc50 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
1dc60 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
1dc70 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
1dc80 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
1dc90 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
1dca0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
1dcb0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
1dcc0 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (p)).#else.# def
1dcd0 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
1dce0 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
1dcf0 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
1dd00 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
1dd10 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
1dd20 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
1dd30 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
1dd40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
1dd50 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
1dd60 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
1dd70 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
1dd80 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
1dd90 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
1dda0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
1ddb0 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
1ddc0 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
1ddd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1dde0 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
1ddf0 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
1de00 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
1de10 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
1de20 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
1de30 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
1de40 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
1de50 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
1de60 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
1de70 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1de80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1de90 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
1dea0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
1deb0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
1dec0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
1ded0 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
1dee0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
1def0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
1df00 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
1df10 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
1df20 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
1df30 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
1df40 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
1df50 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
1df60 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
1df70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
1df80 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1df90 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
1dfa0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
1dfb0 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
1dfc0 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
1dfd0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
1dfe0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
1dff0 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
1e000 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
1e010 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
1e020 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1e030 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
1e040 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
1e050 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1e060 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
1e070 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
1e080 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
1e090 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
1e0a0 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
1e0b0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1e0c0 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
1e0d0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
1e0e0 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
1e0f0 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
1e100 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
1e110 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
1e120 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
1e130 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1e140 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
1e150 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1e160 33 42 74 72 65 65 46 61 63 74 6f 72 79 28 73 71  3BtreeFactory(sq
1e170 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
1e180 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
1e190 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e1a0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 6d 69           int omi
1e1b0 74 4a 6f 75 72 6e 61 6c 2c 20 69 6e 74 20 6e 43  tJournal, int nC
1e1c0 61 63 68 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c  ache, int flags,
1e1d0 20 42 74 72 65 65 20 2a 2a 70 70 42 74 72 65 65   Btree **ppBtree
1e1e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1e1f0 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
1e200 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
1e210 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1e220 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
1e230 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
1e240 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
1e250 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1e260 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
1e270 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1e280 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
1e290 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
1e2a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1e2b0 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
1e2c0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
1e2d0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
1e2e0 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
1e2f0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
1e300 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
1e310 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
1e320 20 64 6f 75 62 6c 65 2a 29 3b 0a 69 6e 74 20 73   double*);.int s
1e330 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
1e340 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
1e350 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1e360 69 74 73 49 6e 36 34 42 69 74 73 28 63 6f 6e 73  itsIn64Bits(cons
1e370 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
1e380 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
1e390 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
1e3a0 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
1e3b0 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
1e3c0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
1e3d0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
1e3e0 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 69 6e 74   int nByte);.int
1e3f0 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
1e400 28 63 6f 6e 73 74 20 75 38 2a 2c 20 63 6f 6e 73  (const u8*, cons
1e410 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  t u8**);../*.** 
1e420 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
1e430 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
1e440 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
1e450 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
1e460 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
1e470 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
1e480 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
1e490 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
1e4a0 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
1e4b0 69 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c  ile.  Code shoul
1e4c0 64 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20  d use the MACRO 
1e4d0 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20  forms below, as 
1e4e0 74 68 65 20 56 61 72 69 6e 74 33 32 20 76 65 72  the Varint32 ver
1e4f0 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64  sions.** are cod
1e500 65 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65  ed to assume the
1e510 20 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73   single byte cas
1e520 65 20 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e  e is already han
1e530 64 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20  dled (which .** 
1e540 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64  the MACRO form d
1e550 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oes)..*/.int sql
1e560 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
1e570 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
1e580 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  4);.int sqlite3P
1e590 75 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67  utVarint32(unsig
1e5a0 6e 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b  ned char*, u32);
1e5b0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
1e5c0 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
1e5d0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
1e5e0 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
1e5f0 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
1e600 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
1e610 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
1e620 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
1e630 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
1e640 20 68 65 61 64 65 72 20 6f 66 20 61 20 72 65 63   header of a rec
1e650 6f 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ord consists of 
1e660 61 20 73 65 71 75 65 6e 63 65 20 76 61 72 69 61  a sequence varia
1e670 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
1e680 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e  ers..** These in
1e690 74 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73  tegers are almos
1e6a0 74 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61  t always small a
1e6b0 6e 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61  nd are encoded a
1e6c0 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  s a single byte.
1e6d0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1e6e0 67 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64  g macros take ad
1e6f0 76 61 6e 74 61 67 65 20 74 68 69 73 20 66 61 63  vantage this fac
1e700 74 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66  t to provide a f
1e710 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e  ast encode.** an
1e720 64 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20  d decode of the 
1e730 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72 65  integers in a re
1e740 63 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49 74  cord header.  It
1e750 20 69 73 20 66 61 73 74 65 72 20 66 6f 72 20 74   is faster for t
1e760 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73  he common.** cas
1e770 65 20 77 68 65 72 65 20 74 68 65 20 69 6e 74 65  e where the inte
1e780 67 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ger is a single 
1e790 62 79 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c  byte.  It is a l
1e7a0 69 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65  ittle slower whe
1e7b0 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  n the.** integer
1e7c0 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20   is two or more 
1e7d0 62 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72  bytes.  But over
1e7e0 61 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65 72  all it is faster
1e7f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
1e800 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  owing expression
1e810 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74  s are equivalent
1e820 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20  :.**.**     x = 
1e830 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
1e840 33 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20  32( A, &B );.** 
1e850 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50      x = sqlite3P
1e860 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  utVarint32( A, B
1e870 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20   );.**.**     x 
1e880 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 20 41  = getVarint32( A
1e890 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20  , B );.**     x 
1e8a0 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 20 41  = putVarint32( A
1e8b0 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65  , B );.**.*/.#de
1e8c0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
1e8d0 28 41 2c 42 29 20 20 28 75 38 29 28 28 2a 28 41  (A,B)  (u8)((*(A
1e8e0 29 3c 28 75 38 29 30 78 38 30 29 20 3f 20 28 28  )<(u8)0x80) ? ((
1e8f0 42 29 20 3d 20 28 75 33 32 29 2a 28 41 29 29 2c  B) = (u32)*(A)),
1e900 31 20 3a 20 73 71 6c 69 74 65 33 47 65 74 56 61  1 : sqlite3GetVa
1e910 72 69 6e 74 33 32 28 28 41 29 2c 20 28 75 33 32  rint32((A), (u32
1e920 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
1e930 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
1e940 42 29 20 20 28 75 38 29 28 28 28 75 33 32 29 28  B)  (u8)(((u32)(
1e950 42 29 3c 28 75 33 32 29 30 78 38 30 29 20 3f 20  B)<(u32)0x80) ? 
1e960 28 2a 28 41 29 20 3d 20 28 75 6e 73 69 67 6e 65  (*(A) = (unsigne
1e970 64 20 63 68 61 72 29 28 42 29 29 2c 31 20 3a 20  d char)(B)),1 : 
1e980 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
1e990 33 32 28 28 41 29 2c 20 28 42 29 29 29 0a 23 64  32((A), (B))).#d
1e9a0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20  efine getVarint 
1e9b0 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72     sqlite3GetVar
1e9c0 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56  int.#define putV
1e9d0 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
1e9e0 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73  PutVarint...cons
1e9f0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49  t char *sqlite3I
1ea00 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
1ea10 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29  Vdbe *, Index *)
1ea20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61  ;.void sqlite3Ta
1ea30 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28 56  bleAffinityStr(V
1ea40 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  dbe *, Table *);
1ea50 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d  .char sqlite3Com
1ea60 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70  pareAffinity(Exp
1ea70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61  r *pExpr, char a
1ea80 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ff2);.int sqlite
1ea90 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b  3IndexAffinityOk
1eaa0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
1eab0 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29  ar idx_affinity)
1eac0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78  ;.char sqlite3Ex
1ead0 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  prAffinity(Expr 
1eae0 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
1eaf0 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74  ite3Atoi64(const
1eb00 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
1eb10 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
1eb20 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
1eb30 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
1eb40 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
1eb50 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
1eb60 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
1eb70 2c 20 69 6e 74 20 6e 29 3b 0a 69 6e 74 20 73 71  , int n);.int sq
1eb80 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
1eb90 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
1eba0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
1ebb0 6e 20 2a 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  n **);.const cha
1ebc0 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
1ebd0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1ebe0 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
1ebf0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
1ec00 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
1ec10 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
1ec20 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
1ec30 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
1ec40 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
1ec50 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
1ec60 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
1ec70 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
1ec80 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
1ec90 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
1eca0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
1ecb0 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
1ecc0 65 33 45 78 70 72 53 65 74 43 6f 6c 6c 28 45 78  e3ExprSetColl(Ex
1ecd0 70 72 2a 2c 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a  pr*, CollSeq*);.
1ece0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1ecf0 72 53 65 74 43 6f 6c 6c 42 79 54 6f 6b 65 6e 28  rSetCollByToken(
1ed00 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
1ed10 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  xpr*, Token*);.i
1ed20 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
1ed30 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
1ed40 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
1ed50 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
1ed60 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
1ed70 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
1ed80 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
1ed90 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
1eda0 33 20 2a 2c 20 69 6e 74 29 3b 0a 0a 63 6f 6e 73  3 *, int);..cons
1edb0 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56  t void *sqlite3V
1edc0 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33  alueText(sqlite3
1edd0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e  _value*, u8);.in
1ede0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79  t sqlite3ValueBy
1edf0 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  tes(sqlite3_valu
1ee00 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  e*, u8);.void sq
1ee10 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
1ee20 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
1ee30 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
1ee40 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20   *,u8, .        
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
1ee70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
1ee80 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76  ueFree(sqlite3_v
1ee90 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  alue*);.sqlite3_
1eea0 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61  value *sqlite3Va
1eeb0 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a  lueNew(sqlite3 *
1eec0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1eed0 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
1eee0 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
1eef0 20 69 6e 74 2c 20 75 38 29 3b 0a 23 69 66 64 65   int, u8);.#ifde
1ef00 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1ef10 53 54 41 54 32 0a 63 68 61 72 20 2a 73 71 6c 69  STAT2.char *sqli
1ef20 74 65 33 55 74 66 38 74 6f 31 36 28 73 71 6c 69  te3Utf8to16(sqli
1ef30 74 65 33 20 2a 2c 20 75 38 2c 20 63 68 61 72 20  te3 *, u8, char 
1ef40 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a  *, int, int *);.
1ef50 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
1ef60 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
1ef70 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
1ef80 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
1ef90 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
1efa0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
1efb0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
1efc0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
1efd0 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
1efe0 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
1eff0 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
1f000 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
1f010 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
1f020 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
1f030 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1f040 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
1f050 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
1f060 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1f070 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
1f080 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
1f090 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
1f0a0 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
1f0b0 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
1f0c0 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
1f0d0 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
1f0e0 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  ig;.extern SQLIT
1f0f0 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73  E_WSD FuncDefHas
1f100 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46  h sqlite3GlobalF
1f110 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
1f120 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
1f130 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
1f140 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
1f150 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76  .#endif.#endif.v
1f160 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
1f170 61 67 65 4d 6f 76 65 64 28 44 62 2a 2c 20 69 6e  ageMoved(Db*, in
1f180 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1f190 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
1f1a0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
1f1b0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1f1c0 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
1f1d0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1f1e0 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
1f1f0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
1f200 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
1f210 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
1f220 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
1f230 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
1f240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
1f250 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
1f260 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
1f270 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
1f280 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
1f290 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
1f2a0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
1f2b0 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
1f2c0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
1f2d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1f2e0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
1f2f0 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
1f300 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
1f310 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
1f320 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61  olveExprNames(Na
1f330 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
1f340 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f350 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
1f360 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(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 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
1f3a0 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
1f3b0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
1f3c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1f3d0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
1f3e0 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
1f3f0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
1f400 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
1f410 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
1f420 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
1f430 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
1f440 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
1f450 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
1f460 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
1f470 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
1f480 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 20  llSeq(sqlite3*, 
1f490 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
1f4a0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
1f4b0 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
1f4c0 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
1f4d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f4e0 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
1f4f0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
1f500 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
1f510 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
1f520 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
1f530 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
1f540 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
1f550 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
1f560 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
1f570 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
1f580 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
1f590 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
1f5a0 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
1f5b0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
1f5c0 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
1f5d0 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
1f5e0 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
1f5f0 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
1f600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1f610 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
1f620 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
1f630 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
1f640 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
1f650 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
1f660 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
1f670 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65  lite3MinimumFile
1f680 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69  Format(Parse*, i
1f690 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1f6a0 71 6c 69 74 65 33 53 63 68 65 6d 61 46 72 65 65  qlite3SchemaFree
1f6b0 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
1f6c0 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
1f6d0 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
1f6e0 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
1f6f0 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
1f700 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
1f710 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
1f720 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 4b 65   *sqlite3IndexKe
1f730 79 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c 20 49  yinfo(Parse *, I
1f740 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndex *);.int sql
1f750 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
1f760 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
1f770 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
1f780 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
1f790 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
1f7a0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
1f7b0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
1f7c0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
1f7d0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
1f7e0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
1f7f0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
1f800 33 5f 63 6f 6e 74 65 78 74 2a 29 29 3b 0a 69 6e  3_context*));.in
1f810 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
1f820 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
1f830 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
1f840 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
1f850 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
1f860 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
1f870 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  nit(StrAccum*, c
1f880 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
1f890 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
1f8a0 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
1f8b0 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
1f8c0 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  *,int);.char *sq
1f8d0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
1f8e0 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
1f8f0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
1f900 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
1f910 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
1f920 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
1f930 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
1f940 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
1f950 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
1f960 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
1f970 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
1f980 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
1f990 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
1f9a0 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
1f9b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f9c0 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
1f9d0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
1f9e0 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
1f9f0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  ;../*.** The int
1fa00 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45  erface to the LE
1fa10 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61  MON-generated pa
1fa20 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  rser.*/.void *sq
1fa30 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63  lite3ParserAlloc
1fa40 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74  (void*(*)(size_t
1fa50 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
1fa60 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
1fa70 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
1fa80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1fa90 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
1faa0 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29  , Token, Parse*)
1fab0 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
1fac0 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
1fad0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
1fae0 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
1faf0 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
1fb00 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
1fb10 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
1fb20 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
1fb30 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
1fb40 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
1fb50 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
1fb60 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
1fb70 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1fb80 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
1fb90 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
1fba0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1fbb0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1fbc0 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
1fbd0 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
1fbe0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
1fbf0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
1fc00 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1fc10 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
1fc20 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
1fc30 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1fc40 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
1fc50 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
1fc60 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
1fc70 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1fc80 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1fc90 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
1fca0 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
1fcb0 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
1fcc0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
1fcd0 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
1fce0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
1fcf0 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
1fd00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
1fd10 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
1fd20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
1fd30 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
1fd40 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
1fd50 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20  VtabLock(X) .#  
1fd60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
1fd70 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
1fd80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
1fd90 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
1fda0 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
1fdb0 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
1fdc0 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
1fdd0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
1fde0 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
1fdf0 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a 29  e3 *db, char **)
1fe00 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
1fe10 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c  VtabRollback(sql
1fe20 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e  ite3 *db);.   in
1fe30 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  t sqlite3VtabCom
1fe40 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  mit(sqlite3 *db)
1fe50 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
1fe60 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65  3VtabLock(VTable
1fe70 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
1fe80 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56  ite3VtabUnlock(V
1fe90 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
1fea0 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
1feb0 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a  ockList(sqlite3*
1fec0 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
1fed0 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
1fee0 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
1fef0 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
1ff00 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
1ff10 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
1ff20 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
1ff30 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
1ff40 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
1ff50 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
1ff60 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
1ff70 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1ff80 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
1ff90 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
1ffa0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1ffb0 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
1ffc0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1ffd0 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
1ffe0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
1fff0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
20000 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
20010 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
20020 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
20030 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
20040 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
20050 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
20060 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
20070 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
20080 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
20090 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
200a0 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
200b0 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
200c0 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
200d0 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
200e0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
200f0 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
20100 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
20110 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
20120 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
20130 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
20140 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
20150 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
20160 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
20170 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
20180 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
20190 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
201a0 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
201b0 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
201c0 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t *);.int sqlite
201d0 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
201e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
201f0 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
20200 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
20210 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
20220 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
20230 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
20240 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
20250 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
20260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
20270 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
20280 20 73 71 6c 69 74 65 33 2a 29 3b 0a 56 54 61 62   sqlite3*);.VTab
20290 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
202a0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
202b0 61 62 6c 65 2a 29 3b 0a 63 6f 6e 73 74 20 63 68  able*);.const ch
202c0 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ar *sqlite3Journ
202d0 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b  alModename(int);
202e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
202f0 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
20300 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
20310 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
20320 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
20330 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
20340 3b 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  ;../* Declaratio
20350 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
20360 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
20370 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
20380 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
20390 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
203a0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
203b0 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
203c0 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
203d0 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
203e0 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
203f0 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
20400 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
20410 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
20420 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
20430 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
20440 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
20450 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
20460 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
20470 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
20480 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
20490 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a  ctionality is .*
204a0 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
204b0 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
204c0 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
204d0 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
204e0 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
204f0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
20500 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
20510 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
20520 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
20530 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
20540 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
20550 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
20560 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
20570 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
20580 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
20590 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  t *, Table*);.  
205a0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63  void sqlite3FkAc
205b0 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61  tions(Parse*, Ta
205c0 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ble*, ExprList*,
205d0 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
205e0 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
205f0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
20600 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
20610 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
20620 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
20630 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
20640 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
20650 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
20660 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
20670 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
20680 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  d).  #define sql
20690 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c  ite3FkCheck(a,b,
206a0 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73  c,d).  #define s
206b0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
206c0 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
206d0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
206e0 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 30 0a  ask(a,b)      0.
206f0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
20700 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
20710 63 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a 23 69  c,d) 0.#endif.#i
20720 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
20730 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
20740 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
20750 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
20760 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 20  Table*);.#else. 
20770 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
20780 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 23 65  FkDelete(a,b).#e
20790 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
207a0 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
207b0 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
207c0 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
207d0 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
207e0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
207f0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
20800 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
20810 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
20820 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
20830 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
20840 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
20850 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
20860 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
20870 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
20880 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
20890 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
208a0 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
208b0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
208c0 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  EST.** is not de
208d0 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
208e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
208f0 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69  ILTIN_TEST.  voi
20900 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
20910 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
20920 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
20930 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
20940 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
20950 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
20960 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
20970 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
20980 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
20990 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64 65  oc().#endif..#de
209a0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
209b0 57 49 44 20 20 20 20 20 20 20 20 20 20 20 31 0a  WID           1.
209c0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
209d0 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 20 20  _EPH            
209e0 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e   2.#define IN_IN
209f0 44 45 58 5f 49 4e 44 45 58 20 20 20 20 20 20 20  DEX_INDEX       
20a00 20 20 20 20 33 0a 69 6e 74 20 73 71 6c 69 74 65      3.int sqlite
20a10 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72  3FindInIndex(Par
20a20 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e  se *, Expr *, in
20a30 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  t*);..#ifdef SQL
20a40 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49  ITE_ENABLE_ATOMI
20a50 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71  C_WRITE.  int sq
20a60 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e  lite3JournalOpen
20a70 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
20a80 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71  const char *, sq
20a90 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e  lite3_file *, in
20aa0 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  t, int);.  int s
20ab0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
20ac0 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
20ad0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
20ae0 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c  ournalCreate(sql
20af0 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65  ite3_file *);.#e
20b00 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
20b10 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
20b20 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e  (pVfs) ((pVfs)->
20b30 73 7a 4f 73 46 69 6c 65 29 0a 23 65 6e 64 69 66  szOsFile).#endif
20b40 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ..void sqlite3Me
20b50 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
20b60 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e  ite3_file *);.in
20b70 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  t sqlite3MemJour
20b80 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69  nalSize(void);.i
20b90 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a  nt sqlite3IsMemJ
20ba0 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66  ournal(sqlite3_f
20bb0 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c  ile *);..#if SQL
20bc0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
20bd0 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69  TH>0.  void sqli
20be0 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
20bf0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
20c00 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20  Expr *p);.  int 
20c10 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
20c20 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
20c30 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
20c40 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
20c50 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
20c60 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
20c70 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
20c80 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ht(x,y).  #defin
20c90 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
20ca0 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
20cb0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
20cc0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
20cd0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
20ce0 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
20cf0 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
20d00 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
20d10 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
20d20 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
20d30 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
20d40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
20d50 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
20d60 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
20d70 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
20d80 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
20d90 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
20da0 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
20db0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
20dc0 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
20dd0 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
20de0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
20df0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
20e00 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
20e10 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
20e20 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
20e30 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
20e40 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
20e50 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
20e60 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
20e70 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
20e80 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
20e90 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
20ea0 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
20eb0 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
20ec0 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
20ed0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
20ee0 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
20ef0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
20f00 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
20f10 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
20f20 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
20f30 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a  ing messages. .*
20f40 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
20f50 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23  ENABLE_IOTRACE.#
20f60 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
20f70 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49  A)  if( sqlite3I
20f80 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65  oTrace ){ sqlite
20f90 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20  3IoTrace A; }.  
20fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
20fb0 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a  IOTraceSql(Vdbe*
20fc0 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  );.SQLITE_EXTERN
20fd0 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49   void (*sqlite3I
20fe0 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
20ff0 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
21000 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
21010 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
21020 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
21030 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
21040 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
21050 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
21060 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
21070 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
21080 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
21090 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
210a0 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
210b0 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
210c0 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
210d0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
210e0 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
210f0 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
21100 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
21110 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
21120 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
21130 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
21140 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
21150 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
21160 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
21170 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
21180 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
21190 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
211a0 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
211b0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
211c0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
211d0 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
211e0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
211f0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
21200 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
21210 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
21220 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
21230 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
21240 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
21250 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
21260 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
21270 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
21280 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
21290 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
212a0 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
212b0 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
212c0 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
212d0 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
212e0 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
212f0 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
21300 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
21310 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
21320 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
21330 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
21340 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
21350 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
21360 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
21370 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
21380 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
21390 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
213a0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
213b0 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
213c0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
213d0 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
213e0 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
213f0 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
21400 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
21410 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
21420 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
21430 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
21440 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
21450 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
21460 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
21470 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
21480 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
21490 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
214a0 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
214b0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
214c0 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
214d0 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
214e0 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
214f0 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
21500 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
21510 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
21520 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
21530 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c  raint. .**.** Al
21540 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
21550 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
21560 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
21570 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
21580 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
21590 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
215a0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
215b0 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
215c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
215d0 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
215e0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
215f0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
21600 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
21610 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
21620 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
21630 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
21640 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
21650 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21660 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
21670 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
21680 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
21690 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
216a0 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
216b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
216c0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
216d0 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
216e0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
216f0 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
21700 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
21710 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
21720 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
21730 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
21740 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62 65 65  * Might have bee
21750 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f  n lookaside memo
21760 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ry */.#define ME
21770 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20  MTYPE_SCRATCH   
21780 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63   0x04  /* Scratc
21790 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  h allocations */
217a0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
217b0 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38  _PCACHE     0x08
217c0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
217d0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
217e0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44  define MEMTYPE_D
217f0 42 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  B         0x10  
21800 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65 33 44  /* Uses sqlite3D
21810 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c  bMalloc, not sql
21820 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23  ite_malloc */..#
21830 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45  endif /* _SQLITE
21840 49 4e 54 5f 48 5f 20 2a 2f 0a                    INT_H_ */.