/ Hex Artifact Content
Login

Artifact 45926deaf59b1ce3f55d21d5f91a8cecb6a7eb4c:


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 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a  as 0, 1, or 2..*
1010: 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65  * 0 means mutexe
1020: 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c  s are permanentl
1030: 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68  y disable and th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76  e library is nev
1050: 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65  er.** threadsafe
1060: 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c  .  1 means the l
1070: 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c  ibrary is serial
1080: 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68  ized which is th
1090: 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76  e highest.** lev
10a0: 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65  el of threadsafe
10b0: 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65  ty.  2 means the
10c0: 20 6c 69 62 61 72 79 20 69 73 20 6d 75 6c 74 69   libary is multi
10d0: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
10e0: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
10f0: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
1100: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
1110: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
1120: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
1130: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1140: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
1150: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
1160: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
1170: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
1180: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
1190: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
11a0: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
11b0: 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  gacy..*/.#if !de
11c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
11d0: 45 41 44 53 41 46 45 29 0a 23 69 66 20 64 65 66  EADSAFE).#if def
11e0: 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29  ined(THREADSAFE)
11f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1200: 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45  _THREADSAFE THRE
1210: 41 44 53 41 46 45 0a 23 65 6c 73 65 0a 23 20 64  ADSAFE.#else.# d
1220: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
1230: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
1240: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
1250: 2a 2f 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  */.#endif.#endif
1260: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
1270: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54  TE_DEFAULT_MEMST
1280: 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74 20  ATUS macro must 
1290: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65 69  be defined as ei
12a0: 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 20  ther 0 or 1..** 
12b0: 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  It determines wh
12c0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
12d0: 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74 65   features relate
12e0: 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45 5f  d to .** SQLITE_
12f0: 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53  CONFIG_MEMSTATUS
1300: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62   are available b
1310: 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f 74  y default or not
1320: 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  . This value can
1330: 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64 65  .** be overridde
1340: 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  n at runtime usi
1350: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ng the sqlite3_c
1360: 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f 0a  onfig() API..*/.
1370: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1380: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
1390: 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20  TATUS).# define 
13a0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
13b0: 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69  EMSTATUS 1.#endi
13c0: 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79  f../*.** Exactly
13d0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
13e0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73  owing macros mus
13f0: 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20  t be defined in 
1400: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63  order to.** spec
1410: 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79  ify which memory
1420: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73   allocation subs
1430: 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a  ystem to use..**
1440: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53  .**     SQLITE_S
1450: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20  YSTEM_MALLOC    
1460: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72        // Use nor
1470: 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f  mal system mallo
1480: 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  c().**     SQLIT
1490: 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20  E_MEMDEBUG      
14a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75           // Debu
14b0: 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66  gging version of
14c0: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
14d0: 0a 2a 2a 0a 2a 2a 20 28 48 69 73 74 6f 72 69 63  .**.** (Historic
14e0: 61 6c 20 6e 6f 74 65 3a 20 20 54 68 65 72 65 20  al note:  There 
14f0: 75 73 65 64 20 74 6f 20 62 65 20 73 65 76 65 72  used to be sever
1500: 61 6c 20 6f 74 68 65 72 20 6f 70 74 69 6f 6e 73  al other options
1510: 2c 20 62 75 74 20 77 65 27 76 65 0a 2a 2a 20 70  , but we've.** p
1520: 61 72 65 64 20 69 74 20 64 6f 77 6e 20 74 6f 20  ared it down to 
1530: 6a 75 73 74 20 74 68 65 73 65 20 74 77 6f 2e 29  just these two.)
1540: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
1550: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1560: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
1570: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
1580: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
1590: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
15a0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
15b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 2b 64  SYSTEM_MALLOC)+d
15c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
15d0: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
15e0: 72 20 22 41 74 20 6d 6f 73 74 20 6f 6e 65 20 6f  r "At most one o
15f0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1600: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
1610: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
1620: 6e 73 5c 0a 20 69 73 20 61 6c 6c 6f 77 73 3a 20  ns\. is allows: 
1630: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1640: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d  LLOC, SQLITE_MEM
1650: 44 45 42 55 47 22 0a 23 65 6e 64 69 66 0a 23 69  DEBUG".#endif.#i
1660: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1670: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 2b  _SYSTEM_MALLOC)+
1680: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1690: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
16a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
16b0: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
16c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
16d0: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
16e0: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
16f0: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
1700: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
1710: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
1720: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
1730: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
1740: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
1750: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1760: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1770: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1780: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
1790: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
17a0: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
17b0: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
17c0: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
17d0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
17e0: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
17f0: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
1800: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 2e 20  t Unix systems. 
1810: 20 42 75 74 20 4d 61 63 20 4f 53 20 58 20 69 73   But Mac OS X is
1820: 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2a 20 54   different..** T
1830: 68 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  he _XOPEN_SOURCE
1840: 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70   define causes p
1850: 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20  roblems for Mac 
1860: 4f 53 20 58 20 77 65 20 61 72 65 20 74 6f 6c 64  OS X we are told
1870: 2c 0a 2a 2a 20 73 6f 20 69 74 20 69 73 20 6f 6d  ,.** so it is om
1880: 69 74 74 65 64 20 74 68 65 72 65 2e 20 20 53 65  itted there.  Se
1890: 65 20 74 69 63 6b 65 74 20 23 32 36 37 33 2e 0a  e ticket #2673..
18a0: 2a 2a 0a 2a 2a 20 4c 61 74 65 72 20 77 65 20 6c  **.** Later we l
18b0: 65 61 72 6e 20 74 68 61 74 20 5f 58 4f 50 45 4e  earn that _XOPEN
18c0: 5f 53 4f 55 52 43 45 20 69 73 20 70 6f 6f 72 6c  _SOURCE is poorl
18d0: 79 20 6f 72 20 69 6e 63 6f 72 72 65 63 74 6c 79  y or incorrectly
18e0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  .** implemented 
18f0: 6f 6e 20 73 6f 6d 65 20 73 79 73 74 65 6d 73 2e  on some systems.
1900: 20 20 53 6f 20 77 65 20 61 76 6f 69 64 20 64 65    So we avoid de
1910: 66 69 6e 69 6e 67 20 69 74 20 61 74 20 61 6c 6c  fining it at all
1920: 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61 6c 72  .** if it is alr
1930: 65 61 64 79 20 64 65 66 69 6e 65 64 20 6f 72 20  eady defined or 
1940: 69 66 20 69 74 20 69 73 20 75 6e 6e 65 65 64 65  if it is unneede
1950: 64 20 62 65 63 61 75 73 65 20 77 65 20 61 72 65  d because we are
1960: 0a 2a 2a 20 6e 6f 74 20 64 6f 69 6e 67 20 61 20  .** not doing a 
1970: 74 68 72 65 61 64 73 61 66 65 20 62 75 69 6c 64  threadsafe build
1980: 2e 20 20 54 69 63 6b 65 74 20 23 32 36 38 31 2e  .  Ticket #2681.
1990: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
19a0: 74 69 63 6b 65 74 20 23 32 37 34 31 2e 0a 2a 2f  ticket #2741..*/
19b0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
19c0: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
19d0: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
19e0: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
19f0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 53  (__APPLE__) && S
1a00: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1a10: 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45  .#  define _XOPE
1a20: 4e 5f 53 4f 55 52 43 45 20 35 30 30 20 20 2f 2a  N_SOURCE 500  /*
1a30: 20 4e 65 65 64 65 64 20 74 6f 20 65 6e 61 62 6c   Needed to enabl
1a40: 65 20 70 74 68 72 65 61 64 20 72 65 63 75 72 73  e pthread recurs
1a50: 69 76 65 20 6d 75 74 65 78 65 73 20 2a 2f 0a 23  ive mutexes */.#
1a60: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1a70: 20 54 43 4c 20 68 65 61 64 65 72 73 20 61 72 65   TCL headers are
1a80: 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 77 68 65   only needed whe
1a90: 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20  n compiling the 
1aa0: 54 43 4c 20 62 69 6e 64 69 6e 67 73 2e 0a 2a 2f  TCL bindings..*/
1ab0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1ac0: 49 54 45 5f 54 43 4c 29 20 7c 7c 20 64 65 66 69  ITE_TCL) || defi
1ad0: 6e 65 64 28 54 43 4c 53 48 29 0a 23 20 69 6e 63  ned(TCLSH).# inc
1ae0: 6c 75 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 65 6e  lude <tcl.h>.#en
1af0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6e 79 20  dif../*.** Many 
1b00: 70 65 6f 70 6c 65 20 61 72 65 20 66 61 69 6c 69  people are faili
1b10: 6e 67 20 74 6f 20 73 65 74 20 2d 44 4e 44 45 42  ng to set -DNDEB
1b20: 55 47 3d 31 20 77 68 65 6e 20 63 6f 6d 70 69 6c  UG=1 when compil
1b30: 69 6e 67 20 53 51 4c 69 74 65 2e 0a 2a 2a 20 53  ing SQLite..** S
1b40: 65 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61  etting NDEBUG ma
1b50: 6b 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61  kes the code sma
1b60: 6c 6c 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73  ller and run fas
1b70: 74 65 72 2e 20 20 53 6f 20 74 68 65 20 66 6f 6c  ter.  So the fol
1b80: 6c 6f 77 69 6e 67 0a 2a 2a 20 6c 69 6e 65 73 20  lowing.** lines 
1b90: 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 75 74  are added to aut
1ba0: 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 74 20 4e  omatically set N
1bb0: 44 45 42 55 47 20 75 6e 6c 65 73 73 20 74 68 65  DEBUG unless the
1bc0: 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47 3d   -DSQLITE_DEBUG=
1bd0: 31 0a 2a 2a 20 6f 70 74 69 6f 6e 20 69 73 20 73  1.** option is s
1be0: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
1bf0: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
1c00: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
1c10: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
1c20: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
1c30: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1c40: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1c50: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
1c60: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
1c70: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73  f../*.** The tes
1c80: 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73  tcase() macro is
1c90: 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e 20   used to aid in 
1ca0: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
1cb0: 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e  .  When .** doin
1cc0: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
1cd0: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
1ce0: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
1cf0: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
1d00: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
1d10: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
1d20: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
1d30: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
1d40: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
1d50: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
1d60: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
1d70: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
1d80: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
1d90: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
1da0: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
1db0: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
1dc0: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
1dd0: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
1de0: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
1df0: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
1e00: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
1e10: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
1e20: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
1e30: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
1e40: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
1e50: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
1e60: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
1e70: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
1e80: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
1e90: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
1ea0: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
1eb0: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
1ec0: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
1ed0: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
1ee0: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
1ef0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
1f00: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
1f10: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
1f20: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
1f30: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
1f40: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
1f50: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
1f60: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
1f70: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
1f80: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
1f90: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
1fa0: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
1fb0: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
1fc0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1fd0: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
1fe0: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
1ff0: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
2000: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
2010: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
2020: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
2030: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
2040: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
2050: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
2060: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
2070: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
2080: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
2090: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
20a0: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
20b0: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
20c0: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
20d0: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
20e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
20f0: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
2100: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
2110: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
2120: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
2130: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
2140: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
2150: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
2160: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
2170: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
2180: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
2190: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
21a0: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
21b0: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
21c0: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
21d0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
21e0: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
21f0: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
2200: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
2210: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
2220: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
2230: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
2240: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
2250: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
2260: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
2270: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
2280: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
2290: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
22a0: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
22b0: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
22c0: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
22d0: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
22e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
22f0: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
2300: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
2310: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
2320: 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a 2a 20 61  ions which .** a
2330: 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61  re intended to a
2340: 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72  lways be true or
2350: 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69   false, respecti
2360: 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65  vely.  Such.** e
2370: 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64  xpressions could
2380: 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   be omitted from
2390: 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65   the code comple
23a0: 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a  tely.  But they.
23b0: 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ** are included 
23c0: 69 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69  in a few cases i
23d0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e  n order to enhan
23e0: 63 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63  ce the resilienc
23f0: 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74  e.** of SQLite t
2400: 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68  o unexpected beh
2410: 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20  avior - to make 
2420: 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68  the code "self-h
2430: 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64  ealing".** or "d
2440: 75 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74  uctile" rather t
2450: 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74  han being "britt
2460: 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67  le" and crashing
2470: 20 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   at the first.**
2480: 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e   hint of unplann
2490: 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a  ed behavior..**.
24a0: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
24b0: 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  s, ALWAYS and NE
24c0: 56 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f  VER are added fo
24d0: 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65  r defensive code
24e0: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69  ..**.** When doi
24f0: 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  ng coverage test
2500: 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  ing ALWAYS and N
2510: 45 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f  EVER are hard-co
2520: 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75  ded to.** be tru
2530: 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74  e and false so t
2540: 68 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61  hat the unreacha
2550: 62 6c 65 20 63 6f 64 65 20 74 68 65 6e 20 73 70  ble code then sp
2560: 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  ecify will.** no
2570: 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20  t be counted as 
2580: 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a  untested code..*
2590: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
25a0: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
25b0: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
25c0: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
25d0: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
25e0: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
25f0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
2600: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
2610: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
2620: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
2630: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
2640: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
2650: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
2660: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
2670: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
2680: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
2690: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
26a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
26b0: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
26c0: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
26d0: 73 20 61 20 69 6e 74 65 67 65 72 20 74 68 61 74  s a integer that
26e0: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a   is too large.**
26f0: 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62 69   to fit in 32-bi
2700: 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20  ts.  This macro 
2710: 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
2720: 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63 61  f various testca
2730: 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20 74  se().** macros t
2740: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77 65  o verify that we
2750: 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51 4c   have tested SQL
2760: 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66 69  ite for large-fi
2770: 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23  le support..*/.#
2780: 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49 4e  define IS_BIG_IN
2790: 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69 36  T(X)  (((X)&~(i6
27a0: 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d 30  4)0xffffffff)!=0
27b0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 63  )../*.** The mac
27c0: 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69 73  ro unlikely() is
27d0: 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75 72   a hint that sur
27e0: 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61 6e  rounds a boolean
27f0: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 74  .** expression t
2800: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 66  hat is usually f
2810: 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69 6b  alse.  Macro lik
2820: 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73 0a  ely() surrounds.
2830: 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ** a boolean exp
2840: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
2850: 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20 47  usually true.  G
2860: 43 43 20 69 73 20 61 62 6c 65 20 74 6f 0a 2a 2a  CC is able to.**
2870: 20 75 73 65 20 74 68 65 73 65 20 68 69 6e 74 73   use these hints
2880: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
2890: 74 65 72 20 63 6f 64 65 2c 20 73 6f 6d 65 74 69  ter code, someti
28a0: 6d 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  mes..*/.#if defi
28b0: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26  ned(__GNUC__) &&
28c0: 20 30 0a 23 20 64 65 66 69 6e 65 20 6c 69 6b 65   0.# define like
28d0: 6c 79 28 58 29 20 20 20 20 5f 5f 62 75 69 6c 74  ly(X)    __built
28e0: 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c 31 29  in_expect((X),1)
28f0: 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  .# define unlike
2900: 6c 79 28 58 29 20 20 5f 5f 62 75 69 6c 74 69 6e  ly(X)  __builtin
2910: 5f 65 78 70 65 63 74 28 28 58 29 2c 30 29 0a 23  _expect((X),0).#
2920: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6c 69  else.# define li
2930: 6b 65 6c 79 28 58 29 20 20 20 20 21 21 28 58 29  kely(X)    !!(X)
2940: 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65  .# define unlike
2950: 6c 79 28 58 29 20 20 21 21 28 58 29 0a 23 65 6e  ly(X)  !!(X).#en
2960: 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73  dif..#include "s
2970: 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e 63 6c 75  qlite3.h".#inclu
2980: 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63  de "hash.h".#inc
2990: 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23  lude "parse.h".#
29a0: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
29b0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
29c0: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
29d0: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
29e0: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
29f0: 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68  nclude <stddef.h
2a00: 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  >../*.** If comp
2a10: 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63  iling for a proc
2a20: 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73  essor that lacks
2a30: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
2a40: 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73  support,.** subs
2a50: 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66  titute integer f
2a60: 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e  or floating-poin
2a70: 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  t.*/.#ifdef SQLI
2a80: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
2a90: 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20  _POINT.# define 
2aa0: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e  double sqlite_in
2ab0: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f  t64.# define flo
2ac0: 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  at sqlite_int64.
2ad0: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
2ae0: 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f  BLE_TYPE sqlite_
2af0: 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53  int64.# ifndef S
2b00: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
2b10: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2b20: 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74  BIG_DBL (((sqlit
2b30: 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29  e3_int64)1)<<50)
2b40: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
2b50: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41  e SQLITE_OMIT_DA
2b60: 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23  TETIME_FUNCS 1.#
2b70: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
2b80: 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e  MIT_TRACE 1.# un
2b90: 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44  def SQLITE_MIXED
2ba0: 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c  _ENDIAN_64BIT_FL
2bb0: 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  OAT.# undef SQLI
2bc0: 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65  TE_HAVE_ISNAN.#e
2bd0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2be0: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65  ITE_BIG_DBL.# de
2bf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
2c00: 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69  DBL (1e99).#endi
2c10: 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45  f../*.** OMIT_TE
2c20: 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31  MPDB is set to 1
2c30: 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   if SQLITE_OMIT_
2c40: 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65  TEMPDB is define
2c50: 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72  d, or 0.** after
2c60: 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69  ward. Having thi
2c70: 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75  s macro allows u
2c80: 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43  s to cause the C
2c90: 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f   compiler .** to
2ca0: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
2cb0: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
2cc0: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
2cd0: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
2ce0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2cf0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
2d00: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
2d10: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
2d20: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
2d30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2d40: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
2d50: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
2d60: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
2d70: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
2d80: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
2d90: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
2da0: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
2db0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
2dc0: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
2dd0: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
2de0: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
2df0: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
2e00: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
2e10: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
2e20: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
2e30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
2e40: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
2e50: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
2e60: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
2e70: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
2e80: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2e90: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 31 0a 23 65  FILE_FORMAT 1.#e
2ea0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
2eb0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
2ec0: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
2ed0: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
2ee0: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
2ef0: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
2f00: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
2f10: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
2f20: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
2f30: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
2f40: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
2f50: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
2f60: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
2f70: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
2f80: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
2f90: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
2fa0: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
2fb0: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
2fc0: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
2fd0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
2fe0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ff0: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
3000: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
3010: 53 54 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a  STORE 1.#endif..
3020: 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e  /*.** GCC does n
3030: 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66  ot define the of
3040: 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73  fsetof() macro s
3050: 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20  o we'll have to 
3060: 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76  do it.** ourselv
3070: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f  es..*/.#ifndef o
3080: 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20  ffsetof.#define 
3090: 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54 55  offsetof(STRUCTU
30a0: 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29  RE,FIELD) ((int)
30b0: 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55 43  ((char*)&((STRUC
30c0: 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29  TURE*)0)->FIELD)
30d0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
30e0: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
30f0: 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65  this machine use
3100: 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c  s EBCDIC.  (Yes,
3110: 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a   believe it or.*
3120: 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65  * not, there are
3130: 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20   still machines 
3140: 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75  out there that u
3150: 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23  se EBCDIC.).*/.#
3160: 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27  if 'A' == '\301'
3170: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3180: 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a  _EBCDIC 1.#else.
3190: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
31a0: 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a  ASCII 1.#endif..
31b0: 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f  /*.** Integers o
31c0: 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20  f known sizes.  
31d0: 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d  These typedefs m
31e0: 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20  ight change for 
31f0: 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a  architectures.**
3200: 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73   where the sizes
3210: 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65   very.  Preproce
3220: 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20  ssor macros are 
3230: 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61  available so tha
3240: 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63  t the.** types c
3250: 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74  an be convenient
3260: 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20  ly redefined at 
3270: 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c  compile-type.  L
3280: 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
3290: 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49          cc '-DUI
32a0: 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20  NTPTR_TYPE=long 
32b0: 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f  long int' ....*/
32c0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f  .#ifndef UINT32_
32d0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
32e0: 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65  E_UINT32_T.#  de
32f0: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
3300: 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65   uint32_t.# else
3310: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
3320: 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  2_TYPE unsigned 
3330: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
3340: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31  if.#ifndef UINT1
3350: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
3360: 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20  AVE_UINT16_T.#  
3370: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
3380: 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c  PE uint16_t.# el
3390: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
33a0: 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T16_TYPE unsigne
33b0: 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  d short int.# en
33c0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
33d0: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  ef INT16_TYPE.# 
33e0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36  ifdef HAVE_INT16
33f0: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
3400: 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a  16_TYPE int16_t.
3410: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
3420: 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72   INT16_TYPE shor
3430: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
3440: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
3450: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
3460: 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20  HAVE_UINT8_T.#  
3470: 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50  define UINT8_TYP
3480: 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  E uint8_t.# else
3490: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
34a0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63  _TYPE unsigned c
34b0: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
34c0: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f  if.#ifndef INT8_
34d0: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
34e0: 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69  E_INT8_T.#  defi
34f0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74  ne INT8_TYPE int
3500: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
3510: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73  fine INT8_TYPE s
3520: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
3530: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
3540: 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  f LONGDOUBLE_TYP
3550: 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  E.# define LONGD
3560: 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20  OUBLE_TYPE long 
3570: 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79  double.#endif.ty
3580: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74  pedef sqlite_int
3590: 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20  64 i64;         
35a0: 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65   /* 8-byte signe
35b0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
35c0: 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74  edef sqlite_uint
35d0: 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20  64 u64;         
35e0: 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 8-byte unsign
35f0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3600: 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  pedef UINT32_TYP
3610: 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20  E u32;          
3620: 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67   /* 4-byte unsig
3630: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3640: 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ypedef UINT16_TY
3650: 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20  PE u16;         
3660: 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69    /* 2-byte unsi
3670: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3680: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
3690: 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20  PE i16;         
36a0: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67     /* 2-byte sig
36b0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
36c0: 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ypedef UINT8_TYP
36d0: 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20  E u8;           
36e0: 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69    /* 1-byte unsi
36f0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3700: 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50  typedef INT8_TYP
3710: 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20  E i8;           
3720: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67     /* 1-byte sig
3730: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a  ned integer */..
3740: 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58  /*.** SQLITE_MAX
3750: 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f  _U32 is a u64 co
3760: 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74  nstant that is t
3770: 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76  he maximum u64 v
3780: 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e  alue.** that can
3790: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
37a0: 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73  u32 without loss
37b0: 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76   of data.  The v
37c0: 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30  alue.** is 0x000
37d0: 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20  00000ffffffff.  
37e0: 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71  But because of q
37f0: 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f  uirks of some co
3800: 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68  mpilers, we.** h
3810: 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74  ave to specify t
3820: 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  he value in the 
3830: 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d  less intuitive m
3840: 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a  anner shown:.*/.
3850: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
3860: 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29  AX_U32  ((((u64)
3870: 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a  1)<<32)-1)../*.*
3880: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
3890: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
38a0: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
38b0: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
38c0: 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65 64 20  n,.** evaluated 
38d0: 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23  at runtime..*/.#
38e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
38f0: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
3900: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
3910: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
3920: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
3930: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
3940: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
3950: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
3960: 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  6__) || defined(
3970: 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20 20 20  _M_IX86)\.      
3980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3990: 20 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65         || define
39a0: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
39b0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
39c0: 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
39d0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
39e0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
39f0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
3a00: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3a10: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
3a20: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c  LITE_UTF16LE.#el
3a30: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
3a40: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
3a50: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
3a60: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
3a70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
3a80: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
3a90: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
3aa0: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
3ab0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
3ac0: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
3ad0: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
3ae0: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
3af0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3b00: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
3b10: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
3b20: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
3b30: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
3b40: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
3b50: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
3b60: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
3b70: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
3b80: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
3b90: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
3ba0: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
3bb0: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
3bc0: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
3bd0: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
3be0: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
3bf0: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
3c00: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
3c10: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
3c20: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
3c30: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
3c40: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
3c50: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
3c60: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
3c70: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
3c80: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
3c90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
3ca0: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
3cb0: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
3cc0: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
3cd0: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
3ce0: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
3cf0: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
3d00: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
3d10: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
3d20: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
3d30: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
3d40: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
3d50: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
3d60: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
3d70: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
3d80: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
3d90: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
3da0: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
3db0: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
3dc0: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
3dd0: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
3de0: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
3df0: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
3e00: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
3e10: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
3e20: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
3e30: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
3e40: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
3e50: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
3e60: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
3e70: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
3e80: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
3e90: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
3ea0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
3eb0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
3ec0: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
3ed0: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
3ee0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
3ef0: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
3f00: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
3f10: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
3f20: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
3f30: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
3f40: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
3f50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
3f60: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
3f70: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
3f80: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
3f90: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
3fa0: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a  sqlite handle. .
3fb0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  **.** The sqlite
3fc0: 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d  .busyHandler mem
3fd0: 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ber of the sqlit
3fe0: 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e  e struct contain
3ff0: 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61  s the busy.** ca
4000: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64  llback for the d
4010: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
4020: 45 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65  Each pager opene
4030: 64 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  d via the sqlite
4040: 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61  .** handle is pa
4050: 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74  ssed a pointer t
4060: 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e  o sqlite.busyHan
4070: 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68  dler. The busy-h
4080: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
4090: 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ck is currently 
40a0: 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f  invoked only fro
40b0: 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63  m within pager.c
40c0: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
40d0: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
40e0: 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72  BusyHandler;.str
40f0: 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20  uct BusyHandler 
4100: 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29  {.  int (*xFunc)
4110: 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f  (void *,int);  /
4120: 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62  * The busy callb
4130: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
4140: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
4150: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
4160: 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63   to busy callbac
4170: 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79  k */.  int nBusy
4180: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4190: 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64    /* Incremented
41a0: 20 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20   with each busy 
41b0: 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  call */.};../*.*
41c0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61  * Name of the ma
41d0: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
41e0: 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72  ble.  The master
41f0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a   database table.
4200: 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  ** is a special 
4210: 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73  table that holds
4220: 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61   the names and a
4230: 74 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c  ttributes of all
4240: 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20  .** user tables 
4250: 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a  and indices..*/.
4260: 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e  #define MASTER_N
4270: 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74  AME       "sqlit
4280: 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e  e_master".#defin
4290: 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  e TEMP_MASTER_NA
42a0: 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70  ME  "sqlite_temp
42b0: 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20  _master"../*.** 
42c0: 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  The root-page of
42d0: 20 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61   the master data
42e0: 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  base table..*/.#
42f0: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f  define MASTER_RO
4300: 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  OT       1../*.*
4310: 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
4320: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a  e schema table..
4330: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
4340: 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f  A_TABLE(x)  ((!O
4350: 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d  MIT_TEMPDB)&&(x=
4360: 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f  =1)?TEMP_MASTER_
4370: 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45  NAME:MASTER_NAME
4380: 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65  )../*.** A conve
4390: 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61  nience macro tha
43a0: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  t returns the nu
43b0: 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
43c0: 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e   in.** an array.
43d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61  .*/.#define Arra
43e0: 79 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e  ySize(X)    ((in
43f0: 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a  t)(sizeof(X)/siz
4400: 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a  eof(X[0])))../*.
4410: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4420: 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74   value as a dest
4430: 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20  ructor means to 
4440: 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  use sqlite3DbFre
4450: 65 28 29 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  e()..** This is 
4460: 61 6e 20 69 6e 74 65 72 6e 61 6c 20 65 78 74 65  an internal exte
4470: 6e 73 69 6f 6e 20 74 6f 20 53 51 4c 49 54 45 5f  nsion to SQLITE_
4480: 53 54 41 54 49 43 20 61 6e 64 20 53 51 4c 49 54  STATIC and SQLIT
4490: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
44a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
44b0: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
44c0: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
44d0: 70 65 29 73 71 6c 69 74 65 33 44 62 46 72 65 65  pe)sqlite3DbFree
44e0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
44f0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
4500: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
4510: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
4520: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
4530: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
4540: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
4550: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
4560: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
4570: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
4580: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
4590: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
45a0: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
45b0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
45c0: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
45d0: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
45e0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
45f0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
4600: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
4610: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
4620: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
4630: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
4640: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
4650: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
4660: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
4670: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
4680: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
4690: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
46a0: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
46b0: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
46c0: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
46d0: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
46e0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
46f0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
4700: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
4710: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
4720: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
4730: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
4740: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
4750: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
4760: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
4770: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
4780: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
4790: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
47a0: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
47b0: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
47c0: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
47d0: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
47e0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
47f0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
4800: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
4810: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
4820: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
4830: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
4840: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
4850: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
4860: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
4870: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
4880: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
4890: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
48a0: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
48b0: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
48c0: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
48d0: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
48e0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
48f0: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
4900: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
4910: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
4920: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
4930: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
4940: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
4950: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
4960: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
4970: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
4980: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
4990: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
49a0: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
49b0: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
49c0: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
49d0: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders when a fun
49e0: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
49f0: 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
4a00: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
4a10: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
4a20: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
4a30: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
4a40: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
4a50: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
4a60: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
4a70: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
4a80: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
4a90: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
4aa0: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
4ab0: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
4ac0: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
4ad0: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
4ae0: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
4af0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
4b00: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
4b10: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
4b20: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
4b30: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
4b40: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
4b50: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
4b60: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
4b70: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
4b80: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
4b90: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
4ba0: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
4bb0: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
4bc0: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
4bd0: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
4be0: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
4bf0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
4c00: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
4c10: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
4c20: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
4c30: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
4c40: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
4c50: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
4c60: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
4c70: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
4c80: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
4c90: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
4ca0: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
4cb0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
4cc0: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
4cd0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
4ce0: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
4cf0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
4d00: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
4d10: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
4d20: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
4d30: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
4d40: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
4d50: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
4d60: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
4d70: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
4d80: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
4d90: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
4da0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
4db0: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
4dc0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
4dd0: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
4de0: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
4df0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
4e00: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
4e10: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
4e20: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
4e30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4e40: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
4e50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4e60: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
4e70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
4e80: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
4e90: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
4ea0: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
4eb0: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
4ec0: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
4ed0: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
4ee0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
4ef0: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
4f00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4f10: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
4f20: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
4f30: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
4f40: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
4f50: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
4f60: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
4f70: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
4f80: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
4f90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
4fa0: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
4fb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
4fc0: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
4fd0: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
4fe0: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
4ff0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
5000: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
5010: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
5020: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
5030: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
5040: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
5050: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
5060: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
5070: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
5080: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
5090: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
50a0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
50b0: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
50c0: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
50d0: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
50e0: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
50f0: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
5100: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
5110: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
5120: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
5130: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
5140: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
5150: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
5160: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
5170: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
5180: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
5190: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
51a0: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
51b0: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
51c0: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
51d0: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
51e0: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
51f0: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
5200: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
5210: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
5220: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
5230: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
5240: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
5250: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
5260: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
5270: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
5280: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5290: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
52a0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
52b0: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
52c0: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
52d0: 65 50 6c 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b  ePlan WherePlan;
52e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
52f0: 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49  WhereInfo WhereI
5300: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
5310: 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 57  uct WhereLevel W
5320: 68 65 72 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a  hereLevel;../*.*
5330: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
5340: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
5350: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
5360: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
5370: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
5380: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
5390: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
53a0: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
53b0: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
53c0: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
53d0: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
53e0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
53f0: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
5400: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
5410: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
5420: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
5430: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
5440: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
5450: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
5460: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
5470: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
5480: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
5490: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
54a0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
54b0: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
54c0: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
54d0: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
54e0: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
54f0: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
5500: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
5510: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
5520: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
5530: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
5540: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
5550: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
5560: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
5570: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
5580: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
5590: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
55a0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
55b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
55c0: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
55d0: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
55e0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
55f0: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
5600: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
5610: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
5620: 38 20 69 6e 54 72 61 6e 73 3b 20 20 20 20 20 20  8 inTrans;      
5630: 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72      /* 0: not wr
5640: 69 74 61 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e  itable.  1: Tran
5650: 73 61 63 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65  saction.  2: Che
5660: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20  ckpoint */.  u8 
5670: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20  safety_level;   
5680: 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73    /* How aggress
5690: 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64  ive at syncing d
56a0: 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20  ata to disk */. 
56b0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
56c0: 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ;     /* Pointer
56d0: 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68   to database sch
56e0: 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68  ema (possibly sh
56f0: 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ared) */.};../*.
5700: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
5710: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
5720: 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73  structure stores
5730: 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65   a database sche
5740: 6d 61 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ma..*/.struct Sc
5750: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
5760: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
5770: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
5780: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
5790: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
57a0: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
57b0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
57c0: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
57d0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
57e0: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
57f0: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
5800: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
5810: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
5820: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
5830: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
5840: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
5850: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
5860: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
5870: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
5880: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
5890: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
58a0: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
58b0: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
58c0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
58d0: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
58e0: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
58f0: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
5900: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
5910: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
5920: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
5930: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
5940: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
5950: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
5960: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
5970: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
5980: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
5990: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
59a0: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
59b0: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
59c0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
59d0: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
59e0: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
59f0: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
5a00: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
5a10: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
5a20: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
5a30: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
5a40: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
5a50: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
5a60: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
5a70: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
5a80: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50  Schema->flags&(P
5a90: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
5aa0: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
5ab0: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
5ac0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
5ad0: 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
5ae0: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
5af0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
5b00: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
5b10: 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29  hema->flags|=(P)
5b20: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
5b30: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
5b40: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
5b50: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28  chema->flags&=~(
5b60: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
5b70: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
5b80: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
5b90: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
5ba0: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
5bb0: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
5bc0: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
5bd0: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
5be0: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
5bf0: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
5c00: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
5c10: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
5c20: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
5c30: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
5c40: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
5c50: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
5c60: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
5c70: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
5c80: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
5c90: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
5ca0: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
5cb0: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
5cc0: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
5cd0: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
5ce0: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
5cf0: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
5d00: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
5d10: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
5d20: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
5d30: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
5d40: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
5d50: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
5d60: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
5d70: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
5d80: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
5d90: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
5da0: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
5db0: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
5dc0: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
5dd0: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
5de0: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
5df0: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
5e00: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
5e10: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
5e20: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
5e30: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
5e40: 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29  TRIGGER_DEPTH+1)
5e50: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
5e60: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
5e70: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
5e80: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
5e90: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
5ea0: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
5eb0: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
5ec0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
5ed0: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
5ee0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
5ef0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
5f00: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5f10: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
5f20: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
5f30: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
5f40: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
5f50: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
5f60: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
5f70: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
5f80: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
5f90: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
5fa0: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
5fb0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
5fc0: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
5fd0: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
5fe0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
5ff0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
6000: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
6010: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
6020: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
6030: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
6040: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
6050: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
6060: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
6070: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
6080: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
6090: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
60a0: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
60b0: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
60c0: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
60d0: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
60e0: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
60f0: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
6100: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
6110: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
6120: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
6130: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
6140: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
6150: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
6160: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
6170: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
6180: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
6190: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
61a0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
61b0: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
61c0: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
61d0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
61e0: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
61f0: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
6200: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
6210: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
6220: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
6230: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
6240: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
6250: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
6260: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
6270: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
6280: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
6290: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
62a0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
62b0: 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20   bEnabled;      
62c0: 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74        /* False t
62d0: 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f  o disable new lo
62e0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
62f0: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  ons */.  u8 bMal
6300: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
6310: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
6320: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
6330: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
6340: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b  ) */.  int nOut;
6350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6360: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66  * Number of buff
6370: 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68  ers currently ch
6380: 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69  ecked out */.  i
6390: 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20  nt mxOut;       
63a0: 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61         /* Highwa
63b0: 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75  ter mark for nOu
63c0: 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61  t */.  int anSta
63d0: 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  t[3];          /
63e0: 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73  * 0: hits.  1: s
63f0: 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20  ize misses.  2: 
6400: 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20  full misses */. 
6410: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
6420: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
6430: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
6440: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
6450: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
6460: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
6470: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
6480: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
6490: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
64a0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
64b0: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
64c0: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
64d0: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
64e0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
64f0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
6500: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
6510: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
6520: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
6530: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
6540: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
6550: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  or function defi
6560: 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48  nitions..**.** H
6570: 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66  ash each FuncDef
6580: 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20   structure into 
6590: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
65a0: 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73  efHash.a[] slots
65b0: 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20  ..** Collisions 
65c0: 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44  are on the FuncD
65d0: 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  ef.pHash chain..
65e0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
65f0: 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65  fHash {.  FuncDe
6600: 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20  f *a[23];       
6610: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
6620: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
6630: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  ;../*.** Each da
6640: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
6650: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
6660: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
6670: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
6680: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 6c 61  ** The sqlite.la
6690: 73 74 52 6f 77 69 64 20 72 65 63 6f 72 64 73 20  stRowid records 
66a0: 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
66b0: 72 6f 77 69 64 20 67 65 6e 65 72 61 74 65 64 20  rowid generated 
66c0: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 65 72 74 20  by an.** insert 
66d0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 73 65  statement.  Inse
66e0: 72 74 73 20 6f 6e 20 76 69 65 77 73 20 64 6f 20  rts on views do 
66f0: 6e 6f 74 20 61 66 66 65 63 74 20 69 74 73 20 76  not affect its v
6700: 61 6c 75 65 2e 20 20 45 61 63 68 0a 2a 2a 20 74  alue.  Each.** t
6710: 72 69 67 67 65 72 20 68 61 73 20 69 74 73 20 6f  rigger has its o
6720: 77 6e 20 63 6f 6e 74 65 78 74 2c 20 73 6f 20 74  wn context, so t
6730: 68 61 74 20 6c 61 73 74 52 6f 77 69 64 20 63 61  hat lastRowid ca
6740: 6e 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 73  n be updated ins
6750: 69 64 65 0a 2a 2a 20 74 72 69 67 67 65 72 73 20  ide.** triggers 
6760: 61 73 20 75 73 75 61 6c 2e 20 20 54 68 65 20 70  as usual.  The p
6770: 72 65 76 69 6f 75 73 20 76 61 6c 75 65 20 77 69  revious value wi
6780: 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f  ll be restored o
6790: 6e 63 65 20 74 68 65 20 74 72 69 67 67 65 72 0a  nce the trigger.
67a0: 2a 2a 20 65 78 69 74 73 2e 20 20 55 70 6f 6e 20  ** exits.  Upon 
67b0: 65 6e 74 65 72 69 6e 67 20 61 20 62 65 66 6f 72  entering a befor
67c0: 65 20 6f 72 20 69 6e 73 74 65 61 64 20 6f 66 20  e or instead of 
67d0: 74 72 69 67 67 65 72 2c 20 6c 61 73 74 52 6f 77  trigger, lastRow
67e0: 69 64 20 69 73 20 6e 6f 0a 2a 2a 20 6c 6f 6e 67  id is no.** long
67f0: 65 72 20 28 73 69 6e 63 65 20 61 66 74 65 72 20  er (since after 
6800: 76 65 72 73 69 6f 6e 20 32 2e 38 2e 31 32 29 20  version 2.8.12) 
6810: 72 65 73 65 74 20 74 6f 20 2d 31 2e 0a 2a 2a 0a  reset to -1..**.
6820: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 6e 43  ** The sqlite.nC
6830: 68 61 6e 67 65 20 64 6f 65 73 20 6e 6f 74 20 63  hange does not c
6840: 6f 75 6e 74 20 63 68 61 6e 67 65 73 20 77 69 74  ount changes wit
6850: 68 69 6e 20 74 72 69 67 67 65 72 73 20 61 6e 64  hin triggers and
6860: 20 6b 65 65 70 73 20 6e 6f 0a 2a 2a 20 63 6f 6e   keeps no.** con
6870: 74 65 78 74 2e 20 20 49 74 20 69 73 20 72 65 73  text.  It is res
6880: 65 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 73  et at start of s
6890: 71 6c 69 74 65 33 5f 65 78 65 63 2e 0a 2a 2a 20  qlite3_exec..** 
68a0: 54 68 65 20 73 71 6c 69 74 65 2e 6c 73 43 68 61  The sqlite.lsCha
68b0: 6e 67 65 20 72 65 70 72 65 73 65 6e 74 73 20 74  nge represents t
68c0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  he number of cha
68d0: 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 65  nges made by the
68e0: 20 6c 61 73 74 0a 2a 2a 20 69 6e 73 65 72 74 2c   last.** insert,
68f0: 20 75 70 64 61 74 65 2c 20 6f 72 20 64 65 6c 65   update, or dele
6900: 74 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  te statement.  I
6910: 74 20 72 65 6d 61 69 6e 73 20 63 6f 6e 73 74 61  t remains consta
6920: 6e 74 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68  nt throughout th
6930: 65 0a 2a 2a 20 6c 65 6e 67 74 68 20 6f 66 20 61  e.** length of a
6940: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 69   statement and i
6950: 73 20 74 68 65 6e 20 75 70 64 61 74 65 64 20 62  s then updated b
6960: 79 20 4f 50 5f 53 65 74 43 6f 75 6e 74 73 2e 20  y OP_SetCounts. 
6970: 20 49 74 20 6b 65 65 70 73 20 61 0a 2a 2a 20 63   It keeps a.** c
6980: 6f 6e 74 65 78 74 20 73 74 61 63 6b 20 6a 75 73  ontext stack jus
6990: 74 20 6c 69 6b 65 20 6c 61 73 74 52 6f 77 69 64  t like lastRowid
69a0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 6f 75   so that the cou
69b0: 6e 74 20 6f 66 20 63 68 61 6e 67 65 73 0a 2a 2a  nt of changes.**
69c0: 20 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65   within a trigge
69d0: 72 20 69 73 20 6e 6f 74 20 73 65 65 6e 20 6f 75  r is not seen ou
69e0: 74 73 69 64 65 20 74 68 65 20 74 72 69 67 67 65  tside the trigge
69f0: 72 2e 20 20 43 68 61 6e 67 65 73 20 74 6f 20 76  r.  Changes to v
6a00: 69 65 77 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 61  iews do not.** a
6a10: 66 66 65 63 74 20 74 68 65 20 76 61 6c 75 65 20  ffect the value 
6a20: 6f 66 20 6c 73 43 68 61 6e 67 65 2e 0a 2a 2a 20  of lsChange..** 
6a30: 54 68 65 20 73 71 6c 69 74 65 2e 63 73 43 68 61  The sqlite.csCha
6a40: 6e 67 65 20 6b 65 65 70 73 20 74 72 61 63 6b 20  nge keeps track 
6a50: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
6a60: 20 63 75 72 72 65 6e 74 20 63 68 61 6e 67 65 73   current changes
6a70: 20 28 73 69 6e 63 65 0a 2a 2a 20 74 68 65 20 6c   (since.** the l
6a80: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 29 20 61  ast statement) a
6a90: 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 75 70  nd is used to up
6aa0: 64 61 74 65 20 73 71 6c 69 74 65 5f 6c 73 43 68  date sqlite_lsCh
6ab0: 61 6e 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ange..**.** The 
6ac0: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73  member variables
6ad0: 20 73 71 6c 69 74 65 2e 65 72 72 43 6f 64 65 2c   sqlite.errCode,
6ae0: 20 73 71 6c 69 74 65 2e 7a 45 72 72 4d 73 67 20   sqlite.zErrMsg 
6af0: 61 6e 64 20 73 71 6c 69 74 65 2e 7a 45 72 72 4d  and sqlite.zErrM
6b00: 73 67 31 36 0a 2a 2a 20 73 74 6f 72 65 20 74 68  sg16.** store th
6b10: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  e most recent er
6b20: 72 6f 72 20 63 6f 64 65 20 61 6e 64 2c 20 69 66  ror code and, if
6b30: 20 61 70 70 6c 69 63 61 62 6c 65 2c 20 73 74 72   applicable, str
6b40: 69 6e 67 2e 20 54 68 65 0a 2a 2a 20 69 6e 74 65  ing. The.** inte
6b50: 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 73 71  rnal function sq
6b60: 6c 69 74 65 33 45 72 72 6f 72 28 29 20 69 73 20  lite3Error() is 
6b70: 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 73  used to set thes
6b80: 65 20 76 61 72 69 61 62 6c 65 73 0a 2a 2a 20 63  e variables.** c
6b90: 6f 6e 73 69 73 74 65 6e 74 6c 79 2e 0a 2a 2f 0a  onsistently..*/.
6ba0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
6bb0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
6bc0: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
6bd0: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
6be0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
6bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c00: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
6c10: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
6c20: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
6c30: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6c50: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
6c60: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c80: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75   /* Miscellaneou
6c90: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
6ca0: 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 65 6e  ow */.  int open
6cb0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
6cc0: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70        /* Flags p
6cd0: 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33  assed to sqlite3
6ce0: 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a  _vfs.xOpen() */.
6cf0: 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20    int errCode;  
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d10: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
6d20: 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54  rror code (SQLIT
6d30: 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  E_*) */.  int er
6d40: 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20  rMask;          
6d50: 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73          /* & res
6d60: 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74  ult codes with t
6d70: 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72  his before retur
6d80: 6e 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ning */.  u8 aut
6d90: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
6da0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
6db0: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
6dc0: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
6dd0: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
6de0: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
6df0: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
6e00: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
6e10: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
6e20: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
6e30: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
6e40: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
6e50: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
6e60: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
6e70: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
6e80: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
6e90: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
6ea0: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
6eb0: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
6ec0: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
6ed0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
6ee0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
6ef0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
6f00: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
6f10: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
6f20: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
6f30: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
6f40: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
6f50: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
6f60: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
6f70: 30 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 6c  0 */.  int nTabl
6f80: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
6f90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
6fa0: 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  f tables in the 
6fb0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 43 6f  database */.  Co
6fc0: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
6fd0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
6fe0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
6ff0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
7000: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 69 36 34 20  INARY) */.  i64 
7010: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
7020: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
7030: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
7040: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
7050: 6f 76 65 29 20 2a 2f 0a 20 20 75 33 32 20 6d 61  ove) */.  u32 ma
7060: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
7070: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
7080: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
7090: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
70a0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
70b0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
70c0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
70d0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
70e0: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
70f0: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
7100: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
7110: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
7120: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
7130: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
7140: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
7150: 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f  mutex;         /
7160: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  * Connection mut
7170: 65 78 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d  ex */.  int aLim
7180: 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  it[SQLITE_N_LIMI
7190: 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20  T];   /* Limits 
71a0: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69  */.  struct sqli
71b0: 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20  te3InitInfo {   
71c0: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
71d0: 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e  n used during in
71e0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a  itialization */.
71f0: 20 20 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20      int iDb;    
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7210: 2f 2a 20 57 68 65 6e 20 62 61 63 6b 20 69 73 20  /* When back is 
7220: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
7230: 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  d */.    int new
7240: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
7250: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
7260: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
7270: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
7280: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
7290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
72a0: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
72b0: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
72c0: 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61   */.    u8 orpha
72d0: 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20  nTrigger;       
72e0: 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74      /* Last stat
72f0: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
7300: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
7310: 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e  /.  } init;.  in
7320: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
7330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7340: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
7350: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
7360: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
7370: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
7380: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
7390: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
73a0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
73b0: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
73c0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
73d0: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
73e0: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 69 6e 74 20  chines */.  int 
73f0: 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b 20 20  activeVdbeCnt;  
7400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7410: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
7420: 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
7430: 20 2a 2f 0a 20 20 69 6e 74 20 77 72 69 74 65 56   */.  int writeV
7440: 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20  dbeCnt;         
7450: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7460: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
7470: 61 74 20 61 72 65 20 77 72 69 74 69 6e 67 20 2a  at are writing *
7480: 2f 0a 20 20 69 6e 74 20 76 64 62 65 45 78 65 63  /.  int vdbeExec
7490: 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cnt;            
74a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
74b0: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
74c0: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 76  dbeExec() */.  v
74d0: 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f  oid (*xTrace)(vo
74e0: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  id*,const char*)
74f0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63  ;        /* Trac
7500: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
7510: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
7520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7540: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
7550: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
7560: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
7570: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
7580: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
7590: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
75a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
75b0: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75d0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
75e0: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
75f0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
7600: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
7610: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7620: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
7630: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
7640: 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c  int (*xCommitCal
7650: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20  lback)(void*);  
7660: 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20    /* Invoked at 
7670: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
7680: 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61  .  void *pRollba
7690: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
76a0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
76b0: 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c   to xRollbackCal
76c0: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
76d0: 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b  void (*xRollback
76e0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
76f0: 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20  ; /* Invoked at 
7700: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
7710: 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65  .  void *pUpdate
7720: 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55  Arg;.  void (*xU
7730: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76  pdateCallback)(v
7740: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
7750: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
7760: 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b  *,sqlite_int64);
7770: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7780: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
7790: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
77a0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
77b0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
77c0: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
77d0: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
77e0: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
77f0: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
7800: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
7810: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
7820: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
7830: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
7840: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
7850: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
7860: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
7870: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
7880: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
7890: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
78a0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
78b0: 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  ge */.  char *zE
78c0: 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20 20  rrMsg;          
78d0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
78e0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
78f0: 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f 64 65  ge (UTF-8 encode
7900: 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  d) */.  char *zE
7910: 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20 20 20  rrMsg16;        
7920: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
7930: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
7940: 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63 6f 64  ge (UTF-16 encod
7950: 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ed) */.  union {
7960: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
7970: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
7980: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
7990: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
79a0: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
79b0: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
79c0: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
79d0: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
79e0: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
79f0: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
7a00: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
7a10: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
7a20: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
7a30: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
7a40: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69  UTHORIZATION.  i
7a50: 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69 64  nt (*xAuth)(void
7a60: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
7a70: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
7a80: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
7a90: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ab0: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
7ac0: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
7ad0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
7ae0: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
7b00: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
7b10: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
7b20: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
7b30: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
7b40: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
7b50: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
7b60: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
7b70: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
7b80: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
7b90: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
7ba0: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
7bb0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
7bc0: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
7bd0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
7be0: 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  t nProgressOps; 
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7c00: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
7c10: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
7c20: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
7c30: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7c40: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
7c50: 45 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  E.  Hash aModule
7c60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7c70: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
7c80: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
7c90: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 54  _module() */.  T
7ca0: 61 62 6c 65 20 2a 70 56 54 61 62 3b 20 20 20 20  able *pVTab;    
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7cc0: 76 74 61 62 20 77 69 74 68 20 61 63 74 69 76 65  vtab with active
7cd0: 20 43 6f 6e 6e 65 63 74 2f 43 72 65 61 74 65 20   Connect/Create 
7ce0: 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 56 54 61 62  method */.  VTab
7cf0: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
7d00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
7d10: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
7d20: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
7d30: 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 54 72  ns */.  int nVTr
7d40: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
7d50: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
7d60: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
7d70: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
7d80: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
7d90: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
7da0: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
7db0: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
7dc0: 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65  .#endif.  FuncDe
7dd0: 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20  fHash aFunc;    
7de0: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
7df0: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
7e00: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
7e10: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
7e20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7e30: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
7e40: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
7e50: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
7e60: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
7e70: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
7e80: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
7e90: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
7ea0: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
7eb0: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
7ec0: 73 65 63 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  sec */.  Db aDbS
7ed0: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
7ee0: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
7ef0: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
7f00: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
7f10: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
7f20: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
7f30: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
7f40: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
7f50: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  s */.  int nSave
7f60: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
7f70: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7f80: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
7f90: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
7fa0: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
7fb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7fc0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
7fd0: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
7fe0: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
7ff0: 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f   u8 isTransactio
8000: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f  nSavepoint;    /
8010: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  * True if the ou
8020: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
8030: 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 69  t is a TS */.  i
8040: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
8050: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8060: 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e  Net deferred con
8070: 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72  straints this tr
8080: 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  ansaction. */.  
8090: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
80a0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
80b0: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
80c0: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
80d0: 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66  DbFree() */..#if
80e0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
80f0: 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
8100: 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
8110: 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ng variables are
8120: 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62   all protected b
8130: 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53  y the STATIC_MAS
8140: 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  TER .  ** mutex,
8150: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
8160: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
8170: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
8180: 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a  notify.c. .  **.
8190: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c    ** When X.pUnl
81a0: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ockConnection==Y
81b0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
81c0: 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66  t X is waiting f
81d0: 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c  or Y to.  ** unl
81e0: 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63  ock so that it c
81f0: 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a  an proceed..  **
8200: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c  .  ** When X.pBl
8210: 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e  ockingConnection
8220: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
8230: 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  that something t
8240: 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a  hat X tried.  **
8250: 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63   tried to do rec
8260: 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74  ently failed wit
8270: 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  h an SQLITE_LOCK
8280: 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20  ED error due to 
8290: 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20  locks.  ** held 
82a0: 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  by Y..  */.  sql
82b0: 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43  ite3 *pBlockingC
82c0: 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f  onnection; /* Co
82d0: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61  nnection that ca
82e0: 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  used SQLITE_LOCK
82f0: 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ED */.  sqlite3 
8300: 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  *pUnlockConnecti
8310: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  on;           /*
8320: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77   Connection to w
8330: 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20  atch for unlock 
8340: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f  */.  void *pUnlo
8350: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
8360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
8370: 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63  gument to xUnloc
8380: 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69  kNotify */.  voi
8390: 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66  d (*xUnlockNotif
83a0: 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29  y)(void **, int)
83b0: 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74  ;  /* Unlock not
83c0: 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ify callback */.
83d0: 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74    sqlite3 *pNext
83e0: 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20  Blocked;        
83f0: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20  /* Next in list 
8400: 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63  of all blocked c
8410: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65  onnections */.#e
8420: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
8430: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
8440: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
8450: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
8460: 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62  /.#define ENC(db
8470: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
8480: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f  pSchema->enc)../
8490: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
84a0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
84b0: 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23  ite3.flags..*/.#
84c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
84d0: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30  beTrace      0x0
84e0: 30 30 30 30 31 30 30 20 20 2f 2a 20 54 72 75 65  0000100  /* True
84f0: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
8500: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
8510: 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  ine SQLITE_Inter
8520: 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30  nChanges  0x0000
8530: 30 32 30 30 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0200  /* Uncommi
8540: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
8550: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
8560: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
8570: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
8580: 34 30 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  400  /* Show ful
8590: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
85a0: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
85b0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
85c0: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
85d0: 30 38 30 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0800  /* Show sh
85e0: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
85f0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8600: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
8610: 20 20 20 30 78 30 30 30 30 31 30 30 30 20 20 2f     0x00001000  /
8620: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
8630: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
8640: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
8650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8660: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8670: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
8680: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
8690: 2f 0a 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: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
86c0: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
86d0: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
86e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
86f0: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
8700: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 49 6e 76  00002000  /* Inv
8710: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
8720: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
8760: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
8770: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
8780: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
8790: 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20      0x00004000  
87a0: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
87b0: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
87c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
87d0: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
87e0: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
87f0: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
8800: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
8810: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8820: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
8830: 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f     0x00010000  /
8840: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
8850: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
8860: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
8870: 6f 52 65 61 64 6c 6f 63 6b 20 20 20 20 20 30 78  oReadlock     0x
8880: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 61  00020000  /* Rea
8890: 64 6c 6f 63 6b 73 20 61 72 65 20 6f 6d 69 74 74  dlocks are omitt
88a0: 65 64 20 77 68 65 6e 20 0a 20 20 20 20 20 20 20  ed when .       
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88d0: 20 20 20 2a 2a 20 61 63 63 65 73 73 69 6e 67 20     ** accessing 
88e0: 72 65 61 64 2d 6f 6e 6c 79 20 64 61 74 61 62 61  read-only databa
88f0: 73 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ses */.#define S
8900: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
8910: 6b 73 20 20 20 30 78 30 30 30 34 30 30 30 30 20  ks   0x00040000 
8920: 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72   /* Do not enfor
8930: 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ce check constra
8940: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
8950: 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
8960: 6d 69 74 74 65 64 20 30 78 30 30 38 30 30 30 30  mitted 0x0080000
8970: 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d    /* For shared-
8980: 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64  cache mode */.#d
8990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
89a0: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
89b0: 31 30 30 30 30 30 20 20 2f 2a 20 43 72 65 61 74  100000  /* Creat
89c0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
89d0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
89e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
89f0: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
8a00: 30 32 30 30 30 30 30 20 20 2f 2a 20 55 73 65 20  0200000  /* Use 
8a10: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
8a20: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
8a30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
8a40: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 34  FullFSync  0x004
8a50: 30 30 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75  00000  /* Use fu
8a60: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
8a70: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
8a80: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65  ne SQLITE_Recove
8a90: 72 79 4d 6f 64 65 20 20 20 30 78 30 30 38 30 30  ryMode   0x00800
8aa0: 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73  000  /* Ignore s
8ab0: 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a  chema errors */.
8ac0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
8ad0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
8ae0: 30 31 30 30 30 30 30 30 20 20 2f 2a 20 52 65 76  01000000  /* Rev
8af0: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
8b00: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
8b10: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
8b20: 67 65 72 73 20 20 20 20 30 78 30 32 30 30 30 30  gers    0x020000
8b30: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
8b40: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
8b50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8b60: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
8b70: 20 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a    0x04000000  /*
8b80: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
8b90: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
8ba0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
8bb0: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
8bc0: 20 20 20 30 78 30 38 30 30 30 30 30 30 20 20 2f     0x08000000  /
8bd0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
8be0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
8bf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65  efine SQLITE_Pre
8c00: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 31 30  ferBuiltin  0x10
8c10: 30 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65  000000  /* Prefe
8c20: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
8c30: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
8c40: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
8c50: 74 65 6e 73 69 6f 6e 20 20 30 78 32 30 30 30 30  tension  0x20000
8c60: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
8c70: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
8c80: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
8c90: 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67  the sqlite3.flag
8ca0: 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65  s field that are
8cb0: 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20   used by the.** 
8cc0: 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
8cd0: 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
8ce0: 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CTRL_OPTIMIZATIO
8cf0: 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63  NS,...) interfac
8d00: 65 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 75 73 74  e..** These must
8d10: 20 62 65 20 74 68 65 20 6c 6f 77 2d 6f 72 64 65   be the low-orde
8d20: 72 20 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c  r bits of the fl
8d30: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
8d40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
8d50: 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 31  ryFlattener 0x01
8d60: 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62          /* Disab
8d70: 6c 65 20 71 75 65 72 79 20 66 6c 61 74 74 65 6e  le query flatten
8d80: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
8d90: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
8da0: 65 20 20 20 20 30 78 30 32 20 20 20 20 20 20 20  e    0x02       
8db0: 20 2f 2a 20 44 69 73 61 62 6c 65 20 74 68 65 20   /* Disable the 
8dc0: 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a  column cache */.
8dd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
8de0: 6e 64 65 78 53 6f 72 74 20 20 20 20 20 20 30 78  ndexSort      0x
8df0: 30 34 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73  04        /* Dis
8e00: 61 62 6c 65 20 69 6e 64 65 78 65 73 20 66 6f 72  able indexes for
8e10: 20 73 6f 72 74 69 6e 67 20 2a 2f 0a 23 64 65 66   sorting */.#def
8e20: 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 64 65 78  ine SQLITE_Index
8e30: 53 65 61 72 63 68 20 20 20 20 30 78 30 38 20 20  Search    0x08  
8e40: 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65        /* Disable
8e50: 20 69 6e 64 65 78 65 73 20 66 6f 72 20 73 65 61   indexes for sea
8e60: 72 63 68 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e  rching */.#defin
8e70: 65 20 53 51 4c 49 54 45 5f 49 6e 64 65 78 43 6f  e SQLITE_IndexCo
8e80: 76 65 72 20 20 20 20 20 30 78 31 30 20 20 20 20  ver     0x10    
8e90: 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 69      /* Disable i
8ea0: 6e 64 65 78 20 63 6f 76 65 72 69 6e 67 20 74 61  ndex covering ta
8eb0: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
8ec0: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
8ed0: 65 72 20 20 20 30 78 32 30 20 20 20 20 20 20 20  er   0x20       
8ee0: 20 2f 2a 20 44 69 73 61 62 6c 65 20 47 52 4f 55   /* Disable GROU
8ef0: 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44  PBY cover of ORD
8f00: 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ERBY */.#define 
8f10: 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74  SQLITE_FactorOut
8f20: 43 6f 6e 73 74 20 30 78 34 30 20 20 20 20 20 20  Const 0x40      
8f30: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 66 61 63    /* Disable fac
8f40: 74 6f 72 69 6e 67 20 6f 75 74 20 63 6f 6e 73 74  toring out const
8f50: 61 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ants */.#define 
8f60: 53 51 4c 49 54 45 5f 4f 70 74 4d 61 73 6b 20 20  SQLITE_OptMask  
8f70: 20 20 20 20 20 20 30 78 66 66 20 20 20 20 20 20        0xff      
8f80: 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 61 6c 6c    /* Mask of all
8f90: 20 64 69 73 61 62 6c 61 62 6c 65 20 6f 70 74 73   disablable opts
8fa0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69   */../*.** Possi
8fb0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
8fc0: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
8fd0: 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75  field..** The nu
8fe0: 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e  mbers are obtain
8ff0: 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  ed at random and
9000: 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c   have no special
9010: 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a   meaning, other.
9020: 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69  ** than being di
9030: 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20  stinct from one 
9040: 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  another..*/.#def
9050: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9060: 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39  _OPEN     0xa029
9070: 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73  a697  /* Databas
9080: 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  e is open */.#de
9090: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
90a0: 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33  C_CLOSED   0x9f3
90b0: 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61  c2d33  /* Databa
90c0: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a  se is closed */.
90d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
90e0: 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78  AGIC_SICK     0x
90f0: 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72  4b771290  /* Err
9100: 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20  or and awaiting 
9110: 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  close */.#define
9120: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
9130: 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30  SY     0xf03b790
9140: 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63  6  /* Database c
9150: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
9160: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9170: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20  E_MAGIC_ERROR   
9180: 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20   0xb5357930  /* 
9190: 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  An SQLITE_MISUSE
91a0: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
91b0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
91c0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  QL function is d
91d0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
91e0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
91f0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
9200: 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20  ure.  A pointer 
9210: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
9220: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  e is stored in t
9230: 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a  he sqlite.aFunc.
9240: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ** hash table.  
9250: 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75  When multiple fu
9260: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65  nctions have the
9270: 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20   same name, the 
9280: 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f  hash table.** po
9290: 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64  ints to a linked
92a0: 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73   list of these s
92b0: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74  tructures..*/.st
92c0: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
92d0: 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20   i16 nArg;      
92e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
92f0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
9300: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
9310: 64 20 2a 2f 0a 20 20 75 38 20 69 50 72 65 66 45  d */.  u8 iPrefE
9320: 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  nc;         /* P
9330: 72 65 66 65 72 72 65 64 20 74 65 78 74 20 65 6e  referred text en
9340: 63 6f 64 69 6e 67 20 28 53 51 4c 49 54 45 5f 55  coding (SQLITE_U
9350: 54 46 38 2c 20 31 36 4c 45 2c 20 31 36 42 45 29  TF8, 16LE, 16BE)
9360: 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20   */.  u8 flags; 
9370: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
9380: 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  me combination o
9390: 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20  f SQLITE_FUNC_* 
93a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
93b0: 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65  Data;     /* Use
93c0: 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72  r data parameter
93d0: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
93e0: 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
93f0: 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  xt function with
9400: 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20   same name */.  
9410: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
9420: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
9430: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
9440: 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20  **); /* Regular 
9450: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
9460: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
9470: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
9480: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
9490: 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  ); /* Aggregate 
94a0: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
94b0: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
94c0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
94e0: 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c   Aggregate final
94f0: 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  izer */.  char *
9500: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
9510: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
9520: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
9530: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
9540: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
9550: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
9560: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
9570: 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44   hash */.  FuncD
9580: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
9590: 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66  ructor;   /* Ref
95a0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64  erence counted d
95b0: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
95c0: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
95d0: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
95e0: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
95f0: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
9600: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
9610: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
9620: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
9630: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
9640: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
9650: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
9660: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
9670: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
9680: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
9690: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
96a0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
96b0: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
96c0: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
96d0: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
96e0: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
96f0: 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  o .** the number
9700: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
9710: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
9720: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
9730: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
9740: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
9750: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
9760: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
9770: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
9780: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
9790: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
97a0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
97b0: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
97c0: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
97d0: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
97e0: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
97f0: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
9800: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
9810: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
9820: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
9830: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
9840: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
9850: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
9860: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
9870: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
9880: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
9890: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
98a0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
98b0: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
98c0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
98d0: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
98e0: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
98f0: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
9900: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
9910: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
9920: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
9930: 65 66 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  ef.flags.*/.#def
9940: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
9950: 4c 49 4b 45 20 20 20 20 20 30 78 30 31 20 2f 2a  LIKE     0x01 /*
9960: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
9970: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
9980: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
9990: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
99a0: 20 20 20 20 20 30 78 30 32 20 2f 2a 20 43 61 73       0x02 /* Cas
99b0: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
99c0: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
99d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
99e0: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
99f0: 78 30 34 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c  x04 /* Ephemeral
9a00: 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56  .  Delete with V
9a10: 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DBE */.#define S
9a20: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
9a30: 4f 4c 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c 69  OLL 0x08 /* sqli
9a40: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
9a50: 71 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c  q() might be cal
9a60: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  led */.#define S
9a70: 51 4c 49 54 45 5f 46 55 4e 43 5f 50 52 49 56 41  QLITE_FUNC_PRIVA
9a80: 54 45 20 20 30 78 31 30 20 2f 2a 20 41 6c 6c 6f  TE  0x10 /* Allo
9a90: 77 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c  wed for internal
9aa0: 20 75 73 65 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65   use only */.#de
9ab0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
9ac0: 5f 43 4f 55 4e 54 20 20 20 20 30 78 32 30 20 2f  _COUNT    0x20 /
9ad0: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
9ae0: 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
9af0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9b00: 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
9b10: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  40 /* Built-in c
9b20: 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e  oalesce() or ifn
9b30: 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ull() function *
9b40: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
9b50: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
9b60: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
9b70: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
9b80: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
9b90: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
9ba0: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
9bb0: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
9bc0: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
9bd0: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
9be0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
9bf0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
9c00: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
9c10: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
9c20: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
9c30: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
9c40: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
9c50: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
9c60: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
9c70: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
9c80: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
9c90: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
9ca0: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
9cb0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
9cc0: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
9cd0: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
9ce0: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
9cf0: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
9d00: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
9d10: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
9d20: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
9d30: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
9d40: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
9d50: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
9d60: 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
9d70: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
9d80: 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
9d90: 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
9da0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
9db0: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
9dc0: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
9dd0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
9de0: 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
9df0: 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
9e00: 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
9e10: 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
9e20: 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
9e30: 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
9e40: 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
9e50: 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
9e60: 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
9e70: 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
9e80: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
9e90: 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
9ea0: 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
9eb0: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
9ec0: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
9ed0: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
9ee0: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
9ef0: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
9f00: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
9f10: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
9f20: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20   by a call to C 
9f30: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
9f40: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
9f50: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
9f60: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
9f70: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
9f80: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
9f90: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
9fa0: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
9fb0: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
9fc0: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
9fd0: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
9fe0: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
9ff0: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
a000: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
a010: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
a020: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
a030: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
a040: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
a050: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
a060: 20 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43   bNC*SQLITE_FUNC
a070: 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20  _NEEDCOLL, \.   
a080: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
a090: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
a0a0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
a0b0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53   0, 0}.#define S
a0c0: 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  TR_FUNCTION(zNam
a0d0: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62  e, nArg, pArg, b
a0e0: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
a0f0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
a100: 38 2c 20 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8, bNC*SQLITE_FU
a110: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20  NC_NEEDCOLL, \. 
a120: 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63    pArg, 0, xFunc
a130: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
a140: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49  0, 0}.#define LI
a150: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
a160: 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20  rg, arg, flags) 
a170: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
a180: 45 5f 55 54 46 38 2c 20 66 6c 61 67 73 2c 20 28  E_UTF8, flags, (
a190: 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c  void *)arg, 0, l
a1a0: 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  ikeFunc, 0, 0, #
a1b0: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
a1c0: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a  fine AGGREGATE(z
a1d0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
a1e0: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
a1f0: 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  al) \.  {nArg, S
a200: 51 4c 49 54 45 5f 55 54 46 38 2c 20 6e 63 2a 53  QLITE_UTF8, nc*S
a210: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
a220: 4f 4c 4c 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  OLL, \.   SQLITE
a230: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
a240: 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  , 0, 0, xStep,xF
a250: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d  inal,#zName,0,0}
a260: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
a270: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
a280: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
a290: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
a2a0: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
a2b0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
a2c0: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
a2d0: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
a2e0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
a2f0: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
a300: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
a310: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
a320: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
a330: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
a340: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
a350: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
a360: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
a370: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
a380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
a390: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
a3a0: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
a3b0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
a3c0: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
a3d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a3e0: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
a3f0: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
a400: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
a410: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
a420: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
a430: 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
a440: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
a450: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
a460: 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
a470: 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
a480: 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
a490: 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
a4a0: 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
a4b0: 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
a4c0: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
a4d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
a4e0: 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
a4f0: 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
a500: 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
a510: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
a520: 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
a530: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
a540: 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
a550: 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
a560: 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
a570: 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
a580: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
a590: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
a5a0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
a5b0: 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
a5c0: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
a5d0: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
a5e0: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
a5f0: 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
a600: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
a610: 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
a620: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
a630: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a640: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
a650: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
a660: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
a670: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
a680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a690: 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
a6a0: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
a6b0: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
a6c0: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
a6d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a6e0: 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
a6f0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
a700: 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
a710: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
a720: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
a730: 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
a740: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
a750: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
a760: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
a770: 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
a780: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
a790: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
a7a0: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
a7b0: 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
a7c0: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
a7d0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
a7e0: 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f  *zDflt;     /* O
a7f0: 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
a800: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
a810: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79  e */.  char *zTy
a820: 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20  pe;     /* Data 
a830: 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f  type for this co
a840: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
a850: 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
a860: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
a870: 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
a880: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
a890: 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
a8a0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
a8b0: 72 65 20 69 73 20 61 20 4e 4f 54 20 4e 55 4c 4c  re is a NOT NULL
a8c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
a8d0: 20 75 38 20 69 73 50 72 69 6d 4b 65 79 3b 20 20   u8 isPrimKey;  
a8e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
a8f0: 73 20 63 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  s column is part
a900: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
a910: 4b 45 59 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  KEY */.  char af
a920: 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
a930: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
a940: 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
a950: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a960: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
a970: 45 0a 20 20 75 38 20 69 73 48 69 64 64 65 6e 3b  E.  u8 isHidden;
a980: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
a990: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 69 73 20 27  this column is '
a9a0: 68 69 64 64 65 6e 27 20 2a 2f 0a 23 65 6e 64 69  hidden' */.#endi
a9b0: 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  f.};../*.** A "C
a9c0: 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
a9d0: 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
a9e0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
a9f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
aa00: 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
aa10: 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
aa20: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
aa30: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
aa40: 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
aa50: 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
aa60: 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
aa70: 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
aa80: 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uence..**.** The
aa90: 72 65 20 6d 61 79 20 74 77 6f 20 73 65 70 61 72  re may two separ
aaa0: 61 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ate implementati
aab0: 6f 6e 73 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ons of the colla
aac0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6f  tion function, o
aad0: 6e 65 0a 2a 2a 20 74 68 61 74 20 70 72 6f 63 65  ne.** that proce
aae0: 73 73 65 73 20 74 65 78 74 20 69 6e 20 55 54 46  sses text in UTF
aaf0: 2d 38 20 65 6e 63 6f 64 69 6e 67 20 28 43 6f 6c  -8 encoding (Col
ab00: 6c 53 65 71 2e 78 43 6d 70 29 20 61 6e 64 20 61  lSeq.xCmp) and a
ab10: 6e 6f 74 68 65 72 20 74 68 61 74 0a 2a 2a 20 70  nother that.** p
ab20: 72 6f 63 65 73 73 65 73 20 74 65 78 74 20 65 6e  rocesses text en
ab30: 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 31 36 20  coded in UTF-16 
ab40: 28 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 31 36 29  (CollSeq.xCmp16)
ab50: 2c 20 75 73 69 6e 67 20 74 68 65 20 6d 61 63 68  , using the mach
ab60: 69 6e 65 0a 2a 2a 20 6e 61 74 69 76 65 20 62 79  ine.** native by
ab70: 74 65 20 6f 72 64 65 72 2e 20 57 68 65 6e 20 61  te order. When a
ab80: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
ab90: 6e 63 65 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20  nce is invoked, 
aba0: 53 51 4c 69 74 65 20 73 65 6c 65 63 74 73 0a 2a  SQLite selects.*
abb0: 2a 20 74 68 65 20 76 65 72 73 69 6f 6e 20 74 68  * the version th
abc0: 61 74 20 77 69 6c 6c 20 72 65 71 75 69 72 65 20  at will require 
abd0: 74 68 65 20 6c 65 61 73 74 20 65 78 70 65 6e 73  the least expens
abe0: 69 76 65 20 65 6e 63 6f 64 69 6e 67 0a 2a 2a 20  ive encoding.** 
abf0: 74 72 61 6e 73 6c 61 74 69 6f 6e 73 2c 20 69 66  translations, if
ac00: 20 61 6e 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   any..**.** The 
ac10: 43 6f 6c 6c 53 65 71 2e 70 55 73 65 72 20 6d 65  CollSeq.pUser me
ac20: 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 69 73  mber variable is
ac30: 20 61 6e 20 65 78 74 72 61 20 70 61 72 61 6d 65   an extra parame
ac40: 74 65 72 20 74 68 61 74 20 70 61 73 73 65 64 20  ter that passed 
ac50: 69 6e 0a 2a 2a 20 61 73 20 74 68 65 20 66 69 72  in.** as the fir
ac60: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
ac70: 68 65 20 55 54 46 2d 38 20 63 6f 6d 70 61 72 69  he UTF-8 compari
ac80: 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 78 43  son function, xC
ac90: 6d 70 2e 0a 2a 2a 20 43 6f 6c 6c 53 65 71 2e 70  mp..** CollSeq.p
aca0: 55 73 65 72 31 36 20 69 73 20 74 68 65 20 65 71  User16 is the eq
acb0: 75 69 76 61 6c 65 6e 74 20 66 6f 72 20 74 68 65  uivalent for the
acc0: 20 55 54 46 2d 31 36 20 63 6f 6d 70 61 72 69 73   UTF-16 comparis
acd0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  on function,.** 
ace0: 78 43 6d 70 31 36 2e 0a 2a 2a 0a 2a 2a 20 49 66  xCmp16..**.** If
acf0: 20 62 6f 74 68 20 43 6f 6c 6c 53 65 71 2e 78 43   both CollSeq.xC
ad00: 6d 70 20 61 6e 64 20 43 6f 6c 6c 53 65 71 2e 78  mp and CollSeq.x
ad10: 43 6d 70 31 36 20 61 72 65 20 4e 55 4c 4c 2c 20  Cmp16 are NULL, 
ad20: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
ad30: 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
ad40: 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
ad50: 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
ad60: 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
ad70: 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
ad80: 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
ad90: 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
ada0: 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
adb0: 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
adc0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
add0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
ade0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
adf0: 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
ae00: 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ae20: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
ae30: 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
ae40: 29 20 2a 2f 0a 20 20 75 38 20 74 79 70 65 3b 20  ) */.  u8 type; 
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ae60: 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
ae70: 45 5f 43 4f 4c 4c 5f 2e 2e 2e 20 76 61 6c 75 65  E_COLL_... value
ae80: 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 76 6f 69  s below */.  voi
ae90: 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
aea0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
aeb0: 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
aec0: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
aed0: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
aee0: 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
aef0: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
af00: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
af10: 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
af20: 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
af30: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
af40: 76 61 6c 75 65 73 20 6f 66 20 43 6f 6c 6c 53 65  values of CollSe
af50: 71 2e 74 79 70 65 3a 0a 2a 2f 0a 23 64 65 66 69  q.type:.*/.#defi
af60: 6e 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 42  ne SQLITE_COLL_B
af70: 49 4e 41 52 59 20 20 31 20 20 2f 2a 20 54 68 65  INARY  1  /* The
af80: 20 64 65 66 61 75 6c 74 20 6d 65 6d 63 6d 70 28   default memcmp(
af90: 29 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  ) collating sequ
afa0: 65 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ence */.#define 
afb0: 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41  SQLITE_COLL_NOCA
afc0: 53 45 20 20 32 20 20 2f 2a 20 54 68 65 20 62 75  SE  2  /* The bu
afd0: 69 6c 74 2d 69 6e 20 4e 4f 43 41 53 45 20 63 6f  ilt-in NOCASE co
afe0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
aff0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b000: 54 45 5f 43 4f 4c 4c 5f 52 45 56 45 52 53 45 20  TE_COLL_REVERSE 
b010: 33 20 20 2f 2a 20 54 68 65 20 62 75 69 6c 74 2d  3  /* The built-
b020: 69 6e 20 52 45 56 45 52 53 45 20 63 6f 6c 6c 61  in REVERSE colla
b030: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f  ting sequence */
b040: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b050: 43 4f 4c 4c 5f 55 53 45 52 20 20 20 20 30 20 20  COLL_USER    0  
b060: 2f 2a 20 41 6e 79 20 6f 74 68 65 72 20 75 73 65  /* Any other use
b070: 72 2d 64 65 66 69 6e 65 64 20 63 6f 6c 6c 61 74  r-defined collat
b080: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a  ing sequence */.
b090: 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
b0a0: 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
b0b0: 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
b0c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b0d0: 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
b0e0: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
b0f0: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
b100: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
b110: 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
b120: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
b130: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a  ng order */../*.
b140: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
b150: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
b160: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
b170: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
b180: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
b190: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
b1a0: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
b1b0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
b1c0: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
b1d0: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
b1e0: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
b1f0: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
b200: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
b210: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
b220: 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a  cutively.  .**.*
b230: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
b240: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
b250: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
b260: 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77 61  th 'a'.  That wa
b270: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
b280: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
b290: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
b2a0: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
b2b0: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
b2c0: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
b2d0: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
b2e0: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
b2f0: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
b300: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
b310: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
b320: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
b330: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
b340: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
b350: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
b360: 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rison..*/.#defin
b370: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
b380: 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e  T     'a'.#defin
b390: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  e SQLITE_AFF_NON
b3a0: 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e  E     'b'.#defin
b3b0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
b3c0: 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e  ERIC  'c'.#defin
b3d0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
b3e0: 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e  EGER  'd'.#defin
b3f0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
b400: 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69  L     'e'..#defi
b410: 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
b420: 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
b430: 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
b440: 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
b450: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
b460: 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
b470: 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
b480: 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
b490: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
b4a0: 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ue. .*/.#define 
b4b0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
b4c0: 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20      0x67../*.** 
b4d0: 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
b4e0: 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
b4f0: 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
b500: 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
b510: 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
b520: 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a 23 64 65  affinity..*/.#de
b530: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
b540: 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f  IFNULL   0x08  /
b550: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
b560: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
b570: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
b580: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
b590: 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x10  /* Store 
b5a0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
b5b0: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
b5c0: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
b5d0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
b5e0: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
b5f0: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
b600: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
b610: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
b620: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
b630: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
b640: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
b650: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
b660: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
b670: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
b680: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
b690: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
b6a0: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
b6b0: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
b6c0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
b6d0: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
b6e0: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
b6f0: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
b700: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
b710: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
b720: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
b730: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
b740: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b750: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
b760: 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
b770: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
b780: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
b790: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
b7a0: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
b7b0: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
b7c0: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
b7d0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b7e0: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
b7f0: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
b800: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
b810: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
b820: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
b830: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
b840: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
b850: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
b860: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
b870: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
b880: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
b890: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
b8a0: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
b8b0: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
b8c0: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
b8d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
b8e0: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
b8f0: 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
b900: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
b910: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
b920: 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20  ess real tables 
b930: 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64  .** within the d
b940: 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74  atabase. So that
b950: 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20   they appear as 
b960: 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c  part of the call
b970: 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74  ers .** transact
b980: 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
b990: 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
b9a0: 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
b9b0: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f   database .** co
b9c0: 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74  nnection as that
b9d0: 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
b9e0: 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20   SQL operations 
b9f0: 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
ba00: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  able..**.** All 
ba10: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74  VTable objects t
ba20: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  hat correspond t
ba30: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
ba40: 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20   in a shared.** 
ba50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
ba60: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74  are initially st
ba70: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
ba80: 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f  -list pointed to
ba90: 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65   by.** the Table
baa0: 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20  .pVTable member 
bab0: 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20  variable of the 
bac0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61  corresponding Ta
bad0: 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57  ble object..** W
bae0: 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70  hen an sqlite3_p
baf0: 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69  repare() operati
bb00: 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74  on is required t
bb10: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
bb20: 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69  tual.** table, i
bb30: 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c  t searches the l
bb40: 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62  ist for the VTab
bb50: 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  le that correspo
bb60: 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  nds to the.** da
bb70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
bb80: 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70  n doing the prep
bb90: 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75  aring so as to u
bba0: 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a  se the correct.*
bbb0: 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  * sqlite3_vtab* 
bbc0: 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f  handle in the co
bbd0: 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a  mpiled query..**
bbe0: 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d  .** When an in-m
bbf0: 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65  emory Table obje
bc00: 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66  ct is deleted (f
bc10: 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20  or example when 
bc20: 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  the.** schema is
bc30: 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20   being reloaded 
bc40: 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29  for some reason)
bc50: 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a  , the VTable obj
bc60: 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a  ects are not .**
bc70: 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
bc80: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
bc90: 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78  andles are not x
bca0: 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a  Disconnect()ed .
bcb0: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
bcc0: 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
bcd0: 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
bce0: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
bcf0: 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
bd00: 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
bd10: 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
bd20: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
bd30: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
bd40: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
bd50: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
bd60: 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
bd70: 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
bd80: 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74  ected .** next t
bd90: 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ime a statement 
bda0: 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e  is prepared usin
bdb0: 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e  g said sqlite3*.
bdc0: 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a   This is done.**
bdd0: 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f   to avoid deadlo
bde0: 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76  ck issues involv
bdf0: 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c  ing multiple sql
be00: 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
be10: 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20  es..** Refer to 
be20: 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66  comments above f
be30: 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56  unction sqlite3V
be40: 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20  tabUnlockList() 
be50: 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e  for an.** explan
be60: 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20  ation as to why 
be70: 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64  it is safe to ad
be80: 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e  d an entry to an
be90: 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
bea0: 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74  nect.** list wit
beb0: 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65  hout holding the
bec0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
bed0: 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
bee0: 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  ex..**.** The me
bef0: 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73  mory for objects
bf00: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
bf10: 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65   always allocate
bf20: 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33  d by .** sqlite3
bf30: 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e  DbMalloc(), usin
bf40: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
bf50: 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69   handle stored i
bf60: 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a  n VTable.db as .
bf70: 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
bf80: 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
bf90: 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
bfa0: 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
bfb0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
bfc0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
bfd0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
bfe0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
bff0: 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
c000: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
c010: 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
c020: 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
c030: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
c040: 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
c050: 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
c060: 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
c070: 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
c080: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c090: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
c0a0: 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
c0b0: 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c0d0: 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
c0e0: 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
c0f0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
c100: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65   SQL table is re
c110: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
c120: 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ory by an instan
c130: 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c  ce of the.** fol
c140: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
c150: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e  ..**.** Table.zN
c160: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
c170: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  of the table.  T
c180: 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f  he case of the o
c190: 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54  riginal.** CREAT
c1a0: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
c1b0: 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74  t is stored, but
c1c0: 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67   case is not sig
c1d0: 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20  nificant for.** 
c1e0: 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a  comparisons..**.
c1f0: 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73  ** Table.nCol is
c200: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
c210: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
c220: 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f  able.  Table.aCo
c230: 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  l is a.** pointe
c240: 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66  r to an array of
c250: 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72   Column structur
c260: 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68  es, one for each
c270: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49   column..**.** I
c280: 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20  f the table has 
c290: 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  an INTEGER PRIMA
c2a0: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62  RY KEY, then Tab
c2b0: 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20  le.iPKey is the 
c2c0: 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20  index of.** the 
c2d0: 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74  column that is t
c2e0: 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72  hat key.   Other
c2f0: 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79  wise Table.iPKey
c300: 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e   is negative.  N
c310: 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ote.** that the 
c320: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
c330: 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74  PRIMARY KEY must
c340: 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20   be INTEGER for 
c350: 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a  this field to.**
c360: 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54   be set.  An INT
c370: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
c380: 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
c390: 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72  rowid for each r
c3a0: 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62  ow of.** the tab
c3b0: 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20  le.  If a table 
c3c0: 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50  has no INTEGER P
c3d0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
c3e0: 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a   a random rowid.
c3f0: 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  ** is generated 
c400: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
c410: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48  the table.  TF_H
c420: 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20  asPrimaryKey is 
c430: 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61  set if.** the ta
c440: 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d  ble has any PRIM
c450: 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52  ARY KEY, INTEGER
c460: 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a   or otherwise..*
c470: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20  *.** Table.tnum 
c480: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
c490: 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20  er for the root 
c4a0: 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68  BTree page of th
c4b0: 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a  e table in the.*
c4c0: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  * database file.
c4d0: 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69    If Table.iDb i
c4e0: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
c4f0: 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
c500: 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20  e backend.** in 
c510: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30  sqlite.aDb[].  0
c520: 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e   is for the main
c530: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20   database and 1 
c540: 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20  is for the file 
c550: 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65  that.** holds te
c560: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
c570: 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20  nd indices.  If 
c580: 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20  TF_Ephemeral is 
c590: 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  set.** then the 
c5a0: 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20  table is stored 
c5b0: 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69  in a file that i
c5c0: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
c5d0: 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20  deleted.** when 
c5e0: 74 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  the VDBE cursor 
c5f0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  to the table is 
c600: 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73  closed.  In this
c610: 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d   case Table.tnum
c620: 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45   .** refers VDBE
c630: 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74   cursor number t
c640: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61  hat holds the ta
c650: 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f  ble open, not to
c660: 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67   the root.** pag
c670: 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73  e number.  Trans
c680: 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20  ient tables are 
c690: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
c6a0: 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a   results of a.**
c6b0: 20 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20   sub-query that 
c6c0: 61 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20  appears instead 
c6d0: 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  of a real table 
c6e0: 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  name in the FROM
c6f0: 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61   clause .** of a
c700: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
c710: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  t..*/.struct Tab
c720: 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
c730: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
c740: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
c750: 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 69 6e   or view */.  in
c760: 74 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20  t iPKey;        
c770: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67     /* If not neg
c780: 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b  ative, use aCol[
c790: 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72  iPKey] as the pr
c7a0: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69  imary key */.  i
c7b0: 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
c7c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c7d0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
c7e0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 43 6f 6c 75   table */.  Colu
c7f0: 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
c800: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
c810: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
c820: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
c830: 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
c840: 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
c850: 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
c860: 2e 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  . */.  int tnum;
c870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
c880: 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66  oot BTree node f
c890: 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28 73  or this table (s
c8a0: 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a  ee note above) *
c8b0: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 52 6f  /.  unsigned nRo
c8c0: 77 45 73 74 3b 20 20 20 20 2f 2a 20 45 73 74 69  wEst;    /* Esti
c8d0: 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61  mated rows in ta
c8e0: 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74  ble - from sqlit
c8f0: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f  e_stat1 table */
c900: 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
c910: 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
c920: 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
c930: 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
c940: 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
c950: 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20    u16 nRef;     
c960: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c970: 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
c980: 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
c990: 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
c9a0: 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
c9b0: 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
c9c0: 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
c9d0: 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
c9e0: 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
c9f0: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
ca00: 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 20  ct on iPKey */. 
ca10: 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
ca20: 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
ca30: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
ca40: 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
ca50: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
ca60: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
ca70: 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
ca80: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
ca90: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
caa0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cab0: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45  E_OMIT_CHECK.  E
cac0: 78 70 72 20 2a 70 43 68 65 63 6b 3b 20 20 20 20  xpr *pCheck;    
cad0: 20 20 20 20 2f 2a 20 54 68 65 20 41 4e 44 20 6f      /* The AND o
cae0: 66 20 61 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  f all CHECK cons
caf0: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69  traints */.#endi
cb00: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
cb10: 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
cb20: 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
cb30: 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
cb40: 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
cb50: 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
cb60: 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
cb70: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
cb80: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
cb90: 54 41 42 4c 45 0a 20 20 56 54 61 62 6c 65 20 2a  TABLE.  VTable *
cba0: 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
cbb0: 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
cbc0: 62 6a 65 63 74 73 2e 20 2a 2f 0a 20 20 69 6e 74  bjects. */.  int
cbd0: 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
cbe0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
cbf0: 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
cc00: 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
cc10: 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
cc20: 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20   /* Text of all 
cc30: 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d  module args. [0]
cc40: 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20   is module name 
cc50: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
cc60: 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
cc70: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
cc80: 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
cc90: 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
cca0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
ccb0: 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
ccc0: 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
ccd0: 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
cce0: 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
ccf0: 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
cd00: 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
cd10: 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
cd20: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
cd30: 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73  or Tabe.tabFlags
cd40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
cd50: 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
cd60: 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0x01    /* Read-
cd70: 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
cd80: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
cd90: 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
cda0: 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70  0x02    /* An ep
cdb0: 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f  hemeral table */
cdc0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50  .#define TF_HasP
cdd0: 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34  rimaryKey   0x04
cde0: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
cdf0: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
ce00: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
ce10: 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
ce20: 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
ce30: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
ce40: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
ce50: 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75  #define TF_Virtu
ce60: 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20  al         0x10 
ce70: 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75     /* Is a virtu
ce80: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
ce90: 69 6e 65 20 54 46 5f 4e 65 65 64 4d 65 74 61 64  ine TF_NeedMetad
cea0: 61 74 61 20 20 20 20 30 78 32 30 20 20 20 20 2f  ata    0x20    /
ceb0: 2a 20 61 43 6f 6c 5b 5d 2e 7a 54 79 70 65 20 61  * aCol[].zType a
cec0: 6e 64 20 61 43 6f 6c 5b 5d 2e 70 43 6f 6c 6c 20  nd aCol[].pColl 
ced0: 6d 69 73 73 69 6e 67 20 2a 2f 0a 0a 0a 0a 2f 2a  missing */..../*
cee0: 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
cef0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
cf00: 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
cf10: 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
cf20: 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
cf30: 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
cf40: 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
cf50: 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
cf60: 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
cf70: 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
cf80: 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
cf90: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
cfa0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
cfb0: 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
cfc0: 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
cfd0: 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
cfe0: 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d   & TF_Virtual)!=
cff0: 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  0).#  define IsH
d000: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28  iddenColumn(X) (
d010: 28 58 29 2d 3e 69 73 48 69 64 64 65 6e 29 0a 23  (X)->isHidden).#
d020: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
d030: 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
d040: 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48   0.#  define IsH
d050: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
d060: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
d070: 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
d080: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
d090: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
d0a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
d0b0: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
d0c0: 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
d0d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
d0e0: 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
d0f0: 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
d100: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
d110: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
d120: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
d130: 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
d140: 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
d150: 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
d160: 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
d170: 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
d180: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
d190: 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
d1a0: 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
d1b0: 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
d1c0: 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
d1d0: 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
d1e0: 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
d1f0: 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
d200: 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
d210: 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
d220: 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
d230: 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
d240: 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
d250: 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
d260: 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
d270: 73 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a 20 45  s "ex2"..**.** E
d280: 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
d290: 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
d2a0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
d2b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
d2c0: 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
d2d0: 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
d2e0: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
d2f0: 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
d300: 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
d310: 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
d320: 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
d330: 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
d340: 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
d350: 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2f   not checked..*/
d360: 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
d370: 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
d380: 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
d390: 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
d3a0: 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
d3b0: 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
d3c0: 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
d3d0: 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67 6e   /* Next foreign
d3e0: 20 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20 2a 2f   key in pFrom */
d3f0: 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20  .  char *zTo;   
d400: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
d410: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b  table that the k
d420: 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b  ey points to (ak
d430: 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20  a: Parent) */.  
d440: 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20  FKey *pNextTo;  
d450: 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67    /* Next foreig
d460: 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20 6e  n key on table n
d470: 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 46 4b  amed zTo */.  FK
d480: 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
d490: 2f 2a 20 50 72 65 76 69 6f 75 73 20 66 6f 72 65  /* Previous fore
d4a0: 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65  ign key on table
d4b0: 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20   named zTo */.  
d4c0: 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
d4d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
d4e0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b  olumns in this k
d4f0: 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52  ey */.  /* EV: R
d500: 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a  -30323-21917 */.
d510: 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b    u8 isDeferred;
d520: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
d530: 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
d540: 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
d550: 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
d560: 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
d570: 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45          /* ON DE
d580: 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41  LETE and ON UPDA
d590: 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70  TE actions, resp
d5a0: 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72  ectively */.  Tr
d5b0: 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72  igger *apTrigger
d5c0: 5b 32 5d 3b 20 20 2f 2a 20 54 72 69 67 67 65 72  [2];  /* Trigger
d5d0: 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
d5e0: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
d5f0: 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 2f  uct sColMap {  /
d600: 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
d610: 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
d620: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
d630: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
d640: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64  ;         /* Ind
d650: 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  ex of column in 
d660: 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61  pFrom */.    cha
d670: 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20  r *zCol;        
d680: 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
d690: 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 30 20  n in zTo.  If 0 
d6a0: 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  use PRIMARY KEY 
d6b0: 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20  */.  } aCol[1]; 
d6c0: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
d6d0: 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20  try for each of 
d6e0: 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20 2a 2f  nCol column s */
d6f0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
d700: 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
d710: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
d720: 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
d730: 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
d740: 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
d750: 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
d760: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
d770: 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
d780: 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
d790: 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
d7a0: 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
d7b0: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
d7c0: 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
d7d0: 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
d7e0: 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
d7f0: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
d800: 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
d810: 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
d820: 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
d830: 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
d840: 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
d850: 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
d860: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
d870: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
d880: 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
d890: 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
d8a0: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
d8b0: 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
d8c0: 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
d8d0: 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
d8e0: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
d8f0: 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
d900: 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
d910: 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
d920: 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
d930: 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
d940: 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
d950: 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
d960: 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
d970: 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
d980: 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
d990: 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
d9a0: 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
d9b0: 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
d9c0: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
d9d0: 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
d9e0: 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
d9f0: 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
da00: 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
da10: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
da20: 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
da30: 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
da40: 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
da50: 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
da60: 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
da70: 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
da80: 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
da90: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
daa0: 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
dab0: 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
dac0: 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
dad0: 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
dae0: 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
daf0: 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
db00: 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
db10: 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
db20: 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
db30: 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
db40: 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
db50: 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
db60: 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
db70: 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
db80: 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
db90: 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
dba0: 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
dbb0: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
dbc0: 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
dbd0: 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
dbe0: 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
dbf0: 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
dc00: 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ** .** The follo
dc10: 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61  wing symbolic va
dc20: 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  lues are used to
dc30: 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79   record which ty
dc40: 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20  pe.** of action 
dc50: 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66  to take..*/.#def
dc60: 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20  ine OE_None     
dc70: 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20  0   /* There is 
dc80: 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f  no constraint to
dc90: 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e   check */.#defin
dca0: 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20  e OE_Rollback 1 
dcb0: 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70    /* Fail the op
dcc0: 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c  eration and roll
dcd0: 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
dce0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
dcf0: 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20  OE_Abort    2   
dd00: 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e  /* Back out chan
dd10: 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f  ges but do no ro
dd20: 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
dd30: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
dd40: 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a  _Fail     3   /*
dd50: 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74   Stop the operat
dd60: 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c  ion but leave al
dd70: 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  l prior changes 
dd80: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67  */.#define OE_Ig
dd90: 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67  nore   4   /* Ig
dda0: 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20  nore the error. 
ddb0: 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e  Do not do the IN
ddc0: 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
ddd0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70  /.#define OE_Rep
dde0: 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c  lace  5   /* Del
ddf0: 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63  ete existing rec
de00: 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53  ord, then do INS
de10: 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
de20: 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73  ..#define OE_Res
de30: 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f  trict 6   /* OE_
de40: 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49  Abort for IMMEDI
de50: 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  ATE, OE_Rollback
de60: 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f   for DEFERRED */
de70: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e  .#define OE_SetN
de80: 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20  ull  7   /* Set 
de90: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
dea0: 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f  value to NULL */
deb0: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44  .#define OE_SetD
dec0: 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20  flt  8   /* Set 
ded0: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
dee0: 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66  value to its def
def0: 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ault */.#define 
df00: 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20  OE_Cascade  9   
df10: 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63  /* Cascade the c
df20: 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69  hanges */..#defi
df30: 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 39  ne OE_Default  9
df40: 39 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65  9  /* Do whateve
df50: 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  r the default ac
df60: 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a  tion is */.../*.
df70: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
df80: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
df90: 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
dfa0: 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  sed as the first
dfb0: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  .** argument to 
dfc0: 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f  sqlite3VdbeKeyCo
dfd0: 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65  mpare and is use
dfe0: 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65  d to control the
dff0: 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20   .** comparison 
e000: 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
e010: 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74 72 75 63 74   keys..*/.struct
e020: 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73 71 6c   KeyInfo {.  sql
e030: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
e040: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
e050: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
e060: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
e070: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
e080: 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
e090: 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
e0a0: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
e0b0: 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
e0c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
e0d0: 69 65 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d 20 2a  ies in aColl[] *
e0e0: 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
e0f0: 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20  er;     /* Sort 
e100: 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63  order for each c
e110: 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20 62 65 20 4e  olumn.  May be N
e120: 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  ULL */.  CollSeq
e130: 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
e140: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
e150: 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
e160: 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
e170: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
e180: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
e190: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
e1a0: 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
e1b0: 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e  n about a.** sin
e1c0: 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64  gle index record
e1d0: 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64   that has alread
e1e0: 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75  y been parsed ou
e1f0: 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61  t into individua
e200: 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  l.** values..**.
e210: 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
e220: 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
e230: 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
e240: 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
e250: 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
e260: 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
e270: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
e280: 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
e290: 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
e2a0: 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
e2b0: 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
e2c0: 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
e2d0: 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
e2e0: 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
e2f0: 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
e300: 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
e310: 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
e320: 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
e330: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  e..**.** This st
e340: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20  ructure holds a 
e350: 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
e360: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73  already been dis
e370: 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74  assembled.** int
e380: 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e  o its constituen
e390: 74 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74 72  t fields..*/.str
e3a0: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
e3b0: 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
e3c0: 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
e3d0: 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
e3e0: 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
e3f0: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  on */.  u16 nFie
e400: 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
e410: 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
e420: 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
e430: 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20   u16 flags;     
e440: 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20       /* Boolean 
e450: 73 65 74 74 69 6e 67 73 2e 20 20 55 4e 50 41 43  settings.  UNPAC
e460: 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a 2f  KED_... below */
e470: 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20  .  i64 rowid;   
e480: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62         /* Used b
e490: 79 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  y UNPACKED_PREFI
e4a0: 58 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20 4d 65  X_SEARCH */.  Me
e4b0: 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *aMem;        
e4c0: 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d    /* Values */.}
e4d0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
e4e0: 20 76 61 6c 75 65 73 20 6f 66 20 55 6e 70 61 63   values of Unpac
e4f0: 6b 65 64 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a  kedRecord.flags.
e500: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43  */.#define UNPAC
e510: 4b 45 44 5f 4e 45 45 44 5f 46 52 45 45 20 20 20  KED_NEED_FREE   
e520: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4d 65 6d    0x0001  /* Mem
e530: 6f 72 79 20 69 73 20 66 72 6f 6d 20 73 71 6c 69  ory is from sqli
e540: 74 65 33 4d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23  te3Malloc() */.#
e550: 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f  define UNPACKED_
e560: 4e 45 45 44 5f 44 45 53 54 52 4f 59 20 20 30 78  NEED_DESTROY  0x
e570: 30 30 30 32 20 20 2f 2a 20 61 70 4d 65 6d 5b 5d  0002  /* apMem[]
e580: 73 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20  s should all be 
e590: 64 65 73 74 72 6f 79 65 64 20 2a 2f 0a 23 64 65  destroyed */.#de
e5a0: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 47  fine UNPACKED_IG
e5b0: 4e 4f 52 45 5f 52 4f 57 49 44 20 20 30 78 30 30  NORE_ROWID  0x00
e5c0: 30 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 72  04  /* Ignore tr
e5d0: 61 69 6c 69 6e 67 20 72 6f 77 69 64 20 6f 6e 20  ailing rowid on 
e5e0: 6b 65 79 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20  key1 */.#define 
e5f0: 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
e600: 20 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f         0x0008  /
e610: 2a 20 4d 61 6b 65 20 74 68 69 73 20 6b 65 79 20  * Make this key 
e620: 61 6e 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65  an epsilon large
e630: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50  r */.#define UNP
e640: 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
e650: 43 48 20 20 30 78 30 30 31 30 20 20 2f 2a 20 41  CH  0x0010  /* A
e660: 20 70 72 65 66 69 78 20 6d 61 74 63 68 20 69 73   prefix match is
e670: 20 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a   considered OK *
e680: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
e690: 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48  ED_PREFIX_SEARCH
e6a0: 20 30 78 30 30 32 30 20 20 2f 2a 20 41 20 70 72   0x0020  /* A pr
e6b0: 65 66 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f  efix match is co
e6c0: 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 0a  nsidered OK */..
e6d0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
e6e0: 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
e6f0: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
e700: 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
e710: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e720: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
e730: 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
e740: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
e750: 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
e760: 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
e770: 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
e780: 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
e790: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
e7a0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
e7b0: 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
e7c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
e7d0: 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
e7e0: 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
e7f0: 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
e800: 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
e810: 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
e820: 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
e830: 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
e840: 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
e850: 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
e860: 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
e870: 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
e880: 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
e890: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
e8a0: 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
e8b0: 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
e8c0: 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
e8d0: 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
e8e0: 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
e8f0: 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
e900: 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
e910: 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
e920: 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
e930: 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
e940: 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c  he .** first col
e950: 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
e960: 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e  d (c3) has an in
e970: 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e  dex of 2 in Ex1.
e980: 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73  aCol[]..** The s
e990: 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20  econd column to 
e9a0: 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20  be indexed (c1) 
e9b0: 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
e9c0: 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c  0 in.** Ex1.aCol
e9d0: 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69  [], hence Ex2.ai
e9e0: 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a  Column[1]==0..**
e9f0: 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e  .** The Index.on
ea00: 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65  Error field dete
ea10: 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
ea20: 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65  r not the indexe
ea30: 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73  d columns.** mus
ea40: 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20  t be unique and 
ea50: 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68  what to do if th
ea60: 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65  ey are not.  Whe
ea70: 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d  n Index.onError=
ea80: 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d  OE_None,.** it m
ea90: 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74  eans this is not
eaa0: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e   a unique index.
eab0: 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69    Otherwise it i
eac0: 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  s a unique index
ead0: 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75  .** and the valu
eae0: 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72  e of Index.onErr
eaf0: 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20  or indicate the 
eb00: 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72  which conflict r
eb10: 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c  esolution .** al
eb20: 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f  gorithm to emplo
eb30: 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74  y whenever an at
eb40: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
eb50: 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e   insert a non-un
eb60: 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e  ique.** element.
eb70: 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
eb80: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
eb90: 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
eba0: 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
ebb0: 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
ebc0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
ebd0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
ebe0: 62 6c 65 20 75 73 65 64 20 62 79 20 74 68 69 73  ble used by this
ebf0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
ec00: 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 2f 2a 20  *aiColumn;   /* 
ec10: 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72  Which columns ar
ec20: 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69  e used by this i
ec30: 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20  ndex.  1st is 0 
ec40: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 2a 61  */.  unsigned *a
ec50: 69 52 6f 77 45 73 74 3b 20 2f 2a 20 52 65 73 75  iRowEst; /* Resu
ec60: 6c 74 20 6f 66 20 41 4e 41 4c 59 5a 45 3a 20 45  lt of ANALYZE: E
ec70: 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65  st. rows selecte
ec80: 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e  d by each column
ec90: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
eca0: 62 6c 65 3b 20 20 20 2f 2a 20 54 68 65 20 53 51  ble;   /* The SQ
ecb0: 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
ecc0: 64 65 78 65 64 20 2a 2f 0a 20 20 69 6e 74 20 74  dexed */.  int t
ecd0: 6e 75 6d 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  num;        /* P
ece0: 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72  age containing r
ecf0: 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65  oot of this inde
ed00: 78 20 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  x in database fi
ed10: 6c 65 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72  le */.  u8 onErr
ed20: 6f 72 3b 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41  or;      /* OE_A
ed30: 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
ed40: 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
ed50: 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 38 20  OE_None */.  u8 
ed60: 61 75 74 6f 49 6e 64 65 78 3b 20 20 20 20 2f 2a  autoIndex;    /*
ed70: 20 54 72 75 65 20 69 66 20 69 73 20 61 75 74 6f   True if is auto
ed80: 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
ed90: 64 20 28 65 78 3a 20 62 79 20 55 4e 49 51 55 45  d (ex: by UNIQUE
eda0: 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  ) */.  char *zCo
edb0: 6c 41 66 66 3b 20 20 20 2f 2a 20 53 74 72 69 6e  lAff;   /* Strin
edc0: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
edd0: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
ede0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
edf0: 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  x *pNext;    /* 
ee00: 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
ee10: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
ee20: 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
ee30: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
ee40: 6d 61 3b 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f  ma; /* Schema co
ee50: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
ee60: 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
ee70: 72 74 4f 72 64 65 72 3b 20 20 2f 2a 20 41 72 72  rtOrder;  /* Arr
ee80: 61 79 20 6f 66 20 73 69 7a 65 20 49 6e 64 65 78  ay of size Index
ee90: 2e 6e 43 6f 6c 75 6d 6e 2e 20 54 72 75 65 3d 3d  .nColumn. True==
eea0: 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43  DESC, False==ASC
eeb0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43   */.  char **azC
eec0: 6f 6c 6c 3b 20 20 20 2f 2a 20 41 72 72 61 79 20  oll;   /* Array 
eed0: 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
eee0: 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
eef0: 69 6e 64 65 78 20 2a 2f 0a 20 20 49 6e 64 65 78  index */.  Index
ef00: 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
ef10: 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
ef20: 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 53 41 4d  SQLITE_INDEX_SAM
ef30: 50 4c 45 53 20 73 61 6d 70 6c 65 73 20 2a 2f 0a  PLES samples */.
ef40: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  };../*.** Each s
ef50: 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
ef60: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  the sqlite_stat2
ef70: 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
ef80: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
ef90: 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
efa0: 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
efb0: 70 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  pe..*/.struct In
efc0: 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e  dexSample {.  un
efd0: 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
efe0: 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  z;        /* Val
eff0: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
f000: 51 4c 49 54 45 5f 54 45 58 54 20 6f 72 20 53 51  QLITE_TEXT or SQ
f010: 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20  LITE_BLOB */.   
f020: 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20 20 20   double r;      
f030: 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79   /* Value if eTy
f040: 70 65 20 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f  pe is SQLITE_FLO
f050: 41 54 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 54  AT or SQLITE_INT
f060: 45 47 45 52 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20  EGER */.  } u;. 
f070: 20 75 38 20 65 54 79 70 65 3b 20 20 20 20 20 20   u8 eType;      
f080: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
f090: 4c 2c 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45  L, SQLITE_INTEGE
f0a0: 52 20 2e 2e 2e 20 65 74 63 2e 20 2a 2f 0a 20 20  R ... etc. */.  
f0b0: 75 38 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  u8 nByte;       
f0c0: 20 20 2f 2a 20 53 69 7a 65 20 69 6e 20 62 79 74    /* Size in byt
f0d0: 65 20 6f 66 20 74 65 78 74 20 6f 72 20 62 6c 6f  e of text or blo
f0e0: 62 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  b. */.};../*.** 
f0f0: 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
f100: 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
f110: 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
f120: 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
f130: 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
f140: 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
f150: 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
f160: 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
f170: 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
f180: 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
f190: 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
f1a0: 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
f1b0: 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
f1c0: 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
f1d0: 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
f1e0: 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
f1f0: 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
f200: 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
f210: 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
f220: 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
f230: 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
f240: 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
f250: 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
f260: 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
f270: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
f280: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f290: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
f2a0: 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
f2b0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
f2c0: 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
f2d0: 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
f2e0: 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
f2f0: 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
f300: 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
f310: 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
f320: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
f330: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
f340: 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
f350: 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
f360: 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
f370: 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
f380: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
f390: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
f3a0: 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
f3b0: 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
f3c0: 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
f3d0: 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
f3e0: 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
f3f0: 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
f400: 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
f410: 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
f420: 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
f430: 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
f440: 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
f450: 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
f460: 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
f470: 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
f480: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
f490: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
f4a0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
f4b0: 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
f4c0: 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
f4d0: 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
f4e0: 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
f4f0: 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
f500: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
f510: 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
f520: 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
f530: 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
f540: 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
f550: 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
f560: 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
f570: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
f580: 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
f590: 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
f5a0: 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
f5b0: 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
f5c0: 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
f5d0: 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
f5e0: 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
f5f0: 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
f600: 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
f620: 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
f630: 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
f640: 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
f650: 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
f660: 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
f670: 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  ng index */.  Ex
f680: 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
f690: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f  ;     /* The gro
f6a0: 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a  up by clause */.
f6b0: 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
f6c0: 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
f6d0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
f6e0: 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
f6f0: 64 65 78 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  dex */.  struct 
f700: 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20  AggInfo_col {   
f710: 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c   /* For each col
f720: 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72  umn used in sour
f730: 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20  ce tables */.   
f740: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
f750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75            /* Sou
f760: 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
f770: 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
f780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
f790: 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
f7a0: 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
f7b0: 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
f7c0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
f7d0: 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
f7e0: 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63  within the sourc
f7f0: 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
f800: 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e  nt iSorterColumn
f810: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  ;       /* Colum
f820: 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  n number in the 
f830: 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
f840: 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f860: 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
f870: 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
f880: 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
f890: 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
f8a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
f8b0: 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73   original expres
f8c0: 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f  sion */.  } *aCo
f8d0: 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e  l;.  int nColumn
f8e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
f8f0: 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65  Number of used e
f900: 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d  ntries in aCol[]
f910: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d   */.  int nColum
f920: 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a  nAlloc;       /*
f930: 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
f940: 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
f950: 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
f960: 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
f970: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f980: 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
f990: 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
f9a0: 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
f9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9c0: 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
f9d0: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
f9e0: 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
f9f0: 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
fa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa10: 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
fa20: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
fa30: 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
fa40: 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
fa50: 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
fa60: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
fa70: 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
fa80: 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
fa90: 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
faa0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
fab0: 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
fac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
fad0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
fae0: 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
faf0: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
fb00: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
fb10: 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
fb20: 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
fb30: 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
fb40: 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
fb50: 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
fb60: 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
fb70: 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
fb80: 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
fb90: 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
fba0: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
fbb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
fbc0: 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
fbd0: 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 75 6e  [] */.  int nFun
fbe0: 63 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  cAlloc;         
fbf0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
fc00: 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
fc10: 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
fc20: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
fc30: 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
fc40: 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
fc50: 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
fc60: 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
fc70: 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
fc80: 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
fc90: 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
fca0: 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
fcb0: 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
fcc0: 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
fcd0: 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
fce0: 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
fcf0: 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
fd00: 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
fd10: 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
fd20: 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
fd30: 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
fd40: 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
fd50: 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
fd60: 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
fd70: 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
fd80: 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
fd90: 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
fda0: 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
fdb0: 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
fdc0: 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
fdd0: 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
fde0: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
fdf0: 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
fe00: 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
fe10: 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
fe20: 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
fe30: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
fe40: 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
fe50: 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
fe60: 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
fe70: 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
fe80: 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
fe90: 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
fea0: 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
feb0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
fec0: 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
fed0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
fee0: 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
fef0: 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
ff00: 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
ff10: 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
ff20: 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
ff30: 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
ff40: 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
ff50: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
ff60: 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
ff70: 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
ff80: 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
ff90: 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
ffa0: 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
ffb0: 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
ffc0: 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
ffd0: 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
ffe0: 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
fff0: 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
10000 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
10010 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
10020 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
10030 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
10040 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
10050 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
10060 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72   TK_BLOB, .** or
10070 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
10080 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
10090 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
100a0 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
100b0 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
100c0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
100d0 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
100e0 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
100f0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
10100 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  e .** variable n
10110 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
10120 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
10130 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
10140 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
10150 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
10160 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
10170 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
10180 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
10190 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
101a0 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
101b0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
101c0 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
101d0 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
101e0 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
101f0 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
10200 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
10210 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
10220 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
10230 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
10240 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
10250 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
10260 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
10270 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
10280 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
10290 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
102a0 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
102b0 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
102c0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
102d0 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
102e0 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
102f0 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
10300 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
10310 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
10320 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
10330 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
10340 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
10350 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
10360 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
10370 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
10380 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76  x.pList is .** v
10390 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
103a0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
103b0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
103c0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
103d0 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
103e0 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
103f0 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
10400 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
10410 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
10420 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
10430 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
10440 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
10450 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
10460 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
10470 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
10480 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
10490 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
104a0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
104b0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
104c0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
104d0 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
104e0 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
104f0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
10500 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
10510 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
10520 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
10530 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
10540 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
10550 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
10560 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
10570 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
10580 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
10590 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
105a0 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
105b0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
105c0 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65  ark .** characte
105d0 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
105e0 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
105f0 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
10600 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20  holds the index 
10610 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
10620 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
10630 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
10640 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
10650 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
10660 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
10670 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
10680 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
10690 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
106a0 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
106b0 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
106c0 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
106d0 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
106e0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
106f0 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
10700 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
10710 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
10720 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
10730 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
10740 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
10750 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
10760 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
10770 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
10780 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
10790 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
107a0 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
107b0 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
107c0 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
107d0 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
107e0 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
107f0 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
10800 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
10810 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
10820 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
10830 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
10840 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
10850 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
10860 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
10870 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
10880 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
10890 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
108a0 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
108b0 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
108c0 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
108d0 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
108e0 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
108f0 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
10900 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
10910 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
10920 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
10930 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
10940 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
10950 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
10960 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
10970 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
10980 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
10990 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
109a0 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
109b0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
109c0 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
109d0 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
109e0 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
109f0 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
10a00 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
10a10 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
10a20 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
10a30 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
10a40 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
10a50 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
10a60 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
10a70 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
10a80 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
10a90 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
10aa0 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
10ab0 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
10ac0 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
10ad0 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
10ae0 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
10af0 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
10b00 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
10b10 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
10b20 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
10b30 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
10b40 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
10b50 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
10b60 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
10b70 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
10b80 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
10b90 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
10ba0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
10bb0 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
10bc0 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
10bd0 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
10be0 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u16 flags;      
10bf0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
10c00 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
10c10 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
10c20 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
10c30 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
10c40 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
10c50 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
10c60 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
10c70 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
10c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
10c90 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20  nteger value if 
10ca0 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20  EP_IntValue */. 
10cb0 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } u;..  /* If t
10cc0 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
10cd0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
10ce0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
10cf0 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
10d00 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
10d10 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
10d20 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
10d30 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
10d40 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
10d50 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
10d60 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
10d70 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20   malfunction. . 
10d80 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
10d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10dc0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
10dd0 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
10de0 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
10df0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
10e00 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
10e10 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
10e20 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
10e30 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
10e40 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
10e50 20 61 72 67 75 6d 65 6e 74 73 20 6f 72 20 69 6e   arguments or in
10e60 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65 78   "<expr> IN (<ex
10e70 70 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20 20  pr-list)" */.   
10e80 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
10e90 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f  ;     /* Used fo
10ea0 72 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e  r sub-selects an
10eb0 64 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73  d "<expr> IN (<s
10ec0 65 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 7d 20  elect>)" */.  } 
10ed0 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
10ee0 6f 6c 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  oll;        /* T
10ef0 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79 70  he collation typ
10f00 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
10f10 6f 72 20 30 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  or 0 */..  /* If
10f20 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
10f30 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
10f40 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
10f50 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
10f60 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
10f70 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
10f80 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
10f90 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
10fa0 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
10fb0 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
10fc0 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
10fd0 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
10fe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10ff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11020 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 69 54  *****/..  int iT
11030 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
11040 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
11050 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
11060 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
11070 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11090 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
110a0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
110d0 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
110e0 30 20 2d 3e 20 6f 6c 64 20 2a 2f 0a 20 20 79 6e  0 -> old */.  yn
110f0 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  Var iColumn;    
11100 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
11110 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e  N: column index.
11120 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a    -1 for rowid..
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56           ** TK_V
11150 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c  ARIABLE: variabl
11160 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73  e number (always
11170 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36   >= 1). */.  i16
11180 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
11190 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
111a0 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
111b0 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
111c0 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
111d0 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
111e0 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
111f0 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
11200 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
11210 2f 0a 20 20 75 38 20 66 6c 61 67 73 32 3b 20 20  /.  u8 flags2;  
11220 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65             /* Se
11230 63 6f 6e 64 20 73 65 74 20 6f 66 20 66 6c 61 67  cond set of flag
11240 73 2e 20 20 45 50 32 5f 2e 2e 2e 20 2a 2f 0a 20  s.  EP2_... */. 
11250 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
11260 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 61 20          /* If a 
11270 54 4b 5f 52 45 47 49 53 54 45 52 2c 20 74 68 65  TK_REGISTER, the
11280 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
11290 6f 66 20 45 78 70 72 2e 6f 70 20 2a 2f 0a 20 20  of Expr.op */.  
112a0 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
112b0 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
112c0 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
112d0 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
112e0 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
112f0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
11300 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
11310 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
11320 6e 73 2e 20 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ns. */.#if SQLIT
11330 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
11340 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  >0.  int nHeight
11350 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
11360 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65  eight of the tre
11370 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73  e headed by this
11380 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   node */.#endif.
11390 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
113a0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
113b0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
113c0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
113d0 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
113e0 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
113f0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 72     0x0001  /* Or
11400 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20 6f  iginated in ON o
11410 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  r USING clause o
11420 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  f a join */.#def
11430 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
11440 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 6f 6e    0x0002  /* Con
11450 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
11460 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
11470 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
11480 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 20 30   EP_Resolved   0
11490 78 30 30 30 34 20 20 2f 2a 20 49 44 73 20 68 61  x0004  /* IDs ha
114a0 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
114b0 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23   to COLUMNs */.#
114c0 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20  define EP_Error 
114d0 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20       0x0008  /* 
114e0 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61  Expression conta
114f0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
11500 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
11510 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 20  e EP_Distinct   
11520 30 78 30 30 31 30 20 20 2f 2a 20 41 67 67 72 65  0x0010  /* Aggre
11530 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
11540 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
11550 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
11560 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30 78 30  P_VarSelect  0x0
11570 30 32 30 20 20 2f 2a 20 70 53 65 6c 65 63 74 20  020  /* pSelect 
11580 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
11590 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
115a0 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
115b0 74 65 64 20 20 30 78 30 30 34 30 20 20 2f 2a 20  ted  0x0040  /* 
115c0 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
115d0 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
115e0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
115f0 66 69 78 46 75 6e 63 20 20 30 78 30 30 38 30 20  fixFunc  0x0080 
11600 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
11610 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
11620 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
11630 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 78  */.#define EP_Ex
11640 70 43 6f 6c 6c 61 74 65 20 30 78 30 31 30 30 20  pCollate 0x0100 
11650 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
11660 71 75 65 6e 63 65 20 73 70 65 63 69 66 69 65 64  quence specified
11670 20 65 78 70 6c 69 63 69 74 6c 79 20 2a 2f 0a 23   explicitly */.#
11680 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65 64 44  define EP_FixedD
11690 65 73 74 20 20 30 78 30 32 30 30 20 20 2f 2a 20  est  0x0200  /* 
116a0 52 65 73 75 6c 74 20 6e 65 65 64 65 64 20 69 6e  Result needed in
116b0 20 61 20 73 70 65 63 69 66 69 63 20 72 65 67 69   a specific regi
116c0 73 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ster */.#define 
116d0 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 20 30 78  EP_IntValue   0x
116e0 30 34 30 30 20 20 2f 2a 20 49 6e 74 65 67 65 72  0400  /* Integer
116f0 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
11700 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
11710 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
11720 6c 65 63 74 20 20 30 78 30 38 30 30 20 20 2f 2a  lect  0x0800  /*
11730 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
11740 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
11750 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 0a 23  .pList is) */..#
11760 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65  define EP_Reduce
11770 64 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20  d    0x1000  /* 
11780 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45  Expr struct is E
11790 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
117a0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
117b0 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
117c0 6c 79 20 20 30 78 32 30 30 30 20 20 2f 2a 20 45  ly  0x2000  /* E
117d0 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45 58  xpr struct is EX
117e0 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
117f0 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
11800 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
11810 20 20 20 20 20 30 78 34 30 30 30 20 20 2f 2a 20       0x4000  /* 
11820 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
11830 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
11840 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f 2a   malloc() */../*
11850 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
11860 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
11870 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
11880 65 20 45 78 70 72 2e 66 6c 61 67 73 32 20 66 69  e Expr.flags2 fi
11890 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
118a0 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b 65  EP2_MallocedToke
118b0 6e 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4e 65  n  0x0001  /* Ne
118c0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
118d0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
118e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 32  n */.#define EP2
118f0 5f 49 72 72 65 64 75 63 69 62 6c 65 20 20 20 20  _Irreducible    
11900 30 78 30 30 30 32 20 20 2f 2a 20 43 61 6e 6e 6f  0x0002  /* Canno
11910 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
11920 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 0a 2f   this Expr */../
11930 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75 64 6f 2d  *.** The pseudo-
11940 72 6f 75 74 69 6e 65 20 73 71 6c 69 74 65 33 45  routine sqlite3E
11950 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
11960 65 20 73 65 74 73 20 74 68 65 20 45 50 32 5f 49  e sets the EP2_I
11970 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20 66 6c  rreducible.** fl
11980 61 67 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73  ag on an express
11990 69 6f 6e 20 73 74 72 75 63 74 75 72 65 2e 20 20  ion structure.  
119a0 54 68 69 73 20 66 6c 61 67 20 69 73 20 75 73 65  This flag is use
119b0 64 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c 79 2e  d for VV&A only.
119c0 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69 6e 65    The.** routine
119d0 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
119e0 61 73 20 61 20 6d 61 63 72 6f 20 74 68 61 74 20  as a macro that 
119f0 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65 6e 20  only works when 
11a00 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d 6f 64  in debugging mod
11a10 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f 74 20  e,.** so as not 
11a20 74 6f 20 62 75 72 64 65 6e 20 70 72 6f 64 75 63  to burden produc
11a30 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69  tion code..*/.#i
11a40 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
11a50 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
11a60 65 74 49 72 72 65 64 75 63 69 62 6c 65 28 58 29  etIrreducible(X)
11a70 20 20 28 58 29 2d 3e 66 6c 61 67 73 32 20 7c 3d    (X)->flags2 |=
11a80 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65   EP2_Irreducible
11a90 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
11aa0 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62  ExprSetIrreducib
11ab0 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  le(X).#endif../*
11ac0 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
11ad0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
11ae0 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
11af0 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
11b00 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66  .** Expr.flags f
11b10 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
11b20 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
11b30 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d  (E,P)     (((E)-
11b40 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
11b50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
11b60 73 41 6e 79 50 72 6f 70 65 72 74 79 28 45 2c 50  sAnyProperty(E,P
11b70 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
11b80 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
11b90 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
11ba0 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66  (E,P)     (E)->f
11bb0 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
11bc0 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65  e ExprClearPrope
11bd0 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e  rty(E,P)   (E)->
11be0 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  flags&=~(P)../*.
11bf0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
11c00 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
11c10 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
11c20 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
11c30 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
11c40 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
11c50 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
11c60 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
11c70 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
11c80 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
11c90 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
11ca0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
11cb0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
11cc0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
11cd0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
11ce0 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
11cf0 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
11d00 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
11d10 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
11d20 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
11d30 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
11d40 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
11d50 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
11d60 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
11d70 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
11d80 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
11d90 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
11da0 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
11db0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
11dc0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
11dd0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
11de0 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
11df0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
11e00 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
11e10 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
11e20 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
11e30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
11e40 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
11e50 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
11e60 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
11e70 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
11e80 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
11e90 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
11ea0 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
11eb0 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
11ec0 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
11ed0 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
11ee0 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
11ef0 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
11f00 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
11f10 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
11f20 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
11f30 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
11f40 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
11f50 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
11f60 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
11f70 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
11f80 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
11f90 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
11fa0 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
11fb0 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
11fc0 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2f 0a 73 74   not used..*/.st
11fd0 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
11fe0 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
11ff0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12000 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
12010 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
12020 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20  .  int nAlloc;  
12030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12040 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
12050 6c 6c 6f 63 61 74 65 64 20 62 65 6c 6f 77 20 2a  llocated below *
12060 2f 0a 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72  /.  int iECursor
12070 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44  ;          /* VD
12080 42 45 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69  BE Cursor associ
12090 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 45  ated with this E
120a0 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72  xprList */.  str
120b0 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
120c0 6d 20 7b 0a 20 20 20 20 45 78 70 72 20 2a 70 45  m {.    Expr *pE
120d0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  xpr;           /
120e0 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
120f0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
12100 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
12110 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
12120 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12130 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
12140 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
12150 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  pan;           /
12160 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
12170 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
12180 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
12190 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
121a0 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72  /* 1 for DESC or
121b0 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20   0 for ASC */.  
121c0 20 20 75 38 20 64 6f 6e 65 3b 20 20 20 20 20 20    u8 done;      
121d0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c           /* A fl
121e0 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
121f0 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
12200 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
12210 20 20 75 31 36 20 69 43 6f 6c 3b 20 20 20 20 20    u16 iCol;     
12220 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
12230 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
12240 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
12250 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31 36  t set */.    u16
12260 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   iAlias;        
12270 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
12280 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
12290 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
122a0 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
122b0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
122c0 74 72 79 20 66 6f 72 20 65 61 63 68 20 65 78 70  try for each exp
122d0 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  ression */.};../
122e0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
122f0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
12300 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68  re is used by th
12310 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f  e parser to reco
12320 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70  rd both.** the p
12330 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e  arse tree for an
12340 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
12350 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75  the span of inpu
12360 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a  t text for an.**
12370 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a   expression..*/.
12380 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
12390 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b  {.  Expr *pExpr;
123a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
123b0 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73   expression pars
123c0 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73  e tree */.  cons
123d0 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20  t char *zStart; 
123e0 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61    /* First chara
123f0 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65  cter of input te
12400 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
12410 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a  ar *zEnd;     /*
12420 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70   One character p
12430 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69  ast the end of i
12440 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a  nput text */.};.
12450 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
12460 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
12470 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
12480 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
12490 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
124a0 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
124b0 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
124c0 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
124d0 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
124e0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
124f0 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
12500 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
12510 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
12520 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
12530 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
12540 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
12550 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
12560 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
12570 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
12580 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
12590 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
125a0 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
125b0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
125c0 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
125d0 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
125e0 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
125f0 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
12600 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
12610 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
12620 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
12630 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
12640 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
12650 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
12660 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
12670 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
12680 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
12690 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
126a0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
126b0 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
126c0 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
126d0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
126e0 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
126f0 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
12700 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
12710 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
12720 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
12730 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
12740 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
12750 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63   */.  int nAlloc
12760 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
12770 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
12780 63 61 74 65 64 20 66 6f 72 20 61 5b 5d 20 62 65  cated for a[] be
12790 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
127a0 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
127b0 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
127c0 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
127d0 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
127e0 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
127f0 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
12800 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
12810 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
12820 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
12830 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
12840 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
12850 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
12860 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
12870 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
12880 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
12890 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
128a0 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
128b0 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
128c0 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
128d0 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
128e0 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
128f0 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
12900 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
12910 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
12920 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )*8))../*.** The
12930 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
12940 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
12950 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
12960 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
12970 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
12980 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
12990 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
129a0 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
129b0 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
129c0 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
129d0 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
129e0 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
129f0 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
12a00 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
12a10 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12a20 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
12a30 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
12a40 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
12a50 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
12a60 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
12a70 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
12a80 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
12a90 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
12aa0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
12ab0 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
12ac0 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
12ad0 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
12ae0 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
12af0 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
12b00 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
12b10 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
12b20 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
12b30 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
12b40 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
12b50 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
12b60 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
12b70 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
12b80 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
12b90 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
12ba0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
12bb0 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
12bc0 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
12bd0 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
12be0 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
12bf0 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
12c00 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
12c10 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
12c20 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
12c30 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
12c40 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
12c50 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
12c60 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
12c70 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
12c80 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
12c90 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
12ca0 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
12cb0 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
12cc0 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
12cd0 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
12ce0 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
12cf0 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
12d00 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
12d10 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
12d20 74 20 7b 0a 20 20 69 31 36 20 6e 53 72 63 3b 20  t {.  i16 nSrc; 
12d30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12d40 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
12d50 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
12d60 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
12d70 20 69 31 36 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   i16 nAlloc;    
12d80 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
12d90 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
12da0 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
12db0 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
12dc0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
12dd0 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f  r *zDatabase;  /
12de0 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
12df0 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20  se holding this 
12e00 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
12e10 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
12e20 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
12e30 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
12e40 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20  *zAlias;     /* 
12e50 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20  The "B" part of 
12e60 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73  a "A AS B" phras
12e70 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65  e.  zName is the
12e80 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c   "A" */.    Tabl
12e90 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
12ea0 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f   An SQL table co
12eb0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
12ec0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  Name */.    Sele
12ed0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a  ct *pSelect;  /*
12ee0 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   A SELECT statem
12ef0 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63  ent used in plac
12f00 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
12f10 65 20 2a 2f 0a 20 20 20 20 75 38 20 69 73 50 6f  e */.    u8 isPo
12f20 70 75 6c 61 74 65 64 3b 20 20 20 2f 2a 20 54 65  pulated;   /* Te
12f30 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 61 73  mporary table as
12f40 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 53 45  sociated with SE
12f50 4c 45 43 54 20 69 73 20 70 6f 70 75 6c 61 74 65  LECT is populate
12f60 64 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e  d */.    u8 join
12f70 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
12f80 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
12f90 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
12fa0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
12fb0 0a 20 20 20 20 75 38 20 6e 6f 74 49 6e 64 65 78  .    u8 notIndex
12fc0 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ed;    /* True i
12fd0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
12fe0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
12ff0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
13000 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
13010 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b     u8 iSelectId;
13020 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65       /* If pSele
13030 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66  ct!=0, the id of
13040 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20   the sub-select 
13050 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66  in EQP */.#endif
13060 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72  .    int iCursor
13070 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44  ;      /* The VD
13080 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  BE cursor number
13090 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
130a0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
130b0 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20    Expr *pOn;    
130c0 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c      /* The ON cl
130d0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
130e0 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55  /.    IdList *pU
130f0 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55  sing;   /* The U
13100 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
13110 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74   join */.    Bit
13120 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f  mask colUsed;  /
13130 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73  * Bit N (1<<N) s
13140 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f  et if column N o
13150 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a  f pTab is used *
13160 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64  /.    char *zInd
13170 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74  ex;     /* Ident
13180 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45  ifier from "INDE
13190 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22  XED BY <zIndex>"
131a0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49   clause */.    I
131b0 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
131c0 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
131d0 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
131e0 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20  g to zIndex, if 
131f0 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  any */.  } a[1];
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13210 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
13220 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
13230 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
13240 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
13250 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
13260 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
13270 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
13280 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
13290 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
132a0 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
132b0 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
132c0 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
132d0 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
132e0 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
132f0 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
13300 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
13310 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
13320 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
13330 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
13340 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
13350 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
13360 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
13370 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
13380 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
13390 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
133a0 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
133b0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
133c0 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
133d0 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
133e0 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
133f0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
13400 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
13410 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
13420 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
13430 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
13440 2a 2a 20 41 20 57 68 65 72 65 50 6c 61 6e 20 6f  ** A WherePlan o
13450 62 6a 65 63 74 20 68 6f 6c 64 73 20 69 6e 66 6f  bject holds info
13460 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 64 65 73  rmation that des
13470 63 72 69 62 65 73 20 61 20 6c 6f 6f 6b 75 70 0a  cribes a lookup.
13480 2a 2a 20 73 74 72 61 74 65 67 79 2e 0a 2a 2a 0a  ** strategy..**.
13490 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  ** This object i
134a0 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65  s intended to be
134b0 20 6f 70 61 71 75 65 20 6f 75 74 73 69 64 65 20   opaque outside 
134c0 6f 66 20 74 68 65 20 77 68 65 72 65 2e 63 20 6d  of the where.c m
134d0 6f 64 75 6c 65 2e 0a 2a 2a 20 49 74 20 69 73 20  odule..** It is 
134e0 69 6e 63 6c 75 64 65 64 20 68 65 72 65 20 6f 6e  included here on
134f0 6c 79 20 73 6f 20 74 68 61 74 20 74 68 61 74 20  ly so that that 
13500 63 6f 6d 70 69 6c 65 72 20 77 69 6c 6c 20 6b 6e  compiler will kn
13510 6f 77 20 68 6f 77 20 62 69 67 20 69 74 0a 2a 2a  ow how big it.**
13520 20 69 73 2e 20 20 4e 6f 6e 65 20 6f 66 20 74 68   is.  None of th
13530 65 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73  e fields in this
13540 20 6f 62 6a 65 63 74 20 73 68 6f 75 6c 64 20 62   object should b
13550 65 20 75 73 65 64 20 6f 75 74 73 69 64 65 20 6f  e used outside o
13560 66 0a 2a 2a 20 74 68 65 20 77 68 65 72 65 2e 63  f.** the where.c
13570 20 6d 6f 64 75 6c 65 2e 0a 2a 2a 0a 2a 2a 20 57   module..**.** W
13580 69 74 68 69 6e 20 74 68 65 20 75 6e 69 6f 6e 2c  ithin the union,
13590 20 70 49 64 78 20 69 73 20 6f 6e 6c 79 20 75 73   pIdx is only us
135a0 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26  ed when wsFlags&
135b0 57 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73  WHERE_INDEXED is
135c0 20 74 72 75 65 2e 0a 2a 2a 20 70 54 65 72 6d 20   true..** pTerm 
135d0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
135e0 6e 20 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f  n wsFlags&WHERE_
135f0 4d 55 4c 54 49 5f 4f 52 20 69 73 20 74 72 75 65  MULTI_OR is true
13600 2e 20 20 41 6e 64 20 70 56 74 61 62 49 64 78 0a  .  And pVtabIdx.
13610 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  ** is only used 
13620 77 68 65 6e 20 77 73 46 6c 61 67 73 26 57 48 45  when wsFlags&WHE
13630 52 45 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  RE_VIRTUALTABLE 
13640 69 73 20 74 72 75 65 2e 20 20 49 74 20 69 73 20  is true.  It is 
13650 6e 65 76 65 72 20 74 68 65 0a 2a 2a 20 63 61 73  never the.** cas
13660 65 20 74 68 61 74 20 6d 6f 72 65 20 74 68 61 6e  e that more than
13670 20 6f 6e 65 20 6f 66 20 74 68 65 73 65 20 63 6f   one of these co
13680 6e 64 69 74 69 6f 6e 73 20 69 73 20 74 72 75 65  nditions is true
13690 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72  ..*/.struct Wher
136a0 65 50 6c 61 6e 20 7b 0a 20 20 75 33 32 20 77 73  ePlan {.  u32 ws
136b0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
136c0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52           /* WHER
136d0 45 5f 2a 20 66 6c 61 67 73 20 74 68 61 74 20 64  E_* flags that d
136e0 65 73 63 72 69 62 65 20 74 68 65 20 73 74 72 61  escribe the stra
136f0 74 65 67 79 20 2a 2f 0a 20 20 75 33 32 20 6e 45  tegy */.  u32 nE
13700 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
13710 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13720 65 72 20 6f 66 20 3d 3d 20 63 6f 6e 73 74 72 61  er of == constra
13730 69 6e 74 73 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  ints */.  double
13740 20 6e 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20   nRow;          
13750 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69           /* Esti
13760 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
13770 72 6f 77 73 20 28 66 6f 72 20 45 51 50 29 20 2a  rows (for EQP) *
13780 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
13790 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20  Index *pIdx;    
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
137b0 2a 20 49 6e 64 65 78 20 77 68 65 6e 20 57 48 45  * Index when WHE
137c0 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20 74 72  RE_INDEXED is tr
137d0 75 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ue */.    struct
137e0 20 57 68 65 72 65 54 65 72 6d 20 2a 70 54 65 72   WhereTerm *pTer
137f0 6d 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52  m;       /* WHER
13800 45 20 63 6c 61 75 73 65 20 74 65 72 6d 20 66 6f  E clause term fo
13810 72 20 4f 52 2d 73 65 61 72 63 68 20 2a 2f 0a 20  r OR-search */. 
13820 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78     sqlite3_index
13830 5f 69 6e 66 6f 20 2a 70 56 74 61 62 49 64 78 3b  _info *pVtabIdx;
13840 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
13850 6c 65 20 69 6e 64 65 78 20 74 6f 20 75 73 65 20  le index to use 
13860 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
13870 0a 2a 2a 20 46 6f 72 20 65 61 63 68 20 6e 65 73  .** For each nes
13880 74 65 64 20 6c 6f 6f 70 20 69 6e 20 61 20 57 48  ted loop in a WH
13890 45 52 45 20 63 6c 61 75 73 65 20 69 6d 70 6c 65  ERE clause imple
138a0 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 57  mentation, the W
138b0 68 65 72 65 49 6e 66 6f 0a 2a 2a 20 73 74 72 75  hereInfo.** stru
138c0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61  cture contains a
138d0 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65   single instance
138e0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
138f0 72 65 2e 20 20 54 68 69 73 20 73 74 72 75 63 74  re.  This struct
13900 75 72 65 0a 2a 2a 20 69 73 20 69 6e 74 65 6e 64  ure.** is intend
13910 65 64 20 74 6f 20 62 65 20 70 72 69 76 61 74 65  ed to be private
13920 20 74 68 65 20 74 68 65 20 77 68 65 72 65 2e 63   the the where.c
13930 20 6d 6f 64 75 6c 65 20 61 6e 64 20 73 68 6f 75   module and shou
13940 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
13950 65 73 73 20 6f 72 20 6d 6f 64 69 66 69 65 64 20  ess or modified 
13960 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c 65 73  by other modules
13970 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 49 64 78  ..**.** The pIdx
13980 49 6e 66 6f 20 66 69 65 6c 64 20 69 73 20 75 73  Info field is us
13990 65 64 20 74 6f 20 68 65 6c 70 20 70 69 63 6b 20  ed to help pick 
139a0 74 68 65 20 62 65 73 74 20 69 6e 64 65 78 20 6f  the best index o
139b0 6e 20 61 0a 2a 2a 20 76 69 72 74 75 61 6c 20 74  n a.** virtual t
139c0 61 62 6c 65 2e 20 20 54 68 65 20 70 49 64 78 49  able.  The pIdxI
139d0 6e 66 6f 20 70 6f 69 6e 74 65 72 20 63 6f 6e 74  nfo pointer cont
139e0 61 69 6e 73 20 69 6e 64 65 78 69 6e 67 0a 2a 2a  ains indexing.**
139f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
13a00 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c 65 20   the i-th table 
13a10 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
13a20 73 65 20 62 65 66 6f 72 65 20 72 65 6f 72 64 65  se before reorde
13a30 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20 74 68 65  ring..** All the
13a40 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65   pIdxInfo pointe
13a50 72 73 20 61 72 65 20 66 72 65 65 64 20 62 79 20  rs are freed by 
13a60 77 68 65 72 65 49 6e 66 6f 46 72 65 65 28 29 20  whereInfoFree() 
13a70 69 6e 20 77 68 65 72 65 2e 63 2e 0a 2a 2a 20 41  in where.c..** A
13a80 6c 6c 20 6f 74 68 65 72 20 69 6e 66 6f 72 6d 61  ll other informa
13a90 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 2d 74 68  tion in the i-th
13aa0 20 57 68 65 72 65 4c 65 76 65 6c 20 6f 62 6a 65   WhereLevel obje
13ab0 63 74 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20  ct for the i-th 
13ac0 74 61 62 6c 65 0a 2a 2a 20 61 66 74 65 72 20 46  table.** after F
13ad0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 72 64 65 72  ROM clause order
13ae0 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  ing..*/.struct W
13af0 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20 57 68  hereLevel {.  Wh
13b00 65 72 65 50 6c 61 6e 20 70 6c 61 6e 3b 20 20 20  erePlan plan;   
13b10 20 20 20 20 2f 2a 20 71 75 65 72 79 20 70 6c 61      /* query pla
13b20 6e 20 66 6f 72 20 74 68 69 73 20 65 6c 65 6d 65  n for this eleme
13b30 6e 74 20 6f 66 20 74 68 65 20 46 52 4f 4d 20 63  nt of the FROM c
13b40 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lause */.  int i
13b50 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20 20 20 20  LeftJoin;       
13b60 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20   /* Memory cell 
13b70 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
13b80 74 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49  t LEFT OUTER JOI
13b90 4e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61 62 43  N */.  int iTabC
13ba0 75 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ur;          /* 
13bb0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13bc0 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
13bd0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  he table */.  in
13be0 74 20 69 49 64 78 43 75 72 3b 20 20 20 20 20 20  t iIdxCur;      
13bf0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
13c00 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61  cursor used to a
13c10 63 63 65 73 73 20 70 49 64 78 20 2a 2f 0a 20 20  ccess pIdx */.  
13c20 69 6e 74 20 61 64 64 72 42 72 6b 3b 20 20 20 20  int addrBrk;    
13c30 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
13c40 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74 20  re to break out 
13c50 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  of the loop */. 
13c60 20 69 6e 74 20 61 64 64 72 4e 78 74 3b 20 20 20   int addrNxt;   
13c70 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
13c80 65 72 65 20 74 6f 20 73 74 61 72 74 20 74 68 65  ere to start the
13c90 20 6e 65 78 74 20 49 4e 20 63 6f 6d 62 69 6e 61   next IN combina
13ca0 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61 64  tion */.  int ad
13cb0 64 72 43 6f 6e 74 3b 20 20 20 20 20 20 20 20 20  drCont;         
13cc0 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
13cd0 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68  continue with th
13ce0 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79 63 6c  e next loop cycl
13cf0 65 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 46  e */.  int addrF
13d00 69 72 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  irst;        /* 
13d10 46 69 72 73 74 20 69 6e 73 74 72 75 63 74 69 6f  First instructio
13d20 6e 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 6f 66  n of interior of
13d30 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75   the loop */.  u
13d40 38 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20  8 iFrom;        
13d50 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
13d60 74 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  try in the FROM 
13d70 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20 6f  clause */.  u8 o
13d80 70 2c 20 70 35 3b 20 20 20 20 20 20 20 20 20 20  p, p5;          
13d90 20 20 2f 2a 20 4f 70 63 6f 64 65 20 61 6e 64 20    /* Opcode and 
13da0 50 35 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  P5 of the opcode
13db0 20 74 68 61 74 20 65 6e 64 73 20 74 68 65 20 6c   that ends the l
13dc0 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 70 31 2c  oop */.  int p1,
13dd0 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f   p2;           /
13de0 2a 20 4f 70 65 72 61 6e 64 73 20 6f 66 20 74 68  * Operands of th
13df0 65 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  e opcode used to
13e00 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70 20 2a   ends the loop *
13e10 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
13e20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66            /* Inf
13e30 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 64 65  ormation that de
13e40 70 65 6e 64 73 20 6f 6e 20 70 6c 61 6e 2e 77 73  pends on plan.ws
13e50 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20 73 74 72  Flags */.    str
13e60 75 63 74 20 7b 0a 20 20 20 20 20 20 69 6e 74 20  uct {.      int 
13e70 6e 49 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  nIn;            
13e80 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
13e90 6e 74 72 69 65 73 20 69 6e 20 61 49 6e 4c 6f 6f  ntries in aInLoo
13ea0 70 5b 5d 20 2a 2f 0a 20 20 20 20 20 20 73 74 72  p[] */.      str
13eb0 75 63 74 20 49 6e 4c 6f 6f 70 20 7b 0a 20 20 20  uct InLoop {.   
13ec0 20 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20       int iCur;  
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
13ee0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 75  he VDBE cursor u
13ef0 73 65 64 20 62 79 20 74 68 69 73 20 49 4e 20 6f  sed by this IN o
13f00 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 20  perator */.     
13f10 20 20 20 69 6e 74 20 61 64 64 72 49 6e 54 6f 70     int addrInTop
13f20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 70  ;         /* Top
13f30 20 6f 66 20 74 68 65 20 49 4e 20 6c 6f 6f 70 20   of the IN loop 
13f40 2a 2f 0a 20 20 20 20 20 20 7d 20 2a 61 49 6e 4c  */.      } *aInL
13f50 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oop;           /
13f60 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
13f70 6f 75 74 20 65 61 63 68 20 6e 65 73 74 65 64 20  out each nested 
13f80 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20  IN operator */. 
13f90 20 20 20 7d 20 69 6e 3b 20 20 20 20 20 20 20 20     } in;        
13fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
13fb0 20 77 68 65 6e 20 70 6c 61 6e 2e 77 73 46 6c 61   when plan.wsFla
13fc0 67 73 26 57 48 45 52 45 5f 49 4e 5f 41 42 4c 45  gs&WHERE_IN_ABLE
13fd0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
13fe0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   The following f
13ff0 69 65 6c 64 20 69 73 20 72 65 61 6c 6c 79 20 6e  ield is really n
14000 6f 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  ot part of the c
14010 75 72 72 65 6e 74 20 6c 65 76 65 6c 2e 20 20 42  urrent level.  B
14020 75 74 0a 20 20 2a 2a 20 77 65 20 6e 65 65 64 20  ut.  ** we need 
14030 61 20 70 6c 61 63 65 20 74 6f 20 63 61 63 68 65  a place to cache
14040 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
14050 6e 64 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ndex information
14060 20 66 6f 72 20 65 61 63 68 0a 20 20 2a 2a 20 76   for each.  ** v
14070 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
14080 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
14090 61 6e 64 20 74 68 65 20 57 68 65 72 65 4c 65 76  and the WhereLev
140a0 65 6c 20 73 74 72 75 63 74 75 72 65 20 69 73 0a  el structure is.
140b0 20 20 2a 2a 20 61 20 63 6f 6e 76 65 6e 69 65 6e    ** a convenien
140c0 74 20 70 6c 61 63 65 20 73 69 6e 63 65 20 74 68  t place since th
140d0 65 72 65 20 69 73 20 6f 6e 65 20 57 68 65 72 65  ere is one Where
140e0 4c 65 76 65 6c 20 66 6f 72 20 65 61 63 68 20 46  Level for each F
140f0 52 4f 4d 20 63 6c 61 75 73 65 0a 20 20 2a 2a 20  ROM clause.  ** 
14100 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20  element..  */.  
14110 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
14120 66 6f 20 2a 70 49 64 78 49 6e 66 6f 3b 20 20 2f  fo *pIdxInfo;  /
14130 2a 20 49 6e 64 65 78 20 69 6e 66 6f 20 66 6f 72  * Index info for
14140 20 6e 2d 74 68 20 73 6f 75 72 63 65 20 74 61 62   n-th source tab
14150 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
14160 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
14170 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
14180 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
14190 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
141a0 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
141b0 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
141c0 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f  Flags member..*/
141d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
141e0 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
141f0 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
14200 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14210 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
14220 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
14230 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
14240 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
14250 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14260 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
14270 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
14280 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
14290 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
142a0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
142b0 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
142c0 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
142d0 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
142e0 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
142f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50  define WHERE_DUP
14300 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78  LICATES_OK    0x
14310 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65  0008 /* Ok to re
14320 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20  turn a row more 
14330 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65  than once */.#de
14340 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f  fine WHERE_OMIT_
14350 4f 50 45 4e 20 20 20 20 20 20 20 20 30 78 30 30  OPEN        0x00
14360 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73  10 /* Table curs
14370 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20  ors are already 
14380 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
14390 57 48 45 52 45 5f 4f 4d 49 54 5f 43 4c 4f 53 45  WHERE_OMIT_CLOSE
143a0 20 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a         0x0020 /*
143b0 20 4f 6d 69 74 20 63 6c 6f 73 65 20 6f 66 20 74   Omit close of t
143c0 61 62 6c 65 20 26 20 69 6e 64 65 78 20 63 75 72  able & index cur
143d0 73 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sors */.#define 
143e0 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c  WHERE_FORCE_TABL
143f0 45 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a  E      0x0040 /*
14400 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69   Do not use an i
14410 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68  ndex-only search
14420 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14430 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20  E_ONETABLE_ONLY 
14440 20 20 20 30 78 30 30 38 30 20 2f 2a 20 4f 6e 6c     0x0080 /* Onl
14450 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74  y code the 1st t
14460 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74  able in pTabList
14470 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 57   */../*.** The W
14480 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f 63  HERE clause proc
14490 65 73 73 69 6e 67 20 72 6f 75 74 69 6e 65 20 68  essing routine h
144a0 61 73 20 74 77 6f 20 68 61 6c 76 65 73 2e 20 20  as two halves.  
144b0 54 68 65 0a 2a 2a 20 66 69 72 73 74 20 70 61 72  The.** first par
144c0 74 20 64 6f 65 73 20 74 68 65 20 73 74 61 72 74  t does the start
144d0 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f   of the WHERE lo
144e0 6f 70 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e  op and the secon
144f0 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65 73 20 74  d.** half does t
14500 68 65 20 74 61 69 6c 20 6f 66 20 74 68 65 20 57  he tail of the W
14510 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41 6e 20 69  HERE loop.  An i
14520 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
14530 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
14540 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
14550 66 69 72 73 74 20 68 61 6c 66 20 61 6e 64 20 70  first half and p
14560 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f 20 74 68  assed.** into th
14570 65 20 73 65 63 6f 6e 64 20 68 61 6c 66 20 74 6f  e second half to
14580 20 67 69 76 65 20 73 6f 6d 65 20 63 6f 6e 74 69   give some conti
14590 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72 75 63 74  nuity..*/.struct
145a0 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a 20 20 50   WhereInfo {.  P
145b0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
145c0 20 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20 61      /* Parsing a
145d0 6e 64 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  nd code generati
145e0 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
145f0 75 31 36 20 77 63 74 72 6c 46 6c 61 67 73 3b 20  u16 wctrlFlags; 
14600 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 6f 72       /* Flags or
14610 69 67 69 6e 61 6c 6c 79 20 70 61 73 73 65 64 20  iginally passed 
14620 74 6f 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  to sqlite3WhereB
14630 65 67 69 6e 28 29 20 2a 2f 0a 20 20 75 38 20 6f  egin() */.  u8 o
14640 6b 4f 6e 65 50 61 73 73 3b 20 20 20 20 20 20 20  kOnePass;       
14650 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e   /* Ok to use on
14660 65 2d 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d  e-pass algorithm
14670 20 66 6f 72 20 55 50 44 41 54 45 20 6f 72 20 44   for UPDATE or D
14680 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 75 6e  ELETE */.  u8 un
14690 74 65 73 74 65 64 54 65 72 6d 73 3b 20 20 20 20  testedTerms;    
146a0 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52 45  /* Not all WHERE
146b0 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65 64 20   terms resolved 
146c0 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a 2f  by outer loop */
146d0 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 54 61 62  .  SrcList *pTab
146e0 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
146f0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61 62    /* List of tab
14700 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20  les in the join 
14710 2a 2f 0a 20 20 69 6e 74 20 69 54 6f 70 3b 20 20  */.  int iTop;  
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14730 20 20 20 20 2f 2a 20 54 68 65 20 76 65 72 79 20      /* The very 
14740 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
14750 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20   WHERE loop */. 
14760 20 69 6e 74 20 69 43 6f 6e 74 69 6e 75 65 3b 20   int iContinue; 
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
14790 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65  continue with ne
147a0 78 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  xt record */.  i
147b0 6e 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20  nt iBreak;      
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
147d0 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72   Jump here to br
147e0 65 61 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  eak out of the l
147f0 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 65  oop */.  int nLe
14800 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  vel;            
14810 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14820 72 20 6f 66 20 6e 65 73 74 65 64 20 6c 6f 6f 70  r of nested loop
14830 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 57 68 65   */.  struct Whe
14840 72 65 43 6c 61 75 73 65 20 2a 70 57 43 3b 20 20  reClause *pWC;  
14850 20 20 20 20 20 2f 2a 20 44 65 63 6f 6d 70 6f 73       /* Decompos
14860 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48 45  ition of the WHE
14870 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 64  RE clause */.  d
14880 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75 65 72  ouble savedNQuer
14890 79 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 2f 2a  yLoop;        /*
148a0 20 70 50 61 72 73 65 2d 3e 6e 51 75 65 72 79 4c   pParse->nQueryL
148b0 6f 6f 70 20 6f 75 74 73 69 64 65 20 74 68 65 20  oop outside the 
148c0 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20  WHERE loop */.  
148d0 64 6f 75 62 6c 65 20 6e 52 6f 77 4f 75 74 3b 20  double nRowOut; 
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
148f0 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
14900 65 72 20 6f 66 20 6f 75 74 70 75 74 20 72 6f 77  er of output row
14910 73 20 2a 2f 0a 20 20 57 68 65 72 65 4c 65 76 65  s */.  WhereLeve
14920 6c 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  l a[1];         
14930 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
14940 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
14950 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57 48 45  nest loop in WHE
14960 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  RE */.};../*.** 
14970 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
14980 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
14990 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
149a0 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
149b0 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
149c0 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
149d0 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
149e0 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
149f0 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
14a00 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
14a10 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
14a20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
14a30 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
14a40 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
14a50 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
14a60 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
14a70 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
14a80 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
14a90 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
14aa0 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
14ab0 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
14ac0 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
14ad0 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
14ae0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
14af0 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
14b00 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
14b10 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
14b20 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
14b30 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
14b40 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
14b50 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
14b60 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
14b70 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  st .** context i
14b80 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74  s searched first
14b90 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69  .  If no match i
14ba0 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78  s found, the nex
14bb0 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65  t outer.** conte
14bc0 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  xt is checked.  
14bd0 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c  If there is stil
14be0 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20  l no match, the 
14bf0 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20  next context.** 
14c00 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69  is checked.  Thi
14c10 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e  s process contin
14c20 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72  ues until either
14c30 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
14c40 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74  d.** or all cont
14c50 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20  exts are check. 
14c60 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73   When a match is
14c70 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66   found, the nRef
14c80 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68   member of.** th
14c90 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69  e context contai
14ca0 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69  ning the match i
14cb0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a  s incremented. .
14cc0 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
14cd0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
14ce0 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
14cf0 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
14d00 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
14d10 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
14d20 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
14d30 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
14d40 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
14d50 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
14d60 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
14d70 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
14d80 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
14d90 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
14da0 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
14db0 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
14dc0 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
14dd0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
14de0 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
14df0 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
14e00 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
14e10 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
14e20 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
14e30 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
14e40 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
14e50 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
14e60 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d  onal list of nam
14e70 65 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  ed expressions *
14e80 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
14e90 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14ea0 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
14eb0 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
14ec0 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
14ed0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
14ee0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
14ef0 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
14f00 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
14f10 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 61 6c 6c  ames */.  u8 all
14f20 6f 77 41 67 67 3b 20 20 20 20 20 20 20 20 20 2f  owAgg;         /
14f30 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
14f40 74 69 6f 6e 73 20 61 6c 6c 6f 77 65 64 20 68 65  tions allowed he
14f50 72 65 20 2a 2f 0a 20 20 75 38 20 68 61 73 41 67  re */.  u8 hasAg
14f60 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
14f70 54 72 75 65 20 69 66 20 61 67 67 72 65 67 61 74  True if aggregat
14f80 65 73 20 61 72 65 20 73 65 65 6e 20 2a 2f 0a 20  es are seen */. 
14f90 20 75 38 20 69 73 43 68 65 63 6b 3b 20 20 20 20   u8 isCheck;    
14fa0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
14fb0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
14fc0 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
14fd0 74 72 61 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  traint */.  int 
14fe0 6e 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  nDepth;         
14ff0 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 73 75 62   /* Depth of sub
15000 71 75 65 72 79 20 72 65 63 75 72 73 69 6f 6e 2e  query recursion.
15010 20 31 20 66 6f 72 20 6e 6f 20 72 65 63 75 72 73   1 for no recurs
15020 69 6f 6e 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  ion */.  AggInfo
15030 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
15040 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
15050 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
15060 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
15070 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
15080 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
15090 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
150a0 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
150b0 72 6d 6f 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  rmost */.};../*.
150c0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
150d0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
150e0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
150f0 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
15100 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
15110 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
15120 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
15130 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
15140 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
15150 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
15160 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
15170 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
15180 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
15190 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
151a0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
151b0 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
151c0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
151d0 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
151e0 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
151f0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
15200 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
15210 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
15220 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
15230 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
15240 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
15250 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
15260 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
15270 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
15280 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
15290 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
152a0 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
152b0 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
152c0 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
152d0 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
152e0 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
152f0 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
15300 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
15310 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
15320 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
15330 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
15340 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
15350 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
15360 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
15370 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
15380 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
15390 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
153a0 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
153b0 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
153c0 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
153d0 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
153e0 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
153f0 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
15400 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
15410 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
15420 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
15430 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
15440 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
15450 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
15460 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
15470 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
15480 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
15490 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
154a0 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
154b0 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
154c0 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
154d0 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
154e0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
154f0 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
15500 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
15510 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
15520 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
15530 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
15560 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
15570 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
15580 54 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  T */.  char affi
15590 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
155a0 20 4d 61 6b 65 52 65 63 6f 72 64 20 77 69 74 68   MakeRecord with
155b0 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 66   this affinity f
155c0 6f 72 20 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  or SRT_Set */.  
155d0 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u16 selFlags;   
155e0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
155f0 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
15600 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
15610 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
15620 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
15630 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
15640 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15650 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
15660 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
15670 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
15680 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
15690 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
156a0 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
156b0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
156c0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
156d0 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
156e0 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
156f0 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
15700 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
15710 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
15720 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
15730 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
15740 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
15750 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
15760 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
15770 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
15780 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  und */.  Select 
15790 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20  *pRightmost;    
157a0 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65  /* Right-most se
157b0 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
157c0 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
157d0 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ent */.  Expr *p
157e0 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
157f0 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
15800 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
15810 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
15820 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
15830 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
15840 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
15850 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
15860 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
15870 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
15880 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
15890 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
158a0 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
158b0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70   */.  int addrOp
158c0 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20  enEphm[3];   /* 
158d0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
158e0 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
158f0 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
15900 20 64 6f 75 62 6c 65 20 6e 53 65 6c 65 63 74 52   double nSelectR
15910 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  ow;     /* Estim
15920 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72  ated number of r
15930 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 7d 3b  esult rows */.};
15940 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
15950 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63  values for Selec
15960 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65  t.selFlags.  The
15970 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61   "SF" prefix sta
15980 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65  nds for.** "Sele
15990 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65  ct Flag"..*/.#de
159a0 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74  fine SF_Distinct
159b0 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
159c0 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64  /* Output should
159d0 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a   be DISTINCT */.
159e0 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
159f0 76 65 64 20 20 20 20 20 20 20 20 30 78 30 30 30  ved        0x000
15a00 32 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  2  /* Identifier
15a10 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
15a20 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
15a30 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
15a40 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 43 6f     0x0004  /* Co
15a50 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
15a60 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
15a70 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68  efine SF_UsesEph
15a80 65 6d 65 72 61 6c 20 20 20 30 78 30 30 30 38 20  emeral   0x0008 
15a90 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65   /* Uses the Ope
15aa0 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
15ab0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
15ac0 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 20  Expanded        
15ad0 30 78 30 30 31 30 20 20 2f 2a 20 73 71 6c 69 74  0x0010  /* sqlit
15ae0 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29  e3SelectExpand()
15af0 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20   called on this 
15b00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
15b10 73 54 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78  sTypeInfo     0x
15b20 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75  0020  /* FROM su
15b30 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61  bqueries have Ta
15b40 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a  ble metadata */.
15b50 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
15b60 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20  lts of a select 
15b70 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
15b80 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
15b90 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54  ys.  The.** "SRT
15ba0 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
15bb0 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79  SELECT Result Ty
15bc0 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  pe"..*/.#define 
15bd0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
15be0 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
15bf0 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
15c00 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
15c10 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
15c20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
15c30 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
15c40 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
15c50 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
15c60 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
15c70 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
15c80 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
15c90 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
15ca0 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
15cb0 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
15cc0 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
15cd0 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  re */../* The OR
15ce0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
15cf0 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
15d00 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
15d10 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
15d20 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
15d30 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
15d40 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20  scard)..#define 
15d50 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
15d60 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   5  /* Output ea
15d70 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
15d80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
15d90 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20 20  Mem          6  
15da0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
15db0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
15dc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
15dd0 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20 20  Set          7  
15de0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
15df0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
15e00 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
15e10 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
15e20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   8  /* Store res
15e30 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
15e40 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
15e50 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
15e60 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20  RT_EphemTab     
15e70 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  9  /* Create tra
15e80 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
15e90 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
15ea0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
15eb0 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
15ec0 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  0  /* Generate a
15ed0 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
15ee0 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  esult */../*.** 
15ef0 41 20 73 74 72 75 63 74 75 72 65 20 75 73 65 64  A structure used
15f00 20 74 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68   to customize th
15f10 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 73 71  e behavior of sq
15f20 6c 69 74 65 33 53 65 6c 65 63 74 28 29 2e 20 53  lite3Select(). S
15f30 65 65 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 73 20 61  ee.** comments a
15f40 62 6f 76 65 20 73 71 6c 69 74 65 33 53 65 6c 65  bove sqlite3Sele
15f50 63 74 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  ct() for details
15f60 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
15f70 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
15f80 65 6c 65 63 74 44 65 73 74 3b 0a 73 74 72 75 63  electDest;.struc
15f90 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
15fa0 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
15fb0 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
15fc0 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
15fd0 6c 74 73 20 2a 2f 0a 20 20 75 38 20 61 66 66 69  lts */.  u8 affi
15fe0 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66  nity;      /* Af
15ff0 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
16000 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
16010 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 6d 3b 20  */.  int iParm; 
16020 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
16030 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
16040 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
16050 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
16060 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 2f   iMem;         /
16070 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
16080 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
16090 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
160a0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
160b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
160c0 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
160d0 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  d */.};../*.** D
160e0 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
160f0 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
16100 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
16110 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
16120 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65  REMENT .** table
16130 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
16140 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
16150 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
16160 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
16170 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
16180 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
16190 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
161a0 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
161b0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
161c0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
161d0 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
161e0 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
161f0 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
16200 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
16210 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
16220 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68  ts are down with
16230 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
16240 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
16250 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
16260 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
16270 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
16280 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
16290 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
162a0 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
162b0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
162c0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
162d0 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
162e0 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
162f0 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
16300 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
16310 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
16320 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
16330 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
16340 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
16350 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
16360 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16380 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
16390 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
163a0 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
163b0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
163c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
163d0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
163e0 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
163f0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
16400 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
16410 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
16420 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
16430 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
16440 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
16450 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
16460 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
16470 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
16480 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
16490 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
164a0 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a  ted for each .**
164b0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
164c0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
164d0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
164e0 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
164f0 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
16500 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
16510 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
16520 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
16530 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
16540 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
16550 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
16560 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
16570 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
16580 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
16590 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
165a0 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
165b0 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
165c0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
165d0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
165e0 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
165f0 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
16600 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
16610 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
16620 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
16630 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
16640 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
16650 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
16660 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
16670 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
16680 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
16690 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
166a0 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
166b0 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
166c0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
166d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
166e0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
166f0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
16700 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
16710 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
16720 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
16730 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
16740 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
16750 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a  sult of INSERT .
16760 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
16770 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
16780 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
16790 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
167a0 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
167b0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
167c0 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
167d0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
167e0 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
167f0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
16800 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
16810 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
16820 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
16830 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
16840 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16850 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
16860 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
16870 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
16880 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
16890 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
168a0 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
168b0 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
168c0 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
168d0 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
168e0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
168f0 63 63 65 73 73 65 64 20 2a 2f 0a 20 20 54 72 69  ccessed */.  Tri
16900 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
16910 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
16920 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
16930 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
16940 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  };../*.** An SQL
16950 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
16960 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
16970 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
16980 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
16990 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
169a0 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
169b0 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
169c0 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
169d0 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
169e0 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
169f0 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
16a00 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
16a10 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
16a20 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
16a30 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
16a40 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
16a50 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
16a60 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
16a70 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
16a80 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
16a90 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
16aa0 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
16ab0 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
16ac0 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
16ad0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
16ae0 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
16af0 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
16b00 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
16b10 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
16b20 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
16b30 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
16b40 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
16b50 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65  .** feature is e
16b60 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74  nabled (if sqlit
16b70 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72  e3Tsd()->useShar
16b80 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e  edData is true).
16b90 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65   They are.** use
16ba0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
16bb0 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b  et of table-lock
16bc0 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
16bd0 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
16be0 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46  g.** compiled. F
16bf0 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54  unction sqlite3T
16c00 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73  ableLock() is us
16c10 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65  ed to add entrie
16c20 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74  s to the.** list
16c30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73  ..*/.struct Pars
16c40 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
16c50 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  b;         /* Th
16c60 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
16c70 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 69  structure */.  i
16c80 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
16c90 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
16ca0 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
16cb0 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  n */.  char *zEr
16cc0 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
16cd0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
16ce0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
16cf0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
16d00 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
16d10 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
16d20 74 65 63 6f 64 65 20 2a 2f 0a 20 20 75 38 20 63  tecode */.  u8 c
16d30 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20  olNamesSet;     
16d40 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f   /* TRUE after O
16d50 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73  P_ColumnName has
16d60 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20   been issued to 
16d70 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 6e 61  pVdbe */.  u8 na
16d80 6d 65 43 6c 61 73 68 3b 20 20 20 20 20 20 20 20  meClash;        
16d90 2f 2a 20 41 20 70 65 72 6d 61 6e 65 6e 74 20 74  /* A permanent t
16da0 61 62 6c 65 20 6e 61 6d 65 20 63 6c 61 73 68 65  able name clashe
16db0 73 20 77 69 74 68 20 74 65 6d 70 20 74 61 62 6c  s with temp tabl
16dc0 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 75 38 20 63  e name */.  u8 c
16dd0 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
16de0 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
16df0 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
16e00 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
16e10 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
16e20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16e30 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
16e40 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
16e50 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
16e60 2f 0a 20 20 75 38 20 70 61 72 73 65 45 72 72 6f  /.  u8 parseErro
16e70 72 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65  r;       /* True
16e80 20 61 66 74 65 72 20 61 20 70 61 72 73 69 6e 67   after a parsing
16e90 20 65 72 72 6f 72 2e 20 20 54 69 63 6b 65 74 20   error.  Ticket 
16ea0 23 31 37 39 34 20 2a 2f 0a 20 20 75 38 20 6e 54  #1794 */.  u8 nT
16eb0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
16ec0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
16ed0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
16ee0 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
16ef0 2f 0a 20 20 75 38 20 6e 54 65 6d 70 49 6e 55 73  /.  u8 nTempInUs
16f00 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  e;       /* Numb
16f10 65 72 20 6f 66 20 61 54 65 6d 70 52 65 67 5b 5d  er of aTempReg[]
16f20 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
16f30 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
16f40 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
16f50 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
16f60 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
16f70 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
16f80 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
16f90 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
16fa0 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
16fb0 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
16fc0 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
16fd0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
16fe0 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
16ff0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
17000 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
17010 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17020 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
17030 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
17040 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
17050 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
17060 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
17070 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
17080 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
17090 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
170a0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
170b0 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
170c0 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
170d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
170e0 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
170f0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
17100 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
17110 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
17120 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
17130 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
17140 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  ts */.  int iCac
17150 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
17160 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
17170 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
17180 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
17190 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
171a0 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
171b0 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
171c0 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
171d0 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
171e0 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63   */.  u8 nColCac
171f0 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  he;        /* Nu
17200 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
17210 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  in the column ca
17220 63 68 65 20 2a 2f 0a 20 20 75 38 20 69 43 6f 6c  che */.  u8 iCol
17230 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a  Cache;        /*
17240 20 4e 65 78 74 20 65 6e 74 72 79 20 6f 66 20 74   Next entry of t
17250 68 65 20 63 61 63 68 65 20 74 6f 20 72 65 70 6c  he cache to repl
17260 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ace */.  struct 
17270 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
17280 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
17290 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
172a0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
172b0 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
172c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
172d0 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
172e0 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
172f0 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
17300 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
17310 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
17320 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
17330 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
17340 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
17350 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
17360 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
17370 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
17380 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
17390 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
173a0 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
173b0 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
173c0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
173d0 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
173e0 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
173f0 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
17400 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
17410 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
17420 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
17430 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
17440 6e 74 72 79 20 2a 2f 0a 20 20 75 33 32 20 77 72  ntry */.  u32 wr
17450 69 74 65 4d 61 73 6b 3b 20 20 20 20 20 20 20 2f  iteMask;       /
17460 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
17470 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
17480 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
17490 2f 0a 20 20 75 33 32 20 63 6f 6f 6b 69 65 4d 61  /.  u32 cookieMa
174a0 73 6b 3b 20 20 20 20 20 20 2f 2a 20 42 69 74 6d  sk;      /* Bitm
174b0 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
174c0 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
174d0 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
174e0 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
174f0 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
17500 6d 61 79 20 61 66 66 65 63 74 2f 69 6e 73 65 72  may affect/inser
17510 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
17520 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
17530 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
17540 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
17550 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
17560 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
17570 20 69 6e 74 20 63 6f 6f 6b 69 65 47 6f 74 6f 3b   int cookieGoto;
17580 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
17590 20 6f 66 20 4f 50 5f 47 6f 74 6f 20 74 6f 20 63   of OP_Goto to c
175a0 6f 6f 6b 69 65 20 76 65 72 69 66 69 65 72 20 73  ookie verifier s
175b0 75 62 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 69  ubroutine */.  i
175c0 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53  nt cookieValue[S
175d0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
175e0 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65  ED+2];  /* Value
175f0 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20  s of cookies to 
17600 76 65 72 69 66 79 20 2a 2f 0a 23 69 66 6e 64 65  verify */.#ifnde
17610 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
17620 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
17630 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
17640 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17650 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
17660 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
17670 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
17680 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
17690 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
176a0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
176b0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72  /.#endif.  int r
176c0 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20  egRowid;        
176d0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
176e0 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45  ing rowid of CRE
176f0 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20  ATE TABLE entry 
17700 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74  */.  int regRoot
17710 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  ;         /* Reg
17720 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
17730 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
17740 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a  or new objects *
17750 2f 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  /.  AutoincInfo 
17760 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f  *pAinc;  /* Info
17770 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55  rmation about AU
17780 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e  TOINCREMENT coun
17790 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ters */.  int nM
177a0 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
177b0 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
177c0 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
177d0 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
177e0 6d 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  m */..  /* Infor
177f0 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
17800 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
17810 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
17820 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
17830 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
17840 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
17850 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
17860 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
17870 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
17880 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
17890 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
178a0 6f 72 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  or */.  u32 oldm
178b0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
178c0 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
178d0 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
178e0 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
178f0 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
17900 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
17910 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
17920 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
17930 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
17940 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
17950 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
17960 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
17970 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
17980 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
17990 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
179a0 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
179b0 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
179c0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
179d0 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
179e0 0a 20 20 64 6f 75 62 6c 65 20 6e 51 75 65 72 79  .  double nQuery
179f0 4c 6f 6f 70 3b 20 20 20 2f 2a 20 45 73 74 69 6d  Loop;   /* Estim
17a00 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 69  ated number of i
17a10 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
17a20 75 65 72 79 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62  uery */..  /* Ab
17a30 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  ove is constant 
17a40 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f  between recursio
17a50 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65  ns.  Below is re
17a60 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61  set before and a
17a70 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72  fter.  ** each r
17a80 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69  ecursion */..  i
17a90 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
17aa0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17ab0 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
17ac0 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
17ad0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
17ae0 56 61 72 45 78 70 72 3b 20 20 20 20 20 20 20 20  VarExpr;        
17af0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
17b00 64 20 73 6c 6f 74 73 20 69 6e 20 61 70 56 61 72  d slots in apVar
17b10 45 78 70 72 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Expr[] */.  int 
17b20 6e 56 61 72 45 78 70 72 41 6c 6c 6f 63 3b 20 20  nVarExprAlloc;  
17b30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c   /* Number of al
17b40 6c 6f 63 61 74 65 64 20 73 6c 6f 74 73 20 69 6e  located slots in
17b50 20 61 70 56 61 72 45 78 70 72 5b 5d 20 2a 2f 0a   apVarExpr[] */.
17b60 20 20 45 78 70 72 20 2a 2a 61 70 56 61 72 45 78    Expr **apVarEx
17b70 70 72 3b 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  pr;    /* Pointe
17b80 72 73 20 74 6f 20 3a 61 61 61 20 61 6e 64 20 24  rs to :aaa and $
17b90 61 61 61 61 20 77 69 6c 64 63 61 72 64 20 65 78  aaaa wildcard ex
17ba0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 56  pressions */.  V
17bb0 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
17bc0 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20      /* VM being 
17bd0 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69  reprepared (sqli
17be0 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20  te3Reprepare()) 
17bf0 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b  */.  int nAlias;
17c00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17c10 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72  ber of aliased r
17c20 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
17c30 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 69 61  s */.  int nAlia
17c40 73 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20 4e  sAlloc;     /* N
17c50 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 63 61 74  umber of allocat
17c60 65 64 20 73 6c 6f 74 73 20 66 6f 72 20 61 41 6c  ed slots for aAl
17c70 69 61 73 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 2a  ias[] */.  int *
17c80 61 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  aAlias;         
17c90 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73 65 64  /* Register used
17ca0 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65 64   to hold aliased
17cb0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
17cc0 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
17cd0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
17ce0 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
17cf0 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
17d00 65 72 79 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ery */.  Token s
17d10 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 2f 2a  NameToken;    /*
17d20 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
17d30 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
17d40 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
17d50 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
17d60 3b 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74  ;    /* The last
17d70 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f   token parsed */
17d80 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
17d90 54 61 69 6c 3b 20 20 20 2f 2a 20 41 6c 6c 20 53  Tail;   /* All S
17da0 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
17db0 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
17dc0 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
17dd0 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
17de0 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
17df0 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
17e00 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
17e10 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
17e20 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
17e30 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
17e40 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
17e50 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
17e60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
17e70 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
17e80 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
17e90 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
17ea0 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65  lbacks */.#ifnde
17eb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
17ec0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
17ed0 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
17ee0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
17ef0 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
17f00 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
17f10 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61  .  u8 declareVta
17f20 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
17f30 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20   True if inside 
17f40 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
17f50 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20  vtab() */.  int 
17f60 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  nVtabLock;      
17f70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17f80 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
17f90 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 20 20  es to lock */.  
17fa0 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f  Table **apVtabLo
17fb0 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ck;        /* Po
17fc0 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c  inter to virtual
17fd0 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20   tables needing 
17fe0 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  locking */.#endi
17ff0 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  f.  int nHeight;
18000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
18010 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
18020 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
18030 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 20   sub-select */. 
18040 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
18050 61 62 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ab;      /* List
18060 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
18070 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
18080 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
18090 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
180a0 67 67 65 72 50 72 67 3b 20 20 20 20 2f 2a 20 4c  ggerPrg;    /* L
180b0 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
180c0 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
180d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
180e0 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
180f0 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 0a 20 20  nt iSelectId;.  
18100 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
18110 64 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 69  d;.#endif.};..#i
18120 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
18130 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
18140 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
18150 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
18160 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
18170 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
18180 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a  e->declareVtab).
18190 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
181a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
181b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
181c0 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
181d0 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
181e0 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
181f0 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
18200 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
18210 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
18220 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
18230 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
18240 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
18250 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
18260 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
18270 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
18280 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
18290 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
182a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
182b0 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
182c0 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
182d0 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
182e0 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69  s for P5 value i
182f0 6e 20 4f 50 5f 49 6e 73 65 72 74 20 61 6e 64 20  n OP_Insert and 
18300 4f 50 5f 44 65 6c 65 74 65 0a 2a 2f 0a 23 64 65  OP_Delete.*/.#de
18310 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
18320 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
18330 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
18340 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
18350 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
18360 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
18370 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
18380 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
18390 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
183a0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
183b0 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
183c0 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
183d0 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
183e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
183f0 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
18400 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
18410 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
18420 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
18430 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
18440 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
18450 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
18460 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
18470 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
18480 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45  efine OPFLAG_CLE
18490 41 52 43 41 43 48 45 20 20 20 20 30 78 32 30 20  ARCACHE    0x20 
184a0 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73 65 75     /* Clear pseu
184b0 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65 20 69  do-table cache i
184c0 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 0a  n OP_Column */..
184d0 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
184e0 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
184f0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
18500 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
18510 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
18520 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
18530 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73   . *. * Pointers
18540 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
18550 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
18560 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
18570 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
18580 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
18590 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
185a0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
185b0 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
185c0 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61   the . *    data
185d0 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f  base). This allo
185e0 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63  ws Trigger struc
185f0 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72  tures to be retr
18600 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20  ieved by name.. 
18610 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72  * 2. All trigger
18620 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
18630 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  h a single table
18640 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c   form a linked l
18650 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20  ist, using the. 
18660 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65  *    pNext membe
18670 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  r of struct Trig
18680 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74  ger. A pointer t
18690 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
186a0 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20  ent of the. *   
186b0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20   linked list is 
186c0 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70  stored as the "p
186d0 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20  Trigger" member 
186e0 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
186f0 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54  d. *    struct T
18700 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  able.. *. * The 
18710 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
18720 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  er points to the
18730 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
18740 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  f a linked list.
18750 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68   * containing th
18760 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
18770 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
18780 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
18790 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  m.. */.struct Tr
187a0 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a  igger {.  char *
187b0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
187c0 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66    /* The name of
187d0 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20   the trigger    
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74      */.  char *t
18800 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
18810 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72   /* The table or
18820 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
18830 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69  he trigger appli
18840 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  es */.  u8 op;  
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
18870 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
18880 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20  TK_INSERT       
18890 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b    */.  u8 tr_tm;
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
188b0 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52  * One of TRIGGER
188c0 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52  _BEFORE, TRIGGER
188d0 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72  _AFTER */.  Expr
188e0 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20   *pWhen;        
188f0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20      /* The WHEN 
18900 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78  clause of the ex
18910 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65  pression (may be
18920 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
18930 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
18940 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
18950 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
18960 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
18970 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
189a0 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
189b0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
189c0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
189d0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
189e0 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
189f0 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
18a00 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
18a10 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
18a20 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
18a30 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
18a40 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
18a50 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
18a60 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
18a80 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
18a90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
18aa0 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
18ab0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
18ac0 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
18ad0 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
18ae0 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
18af0 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
18b00 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
18b10 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
18b20 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20  etermine which. 
18b30 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
18b40 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
18b50 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
18b60 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
18b70 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
18b80 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
18b90 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
18ba0 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
18bb0 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
18bc0 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
18bd0 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
18be0 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
18bf0 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
18c00 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
18c10 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
18c20 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
18c30 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
18c40 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
18c50 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
18c60 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a  er-program. . *.
18c70 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20   * Instances of 
18c80 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
18c90 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ep are stored in
18ca0 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64   a singly linked
18cb0 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a   list (linked. *
18cc0 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78   using the "pNex
18cd0 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72  t" member) refer
18ce0 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74  enced by the "st
18cf0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
18d00 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63  of the . * assoc
18d10 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69  iated struct Tri
18d20 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54  gger instance. T
18d30 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
18d40 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   of the linked l
18d50 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69  ist is. * the fi
18d60 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20  rst step of the 
18d70 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
18d80 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22  . * . * The "op"
18d90 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
18da0 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
18db0 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
18dc0 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
18dd0 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
18de0 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
18df0 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
18e00 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
18e10 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
18e20 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  e . * value of "
18e30 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
18e40 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
18e50 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
18e60 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
18e70 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
18e80 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
18e90 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
18ea0 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
18eb0 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
18ec0 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
18ed0 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
18ee0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
18ef0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
18f00 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
18f10 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
18f20 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
18f30 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
18f40 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
18f50 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
18f60 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
18f70 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
18f80 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
18f90 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
18fa0 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
18fb0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
18fc0 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
18fd0 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
18fe0 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
18ff0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
19000 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
19010 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
19020 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
19030 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
19040 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20  ... . *         
19050 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20       statement, 
19060 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73  then this stores
19070 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   the column-name
19080 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20  s to be. *      
19090 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64          inserted
190a0 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70   into.. *. * (op
190b0 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20   == TK_DELETE). 
190c0 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
190d0 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
190e0 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
190f0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
19100 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
19110 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
19120 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
19130 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
19140 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
19150 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
19160 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
19170 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a  ise NULL.. * . *
19180 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54   (op == TK_UPDAT
19190 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  E). * target    
191a0 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
191b0 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
191c0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
191d0 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f  to update rows o
191e0 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  f.. * pWhere    
191f0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
19200 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
19210 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
19220 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
19230 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
19240 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
19250 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
19260 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
19270 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
19280 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
19290 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
192a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
192b0 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
192c0 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
192d0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
192e0 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
192f0 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
19300 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74  .. * . */.struct
19310 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
19320 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
19330 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
19340 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
19350 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
19360 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
19370 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
19380 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
19390 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
193a0 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
193b0 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
193c0 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
193d0 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
193e0 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
193f0 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
19400 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48  T statment or RH
19410 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
19420 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a   .. SELECT ... *
19430 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74  /.  Token target
19440 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67  ;        /* Targ
19450 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c  et table for DEL
19460 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53  ETE, UPDATE, INS
19470 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ERT */.  Expr *p
19480 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a  Where;        /*
19490 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
194a0 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20  e for DELETE or 
194b0 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a  UPDATE steps */.
194c0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70    ExprList *pExp
194d0 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c  rList; /* SET cl
194e0 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e  ause for UPDATE.
194f0 20 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20    VALUES clause 
19500 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
19510 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b  IdList *pIdList;
19520 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
19530 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20  ames for INSERT 
19540 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
19550 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
19560 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69  t in the link-li
19570 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  st */.  TriggerS
19580 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20  tep *pLast;  /* 
19590 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  Last element in 
195a0 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64  link-list. Valid
195b0 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e   for 1st elem on
195c0 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ly */.};../*.** 
195d0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
195e0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
195f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   information use
19600 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46  d by the sqliteF
19610 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65  ix....** routine
19620 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74  s as they walk t
19630 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f  he parse tree to
19640 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72   make database r
19650 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70  eferences.** exp
19660 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65  licit.  .*/.type
19670 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
19680 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
19690 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
196a0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
196b0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
196c0 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
196d0 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
196e0 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 63 6f 6e  en here */.  con
196f0 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
19700 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
19710 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
19720 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
19730 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
19740 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
19750 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
19760 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
19770 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
19780 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
19790 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
197a0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
197b0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
197c0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
197d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
197e0 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
197f0 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
19800 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
19810 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
19820 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
19830 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
19840 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
19850 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
19860 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
19870 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
19880 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
19890 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
198a0 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
198b0 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
198c0 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
198d0 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
198e0 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
198f0 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
19900 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
19910 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
19920 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
19930 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
19940 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
19950 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
19960 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
19970 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20  .  int  nAlloc; 
19980 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
19990 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
199a0 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
199b0 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b  .  int  mxAlloc;
199c0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
199d0 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e  um allowed strin
199e0 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38  g length */.  u8
199f0 20 20 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b     mallocFailed;
19a00 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72     /* Becomes tr
19a10 75 65 20 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79  ue if any memory
19a20 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c   allocation fail
19a30 73 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d  s */.  u8   useM
19a40 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30  alloc;      /* 0
19a50 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69  : none,  1: sqli
19a60 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a  te3DbMalloc,  2:
19a70 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20   sqlite3_malloc 
19a80 2a 2f 0a 20 20 75 38 20 20 20 74 6f 6f 42 69 67  */.  u8   tooBig
19a90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 42 65 63  ;         /* Bec
19aa0 6f 6d 65 73 20 74 72 75 65 20 69 66 20 73 74 72  omes true if str
19ab0 69 6e 67 20 73 69 7a 65 20 65 78 63 65 65 64 73  ing size exceeds
19ac0 20 6c 69 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f   limits */.};../
19ad0 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
19ae0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
19af0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
19b00 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
19b10 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
19b20 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
19b30 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
19b40 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
19b50 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
19b60 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
19b70 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
19b80 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
19b90 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
19ba0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ized */.  int iD
19bb0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
19bc0 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
19bd0 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
19be0 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
19bf0 48 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  Hed */.  char **
19c00 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
19c10 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
19c20 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
19c30 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
19c40 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
19c50 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
19c60 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
19c70 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
19c80 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
19c90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
19ca0 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
19cb0 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
19cc0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
19cd0 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
19ce0 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
19cf0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
19d00 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
19d10 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d30 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
19d40 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
19d50 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
19d60 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
19d70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
19d80 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
19d90 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
19da0 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
19dd0 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
19de0 67 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  g */.  int mxStr
19df0 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
19e00 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
19e10 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
19e20 68 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  h */.  int szLoo
19e30 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
19e40 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
19e50 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
19e60 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
19e70 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e90 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
19ea0 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
19eb0 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  nt */.  sqlite3_
19ec0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
19ed0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
19ee0 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
19ef0 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
19f00 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
19f10 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
19f20 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
19f30 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
19f40 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
19f50 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
19f60 64 73 20 70 63 61 63 68 65 3b 20 20 20 20 2f 2a  ds pcache;    /*
19f70 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
19f80 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
19f90 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
19fa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19fb0 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
19fc0 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
19fd0 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
1a000 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
1a010 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a030 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
1a040 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
1a050 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72   */.  void *pScr
1a060 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1a070 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74          /* Scrat
1a080 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ch memory */.  i
1a090 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20  nt szScratch;   
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1a0c0 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20   scratch buffer 
1a0d0 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63  */.  int nScratc
1a0e0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1a0f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a100 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66   of scratch buff
1a110 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
1a120 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1a130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1a140 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
1a150 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1a180 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
1a190 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1a1a0 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a1c0 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
1a1d0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1a1e0 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
1a1f0 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
1a200 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
1a210 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
1a220 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
1a230 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
1a240 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
1a250 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
1a260 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
1a270 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  led */.  /* The 
1a280 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
1a290 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
1a2a0 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
1a2b0 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
1a2c0 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
1a2d0 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
1a2e0 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
1a2f0 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a310 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
1a320 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
1a330 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
1a340 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a360 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
1a370 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
1a380 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
1a390 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a3b0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
1a3c0 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
1a3d0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1a3e0 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1a400 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1a410 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1a420 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
1a430 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
1a440 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1a450 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1a460 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1a470 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
1a480 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1a490 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
1a4a0 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
1a4b0 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74  alize() */.  int
1a4c0 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a4e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
1a4f0 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
1a500 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
1a510 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
1a520 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
1a530 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
1a540 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
1a550 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
1a560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1a570 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
1a580 20 78 4c 6f 67 28 29 20 2a 2f 0a 7d 3b 0a 0a 2f   xLog() */.};../
1a590 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69  *.** Context poi
1a5a0 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e  nter passed down
1a5b0 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65   through the tre
1a5c0 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63  e-walk..*/.struc
1a5d0 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74  t Walker {.  int
1a5e0 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b   (*xExprCallback
1a5f0 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  )(Walker*, Expr*
1a600 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61  );     /* Callba
1a610 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f  ck for expressio
1a620 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53  ns */.  int (*xS
1a630 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57  electCallback)(W
1a640 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
1a650 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
1a660 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50  r SELECTs */.  P
1a670 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a690 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
1a6a0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
1a6b0 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1a6e0 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
1a6f0 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
1a700 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
1a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a720 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
1a730 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
1a740 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a770 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f  Integer value */
1a780 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
1a790 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
1a7a0 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
1a7b0 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
1a7c0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1a7d0 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
1a7e0 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
1a7f0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1a800 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
1a810 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1a820 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1a830 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
1a840 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1a850 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1a860 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
1a870 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a  , Select*);../*.
1a880 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
1a890 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
1a8a0 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
1a8b0 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
1a8c0 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
1a8d0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
1a8e0 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
1a8f0 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
1a900 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
1a910 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
1a920 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
1a930 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
1a940 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
1a950 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
1a960 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
1a970 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
1a980 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
1a990 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  k */../*.** Assu
1a9a0 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
1a9b0 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
1a9c0 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
1a9d0 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
1a9e0 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
1a9f0 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
1aa00 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
1aa10 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
1aa20 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
1aa30 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
1aa40 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1aa50 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
1aa60 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
1aa70 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
1aaa0 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
1aab0 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
1aac0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab00 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
1ab10 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
1ab20 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
1ab30 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
1ab40 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
1ab50 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
1ab60 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
1ab70 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
1ab80 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
1ab90 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
1aba0 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
1abb0 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
1abc0 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
1abd0 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
1abe0 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
1abf0 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
1ac00 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
1ac10 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
1ac20 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
1ac30 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
1ac40 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1ac50 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
1ac60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
1ac70 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
1ac80 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
1ac90 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
1aca0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
1acb0 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
1acc0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
1acd0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
1ace0 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
1acf0 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
1ad00 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
1ad10 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1ad20 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
1ad30 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
1ad40 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f  or(__LINE__).../
1ad50 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61  *.** FTS4 is rea
1ad60 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  lly an extension
1ad70 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69   for FTS3.  It i
1ad80 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  s enabled using 
1ad90 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  the.** SQLITE_EN
1ada0 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e  ABLE_FTS3 macro.
1adb0 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63    But to avoid c
1adc0 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f  onfusion we also
1add0 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49   all.** the SQLI
1ade0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d  TE_ENABLE_FTS4 m
1adf0 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73  acro to serve as
1ae00 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20 53   an alisse for S
1ae10 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1ae20 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  3..*/.#if define
1ae30 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1ae40 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65  FTS4) && !define
1ae50 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1ae60 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53  FTS3).# define S
1ae70 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1ae80 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  3.#endif../*.** 
1ae90 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
1aea0 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
1aeb0 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
1aec0 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
1aed0 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
1aee0 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
1aef0 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
1af00 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
1af10 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1af20 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
1af30 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
1af40 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
1af50 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
1af60 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
1af70 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
1af80 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
1af90 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1afa0 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
1afb0 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
1afc0 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
1afd0 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
1afe0 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
1aff0 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
1b000 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
1b010 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
1b020 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
1b030 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
1b040 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
1b050 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
1b060 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
1b070 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
1b080 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1b090 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
1b0a0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1b0b0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1b0c0 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
1b0d0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
1b0e0 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
1b0f0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1b100 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1b110 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
1b120 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1b130 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
1b140 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1b150 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
1b160 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
1b170 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
1b180 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1b190 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1b1a0 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
1b1b0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
1b1c0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
1b1d0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1b1e0 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
1b1f0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
1b200 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
1b210 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
1b220 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
1b230 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
1b240 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
1b250 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
1b260 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
1b270 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65  char)(x)]).#else
1b280 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b290 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f  3Toupper(x)   to
1b2a0 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20  upper((unsigned 
1b2b0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1b2c0 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
1b2d0 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28  e(x)   isspace((
1b2e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b2f0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1b300 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
1b310 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65  isalnum((unsigne
1b320 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1b330 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
1b340 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61  pha(x)   isalpha
1b350 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1b360 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1b370 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1b380 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67    isdigit((unsig
1b390 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1b3a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1b3b0 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69  xdigit(x)  isxdi
1b3c0 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
1b3d0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1b3e0 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
1b3f0 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e  x)   tolower((un
1b400 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1b410 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
1b420 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
1b430 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69   prototypes.*/.i
1b440 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  nt sqlite3StrICm
1b450 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  p(const char *, 
1b460 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
1b470 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
1b480 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
1b490 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
1b4a0 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33  StrNICmp sqlite3
1b4b0 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73  _strnicmp..int s
1b4c0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
1b4d0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1b4e0 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f  ite3MallocEnd(vo
1b4f0 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  id);.void *sqlit
1b500 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  e3Malloc(int);.v
1b510 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1b520 6f 63 5a 65 72 6f 28 69 6e 74 29 3b 0a 76 6f 69  ocZero(int);.voi
1b530 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
1b540 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c  ocZero(sqlite3*,
1b550 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1b560 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
1b570 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
1b580 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
1b590 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  trDup(sqlite3*,c
1b5a0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
1b5b0 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e  r *sqlite3DbStrN
1b5c0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
1b5d0 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
1b5e0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
1b5f0 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 69 6e 74 29  lloc(void*, int)
1b600 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1b610 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73  bReallocOrFree(s
1b620 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
1b630 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1b640 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73  lite3DbRealloc(s
1b650 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
1b660 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1b670 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74  ite3DbFree(sqlit
1b680 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74  e3*, void*);.int
1b690 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
1b6a0 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  ze(void*);.int s
1b6b0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69  qlite3DbMallocSi
1b6c0 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ze(sqlite3*, voi
1b6d0 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
1b6e0 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28  e3ScratchMalloc(
1b6f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1b700 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f  e3ScratchFree(vo
1b710 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
1b720 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e  te3PageMalloc(in
1b730 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1b740 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b  PageFree(void*);
1b750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
1b760 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29  SetDefault(void)
1b770 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
1b780 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
1b790 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
1b7a0 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
1b7b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70  .int sqlite3Heap
1b7c0 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29  NearlyFull(void)
1b7d0 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74  ;../*.** On syst
1b7e0 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73  ems with ample s
1b7f0 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74  tack space and t
1b800 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f  hat support allo
1b810 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73  ca(), make.** us
1b820 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f  e of alloca() to
1b830 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f   obtain space fo
1b840 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69  r large automati
1b850 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64  c objects.  By d
1b860 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69  efault,.** obtai
1b870 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c  n space from mal
1b880 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  loc()..**.** The
1b890 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e   alloca() routin
1b8a0 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20  e never returns 
1b8b0 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c  NULL.  This will
1b8c0 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68   cause code path
1b8d0 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77  s.** that deal w
1b8e0 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ith sqlite3Stack
1b8f0 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73  Alloc() failures
1b900 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62   to be unreachab
1b910 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
1b920 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a  LITE_USE_ALLOCA.
1b930 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1b940 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
1b950 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23  N)   alloca(N).#
1b960 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1b970 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
1b980 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63  N)  memset(alloc
1b990 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65  a(N), 0, N).# de
1b9a0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1b9b0 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
1b9c0 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65   .#else.# define
1b9d0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1b9e0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
1b9f0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
1ba00 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
1ba10 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
1ba20 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
1ba30 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
1ba40 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1ba50 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
1ba60 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
1ba70 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
1ba80 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1ba90 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
1baa0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
1bab0 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
1bac0 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
1bad0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69  void);.#endif.#i
1bae0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1baf0 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
1bb00 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1bb10 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
1bb20 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
1bb30 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  ;.#endif...#ifnd
1bb40 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ef SQLITE_MUTEX_
1bb50 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d  OMIT.  sqlite3_m
1bb60 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
1bb70 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75  st *sqlite3Defau
1bb80 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  ltMutex(void);. 
1bb90 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1bba0 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
1bbb0 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76  lite3NoopMutex(v
1bbc0 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
1bbd0 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75  mutex *sqlite3Mu
1bbe0 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20  texAlloc(int);. 
1bbf0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
1bc00 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69  xInit(void);.  i
1bc10 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45  nt sqlite3MutexE
1bc20 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  nd(void);.#endif
1bc30 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ..int sqlite3Sta
1bc40 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
1bc50 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
1bc60 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  sAdd(int, int);.
1bc70 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
1bc80 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b  usSet(int, int);
1bc90 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1bca0 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
1bcb0 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  OINT.  int sqlit
1bcc0 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b  e3IsNaN(double);
1bcd0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1bce0 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20  sqlite3IsNaN(X) 
1bcf0 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   0.#endif..void 
1bd00 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
1bd10 53 74 72 41 63 63 75 6d 2a 2c 20 69 6e 74 2c 20  StrAccum*, int, 
1bd20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
1bd30 6c 69 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  list);.#ifndef S
1bd40 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
1bd50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
1bd60 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
1bd70 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1bd80 29 3b 0a 23 65 6e 64 69 66 0a 63 68 61 72 20 2a  );.#endif.char *
1bd90 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
1bda0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1bdb0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
1bdc0 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
1bdd0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1bde0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
1bdf0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41  .char *sqlite3MA
1be00 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c  ppendf(sqlite3*,
1be10 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
1be20 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69  *,...);.#if defi
1be30 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
1be40 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
1be50 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
1be60 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
1be70 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
1be80 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
1be90 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1bea0 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
1beb0 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
1bec0 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
1bed0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
1bee0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
1bef0 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
1bf00 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1bf10 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
1bf20 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
1bf30 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1bf40 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
1bf50 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
1bf60 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
1bf70 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
1bf80 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
1bf90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
1bfa0 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
1bfb0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
1bfc0 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
1bfd0 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
1bfe0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
1bff0 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
1c000 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1c010 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
1c020 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
1c030 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
1c040 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
1c050 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1c060 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
1c070 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
1c080 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1c090 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
1c0a0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
1c0b0 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
1c0c0 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
1c0d0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1c0e0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1c0f0 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
1c100 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
1c110 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
1c120 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1c130 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
1c140 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
1c150 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
1c160 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1c170 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
1c180 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
1c190 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
1c1a0 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
1c1b0 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
1c1c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1c1d0 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
1c1e0 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
1c1f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1c200 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
1c210 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
1c220 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
1c230 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
1c240 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1c250 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1c260 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
1c270 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1c280 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1c290 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1c2a0 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
1c2b0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
1c2c0 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1c2d0 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
1c2e0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1c2f0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1c300 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
1c310 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
1c320 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1c330 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
1c340 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
1c350 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
1c360 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
1c370 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1c380 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1c390 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  3ResetInternalSc
1c3a0 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 20 69  hema(sqlite3*, i
1c3b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1c3c0 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  3BeginParse(Pars
1c3d0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
1c3e0 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
1c3f0 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
1c400 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  e3*);.Table *sql
1c410 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53  ite3ResultSetOfS
1c420 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c  elect(Parse*,Sel
1c430 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
1c440 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
1c450 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
1c460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
1c470 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
1c480 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
1c490 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
1c4a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1c4b0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b  olumn(Parse*,Tok
1c4c0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1c4d0 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
1c4e0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
1c4f0 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
1c500 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
1c510 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
1c520 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1c530 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
1c540 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
1c550 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1c560 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  te3AddColumnType
1c570 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
1c580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1c590 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72  DefaultValue(Par
1c5a0 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  se*,ExprSpan*);.
1c5b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1c5c0 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
1c5d0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
1c5e0 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
1c5f0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1c600 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  oken*,Select*);.
1c610 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
1c620 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
1c630 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
1c640 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
1c650 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
1c660 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
1c670 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
1c680 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
1c690 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
1c6a0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
1c6b0 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
1c6c0 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
1c6d0 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
1c6e0 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e  ize(Bitvec*);.in
1c6f0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
1c700 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
1c710 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73  nt*);..RowSet *s
1c720 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
1c730 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1c740 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
1c750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
1c760 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
1c770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1c780 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
1c790 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
1c7a0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
1c7b0 28 52 6f 77 53 65 74 2a 2c 20 75 38 20 69 42 61  (RowSet*, u8 iBa
1c7c0 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
1c7d0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
1c7e0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
1c7f0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
1c800 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
1c810 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
1c820 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
1c830 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
1c840 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1c850 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
1c860 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
1c870 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
1c880 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
1c890 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
1c8a0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
1c8b0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1c8c0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1c8d0 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
1c8e0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
1c8f0 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
1c900 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1c910 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1c920 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
1c930 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
1c940 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
1c950 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
1c960 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
1c970 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1c980 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
1c990 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
1c9a0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
1c9b0 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
1c9c0 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
1c9d0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
1c9e0 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
1c9f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ca00 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
1ca10 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
1ca20 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
1ca30 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1ca40 20 45 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65   ExprList*, Sele
1ca50 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
1ca60 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1ca70 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
1ca80 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
1ca90 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c  t,int,int*,int*,
1caa0 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
1cab0 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
1cac0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  nd(sqlite3*, IdL
1cad0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
1cae0 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
1caf0 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
1cb00 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
1cb10 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
1cb20 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74  istEnlarge(sqlit
1cb30 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  e3*, SrcList*, i
1cb40 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
1cb50 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1cb60 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
1cb70 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
1cb80 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
1cb90 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
1cba0 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
1cbb0 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
1cbc0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
1cbd0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
1cc00 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
1cc10 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
1cc20 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
1cc30 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
1cc40 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
1cc50 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ken *);.int sqli
1cc60 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b  te3IndexedByLook
1cc70 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75  up(Parse *, stru
1cc80 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
1cc90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cca0 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
1ccb0 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a  Type(SrcList*);.
1ccc0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
1ccd0 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73  istAssignCursors
1cce0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1ccf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1cd00 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  IdListDelete(sql
1cd10 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  ite3*, IdList*);
1cd20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
1cd30 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
1cd40 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  e3*, SrcList*);.
1cd50 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72  Index *sqlite3Cr
1cd60 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
1cd70 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
1cd80 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
1cd90 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdb0 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e        Token*, in
1cdc0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1cdd0 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
1cde0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1cdf0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1ce00 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
1ce10 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
1ce20 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
1ce30 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
1ce40 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1ce50 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
1ce60 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
1ce90 69 73 74 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45  ist*,int,Expr*,E
1cea0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1ceb0 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
1cec0 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
1ced0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
1cee0 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
1cef0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1cf00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
1cf10 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
1cf20 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
1cf30 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
1cf40 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
1cf50 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
1cf60 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
1cf70 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1cf80 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
1cf90 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
1cfa0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1cfb0 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
1cfc0 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
1cfd0 74 57 68 65 72 65 28 50 61 72 73 65 20 2a 2c 20  tWhere(Parse *, 
1cfe0 53 72 63 4c 69 73 74 20 2a 2c 20 45 78 70 72 20  SrcList *, Expr 
1cff0 2a 2c 20 45 78 70 72 4c 69 73 74 20 2a 2c 20 45  *, ExprList *, E
1d000 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 2c 20 63  xpr *, Expr *, c
1d010 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  har *);.#endif.v
1d020 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1d030 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
1d040 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
1d050 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
1d060 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
1d070 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
1d080 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
1d090 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
1d0a0 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
1d0b0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
1d0c0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2a 2c 20 75  *, ExprList**, u
1d0d0 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  16);.void sqlite
1d0e0 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
1d0f0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
1d100 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
1d110 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
1d120 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1d130 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d140 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
1d150 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
1d160 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1d170 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d180 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
1d190 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1d1a0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1d1b0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70  lite3ExprCodeCop
1d1c0 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  y(Parse*, int, i
1d1d0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1d1e0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53  qlite3ExprCacheS
1d1f0 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  tore(Parse*, int
1d200 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1d210 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1d220 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a  hePush(Parse*);.
1d230 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1d240 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 2c  CachePop(Parse*,
1d250 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1d260 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
1d270 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
1d280 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d290 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
1d2a0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1d2b0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
1d2c0 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
1d2d0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
1d2e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1d2f0 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
1d300 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1d310 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d  lite3ExprCodeTem
1d320 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
1d330 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
1d340 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65  te3ExprCodeTarge
1d350 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
1d360 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1d370 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63  e3ExprCodeAndCac
1d380 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  he(Parse*, Expr*
1d390 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d3a0 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f 6e 73  ite3ExprCodeCons
1d3b0 74 61 6e 74 73 28 50 61 72 73 65 2a 2c 20 45 78  tants(Parse*, Ex
1d3c0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1d3d0 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
1d3e0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
1d3f0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
1d400 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1d410 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
1d420 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
1d430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1d440 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
1d450 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
1d460 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
1d470 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
1d480 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1d490 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
1d4a0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
1d4b0 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
1d4c0 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74  int isView,const
1d4d0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1d4e0 61 72 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  ar*);.Index *sql
1d4f0 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
1d500 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1d510 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
1d520 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
1d530 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
1d540 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
1d550 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1d560 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1d570 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
1d580 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
1d590 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
1d5a0 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
1d5b0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
1d5c0 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
1d5d0 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
1d5e0 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
1d5f0 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
1d600 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
1d610 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
1d620 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  re(Expr*, Expr*)
1d630 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1d640 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
1d650 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
1d660 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d670 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
1d680 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
1d690 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
1d6a0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
1d6b0 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
1d6c0 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
1d6d0 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
1d6e0 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
1d6f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
1d700 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
1d710 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1d720 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
1d730 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
1d740 74 65 33 50 72 6e 67 52 65 73 65 74 53 74 61 74  te3PrngResetStat
1d750 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1d760 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
1d770 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1d780 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
1d790 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
1d7a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1d7b0 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74  te3BeginTransact
1d7c0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ion(Parse*, int)
1d7d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1d7e0 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28  mmitTransaction(
1d7f0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1d800 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61  lite3RollbackTra
1d810 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
1d820 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
1d830 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
1d840 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
1d850 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
1d860 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
1d870 33 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  3 *);.int sqlite
1d880 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
1d890 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1d8a0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
1d8b0 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
1d8c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1d8d0 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
1d8e0 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tion(Expr*);.int
1d8f0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e   sqlite3ExprIsIn
1d900 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74  teger(Expr*, int
1d910 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1d920 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e  xprCanBeNull(con
1d930 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  st Expr*);.void 
1d940 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 49  sqlite3ExprCodeI
1d950 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a 2c  sNullJump(Vdbe*,
1d960 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69 6e   const Expr*, in
1d970 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1d980 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41  ite3ExprNeedsNoA
1d990 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f  ffinityChange(co
1d9a0 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29  nst Expr*, char)
1d9b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
1d9c0 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a  owid(const char*
1d9d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
1d9e0 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
1d9f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1da00 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
1da10 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 29 3b  Trigger *, int);
1da20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
1da30 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
1da40 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
1da50 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a  e*, int, int*);.
1da60 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
1da70 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
1da80 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
1da90 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1daa0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
1dab0 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73  ConstraintChecks
1dac0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
1dad0 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
1db00 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
1db10 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  t,int*);.void sq
1db20 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73  lite3CompleteIns
1db30 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 54  ertion(Parse*, T
1db40 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
1db50 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c   int*, int, int,
1db60 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1db70 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
1db80 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
1db90 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
1dba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
1dbb0 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
1dbc0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1dbd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1dbe0 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
1dbf0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1dc00 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
1dc10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
1dc20 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
1dc30 73 65 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  se*, int, char*,
1dc40 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
1dc50 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
1dc60 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
1dc70 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
1dc80 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
1dc90 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
1dca0 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
1dcb0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
1dcc0 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
1dcd0 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
1dce0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
1dcf0 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
1dd00 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
1dd10 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
1dd20 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
1dd30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1dd40 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74 28  e3FuncDefInsert(
1dd50 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46 75  FuncDefHash*, Fu
1dd60 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66  ncDef*);.FuncDef
1dd70 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
1dd80 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
1dd90 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
1dda0 6e 74 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64  nt,u8,int);.void
1ddb0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1ddc0 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
1ddd0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1dde0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1ddf0 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
1de00 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
1de10 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f  lite3RegisterGlo
1de20 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  balFunctions(voi
1de30 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
1de40 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
1de50 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1de60 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
1de70 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
1de80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
1de90 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
1dea0 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
1deb0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1dec0 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
1ded0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1dee0 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
1def0 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
1df00 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
1df10 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
1df20 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
1df30 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
1df40 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
1df50 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
1df60 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
1df70 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
1df80 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
1df90 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
1dfb0 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
1dfc0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1dfd0 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
1dfe0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
1dff0 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
1e000 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
1e010 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
1e020 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
1e030 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
1e040 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
1e050 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
1e060 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
1e070 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
1e080 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
1e090 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
1e0a0 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
1e0b0 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
1e0c0 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
1e0d0 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
1e0e0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1e0f0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
1e100 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
1e110 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
1e120 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e140 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
1e150 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1e160 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
1e170 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
1e180 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
1e190 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
1e1a0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1e1b0 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
1e1c0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
1e1d0 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
1e1e0 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
1e1f0 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
1e200 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
1e210 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
1e220 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1e230 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
1e240 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
1e250 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
1e260 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1e270 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
1e280 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
1e290 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2c0 20 20 20 20 45 78 70 72 4c 69 73 74 2a 2c 53 65      ExprList*,Se
1e2d0 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
1e2e0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1e2f0 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
1e300 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1e310 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
1e320 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
1e330 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1e340 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
1e350 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
1e360 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
1e370 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1e380 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
1e390 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
1e3a0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1e3b0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
1e3c0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1e3d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
1e3e0 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
1e3f0 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
1e400 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
1e410 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
1e420 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
1e430 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
1e440 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
1e450 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
1e460 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
1e470 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1e480 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
1e490 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
1e4a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1e4b0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
1e4c0 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1e4d0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
1e4e0 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
1e4f0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
1e500 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
1e510 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
1e520 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
1e530 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
1e540 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
1e550 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1e560 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
1e570 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
1e580 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
1e590 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
1e5a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
1e5b0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
1e5c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1e5d0 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
1e5e0 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
1e5f0 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
1e600 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
1e610 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
1e620 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
1e630 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
1e640 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
1e650 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
1e660 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
1e670 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e680 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
1e690 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
1e6a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e6b0 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
1e6c0 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
1e6d0 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
1e6e0 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
1e6f0 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
1e700 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
1e710 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
1e720 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1e730 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1e740 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1e750 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
1e760 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
1e770 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
1e780 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
1e790 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1e7a0 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
1e7b0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
1e7c0 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
1e7d0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
1e7e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
1e7f0 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
1e800 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
1e810 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
1e820 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1e830 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
1e840 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
1e850 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1e860 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
1e870 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
1e880 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
1e890 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
1e8a0 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
1e8b0 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
1e8c0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
1e8d0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
1e8e0 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
1e8f0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1e900 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 49  .int sqlite3FixI
1e910 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
1e920 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
1e930 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
1e940 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
1e950 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
1e960 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
1e970 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1e980 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
1e990 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1e9a0 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
1e9b0 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
1e9c0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
1e9d0 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
1e9e0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1e9f0 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
1ea00 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
1ea10 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
1ea20 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
1ea30 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
1ea40 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
1ea50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1ea60 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
1ea70 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
1ea80 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
1ea90 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
1eaa0 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
1eab0 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
1eac0 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
1ead0 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
1eae0 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
1eaf0 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
1eb00 79 74 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  yte);.int sqlite
1eb10 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
1eb20 75 38 2a 2c 20 63 6f 6e 73 74 20 75 38 2a 2a 29  u8*, const u8**)
1eb30 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
1eb40 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
1eb50 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
1eb60 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
1eb70 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
1eb80 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
1eb90 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
1eba0 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
1ebb0 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
1ebc0 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43  il.c.** file.  C
1ebd0 6f 64 65 20 73 68 6f 75 6c 64 20 75 73 65 20 74  ode should use t
1ebe0 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62  he MACRO forms b
1ebf0 65 6c 6f 77 2c 20 61 73 20 74 68 65 20 56 61 72  elow, as the Var
1ec00 69 6e 74 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a  int32 versions.*
1ec10 2a 20 61 72 65 20 63 6f 64 65 64 20 74 6f 20 61  * are coded to a
1ec20 73 73 75 6d 65 20 74 68 65 20 73 69 6e 67 6c 65  ssume the single
1ec30 20 62 79 74 65 20 63 61 73 65 20 69 73 20 61 6c   byte case is al
1ec40 72 65 61 64 79 20 68 61 6e 64 6c 65 64 20 28 77  ready handled (w
1ec50 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43  hich .** the MAC
1ec60 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a  RO form does)..*
1ec70 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  /.int sqlite3Put
1ec80 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20  Varint(unsigned 
1ec90 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74  char*, u64);.int
1eca0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
1ecb0 74 33 32 28 75 6e 73 69 67 6e 65 64 20 63 68 61  t32(unsigned cha
1ecc0 72 2a 2c 20 75 33 32 29 3b 0a 75 38 20 73 71 6c  r*, u32);.u8 sql
1ecd0 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
1ece0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1ecf0 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
1ed00 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
1ed10 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
1ed20 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
1ed30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
1ed40 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
1ed50 2f 2a 0a 2a 2a 20 54 68 65 20 68 65 61 64 65 72  /*.** The header
1ed60 20 6f 66 20 61 20 72 65 63 6f 72 64 20 63 6f 6e   of a record con
1ed70 73 69 73 74 73 20 6f 66 20 61 20 73 65 71 75 65  sists of a seque
1ed80 6e 63 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  nce variable-len
1ed90 67 74 68 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  gth integers..**
1eda0 20 54 68 65 73 65 20 69 6e 74 65 67 65 72 73 20   These integers 
1edb0 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79  are almost alway
1edc0 73 20 73 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20  s small and are 
1edd0 65 6e 63 6f 64 65 64 20 61 73 20 61 20 73 69 6e  encoded as a sin
1ede0 67 6c 65 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65  gle byte..** The
1edf0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1ee00 73 20 74 61 6b 65 20 61 64 76 61 6e 74 61 67 65  s take advantage
1ee10 20 74 68 69 73 20 66 61 63 74 20 74 6f 20 70 72   this fact to pr
1ee20 6f 76 69 64 65 20 61 20 66 61 73 74 20 65 6e 63  ovide a fast enc
1ee30 6f 64 65 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64  ode.** and decod
1ee40 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
1ee50 73 20 69 6e 20 61 20 72 65 63 6f 72 64 20 68 65  s in a record he
1ee60 61 64 65 72 2e 20 20 49 74 20 69 73 20 66 61 73  ader.  It is fas
1ee70 74 65 72 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d  ter for the comm
1ee80 6f 6e 0a 2a 2a 20 63 61 73 65 20 77 68 65 72 65  on.** case where
1ee90 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20   the integer is 
1eea0 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
1eeb0 49 74 20 69 73 20 61 20 6c 69 74 74 6c 65 20 73  It is a little s
1eec0 6c 6f 77 65 72 20 77 68 65 6e 20 74 68 65 0a 2a  lower when the.*
1eed0 2a 20 69 6e 74 65 67 65 72 20 69 73 20 74 77 6f  * integer is two
1eee0 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 2e 20   or more bytes. 
1eef0 20 42 75 74 20 6f 76 65 72 61 6c 6c 20 69 74 20   But overall it 
1ef00 69 73 20 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a  is faster..**.**
1ef10 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65   The following e
1ef20 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
1ef30 71 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a  quivalent:.**.**
1ef40 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
1ef50 47 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  GetVarint32( A, 
1ef60 26 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d  &B );.**     x =
1ef70 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
1ef80 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a  t32( A, B );.**.
1ef90 2a 2a 20 20 20 20 20 78 20 3d 20 67 65 74 56 61  **     x = getVa
1efa0 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a  rint32( A, B );.
1efb0 2a 2a 20 20 20 20 20 78 20 3d 20 70 75 74 56 61  **     x = putVa
1efc0 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a  rint32( A, B );.
1efd0 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65  **.*/.#define ge
1efe0 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
1eff0 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30  (u8)((*(A)<(u8)0
1f000 78 38 30 29 20 3f 20 28 28 42 29 20 3d 20 28 75  x80) ? ((B) = (u
1f010 33 32 29 2a 28 41 29 29 2c 31 20 3a 20 73 71 6c  32)*(A)),1 : sql
1f020 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
1f030 28 41 29 2c 20 28 75 33 32 20 2a 29 26 28 42 29  (A), (u32 *)&(B)
1f040 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
1f050 72 69 6e 74 33 32 28 41 2c 42 29 20 20 28 75 38  rint32(A,B)  (u8
1f060 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
1f070 29 30 78 38 30 29 20 3f 20 28 2a 28 41 29 20 3d  )0x80) ? (*(A) =
1f080 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29   (unsigned char)
1f090 28 42 29 29 2c 31 20 3a 20 73 71 6c 69 74 65 33  (B)),1 : sqlite3
1f0a0 50 75 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  PutVarint32((A),
1f0b0 20 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67   (B))).#define g
1f0c0 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  etVarint    sqli
1f0d0 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65  te3GetVarint.#de
1f0e0 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20  fine putVarint  
1f0f0 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
1f100 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt...const char 
1f110 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66  *sqlite3IndexAff
1f120 69 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c  inityStr(Vdbe *,
1f130 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20   Index *);.void 
1f140 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
1f150 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20  nityStr(Vdbe *, 
1f160 54 61 62 6c 65 20 2a 29 3b 0a 63 68 61 72 20 73  Table *);.char s
1f170 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
1f180 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
1f190 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
1f1a0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
1f1b0 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
1f1c0 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
1f1d0 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
1f1e0 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
1f1f0 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
1f200 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
1f210 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
1f220 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
1f230 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
1f240 6f 72 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  or(sqlite3*, int
1f250 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  , const char*,..
1f260 2e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .);.void *sqlite
1f270 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
1f280 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
1f290 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 69 6e 74 20  *z, int n);.int 
1f2a0 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
1f2b0 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
1f2c0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
1f2d0 6b 65 6e 20 2a 2a 29 3b 0a 63 6f 6e 73 74 20 63  ken **);.const c
1f2e0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
1f2f0 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  tr(int);.int sql
1f300 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
1f310 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43  arse *pParse);.C
1f320 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46  ollSeq *sqlite3F
1f330 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74  indCollSeq(sqlit
1f340 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73  e3*,u8 enc, cons
1f350 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f  t char*,int);.Co
1f360 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
1f370 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
1f380 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
1f390 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
1f3a0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
1f3b0 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
1f3c0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
1f3d0 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
1f3e0 69 74 65 33 45 78 70 72 53 65 74 43 6f 6c 6c 28  ite3ExprSetColl(
1f3f0 45 78 70 72 2a 2c 20 43 6f 6c 6c 53 65 71 2a 29  Expr*, CollSeq*)
1f400 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1f410 78 70 72 53 65 74 43 6f 6c 6c 42 79 54 6f 6b 65  xprSetCollByToke
1f420 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
1f430 20 45 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b   Expr*, Token*);
1f440 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
1f450 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
1f460 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
1f470 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
1f480 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
1f490 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
1f4a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
1f4b0 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
1f4c0 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 0a 63 6f  te3 *, int);..co
1f4d0 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
1f4e0 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
1f4f0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
1f500 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
1f510 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
1f520 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
1f530 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
1f540 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
1f550 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
1f560 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20  id *,u8, .      
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
1f590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
1f5a0 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
1f5b0 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
1f5c0 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
1f5d0 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
1f5e0 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74   *);.char *sqlit
1f5f0 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
1f600 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
1f610 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 69 66  *, int, u8);.#if
1f620 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1f630 45 5f 53 54 41 54 32 0a 63 68 61 72 20 2a 73 71  E_STAT2.char *sq
1f640 6c 69 74 65 33 55 74 66 38 74 6f 31 36 28 73 71  lite3Utf8to16(sq
1f650 6c 69 74 65 33 20 2a 2c 20 75 38 2c 20 63 68 61  lite3 *, u8, cha
1f660 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29  r *, int, int *)
1f670 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
1f680 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
1f690 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
1f6a0 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
1f6b0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
1f6c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
1f6d0 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
1f6e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
1f6f0 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
1f700 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
1f710 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
1f720 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1f730 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
1f740 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
1f750 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1f760 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
1f770 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
1f780 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
1f790 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
1f7a0 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
1f7b0 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
1f7c0 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
1f7d0 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
1f7e0 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
1f7f0 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
1f800 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
1f810 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
1f820 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
1f830 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
1f840 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f850 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
1f860 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
1f870 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
1f880 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
1f890 74 50 61 67 65 4d 6f 76 65 64 28 44 62 2a 2c 20  tPageMoved(Db*, 
1f8a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1f8b0 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
1f8c0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
1f8d0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
1f8e0 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
1f8f0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
1f900 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
1f910 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
1f920 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
1f930 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1f940 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69  Token(const unsi
1f950 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
1f960 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
1f970 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72  3NestedParse(Par
1f980 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
1f990 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
1f9a0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
1f9b0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c  edStatements(sql
1f9c0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1f9d0 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74  te3CodeSubselect
1f9e0 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
1f9f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1fa00 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50  d sqlite3SelectP
1fa10 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  rep(Parse*, Sele
1fa20 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
1fa30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
1fa40 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
1fa50 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
1fa60 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1fa70 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e  e3ResolveSelectN
1fa80 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c  ames(Parse*, Sel
1fa90 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
1faa0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1fab0 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75  ResolveOrderGrou
1fac0 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  pBy(Parse*, Sele
1fad0 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  ct*, ExprList*, 
1fae0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1faf0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
1fb00 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20  Default(Vdbe *, 
1fb10 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
1fb20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1fb30 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
1fb40 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
1fb50 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
1fb60 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
1fb70 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
1fb80 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
1fb90 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
1fba0 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a  CollSeq(sqlite3*
1fbb0 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
1fbc0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
1fbd0 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
1fbe0 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
1fbf0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1fc00 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
1fc10 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1fc20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
1fc30 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
1fc40 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
1fc50 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
1fc60 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
1fc70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1fc80 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
1fc90 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
1fca0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
1fcb0 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
1fcc0 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
1fcd0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1fce0 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
1fcf0 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
1fd00 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
1fd10 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
1fd20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1fd30 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
1fd40 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
1fd50 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1fd60 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
1fd70 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
1fd80 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
1fd90 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69  sqlite3MinimumFi
1fda0 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c  leFormat(Parse*,
1fdb0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1fdc0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 46 72   sqlite3SchemaFr
1fdd0 65 65 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ee(void *);.Sche
1fde0 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
1fdf0 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
1fe00 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
1fe10 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
1fe20 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
1fe30 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
1fe40 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  fo *sqlite3Index
1fe50 4b 65 79 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c  Keyinfo(Parse *,
1fe60 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73   Index *);.int s
1fe70 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
1fe80 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
1fe90 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
1fea0 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76  nt, void *, .  v
1feb0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
1fec0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
1fed0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
1fee0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
1fef0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
1ff00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
1ff10 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
1ff20 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
1ff30 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
1ff40 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
1ff50 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
1ff60 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
1ff70 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1ff80 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
1ff90 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
1ffa0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
1ffb0 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
1ffc0 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   char*, int, int
1ffd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1ffe0 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74  trAccumAppend(St
1fff0 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
20000 61 72 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a  ar*,int);.char *
20010 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
20020 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
20030 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
20040 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
20050 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
20060 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
20070 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
20080 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
20090 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
200a0 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
200b0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
200c0 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
200d0 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
200e0 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
200f0 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
20100 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
20110 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
20120 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
20130 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  *);../*.** The i
20140 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
20150 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
20160 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
20170 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
20180 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65  oc(void*(*)(size
20190 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  _t));.void sqlit
201a0 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69  e3ParserFree(voi
201b0 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  d*, void(*)(void
201c0 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
201d0 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
201e0 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65  nt, Token, Parse
201f0 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  *);.#ifdef YYTRA
20200 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
20210 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
20220 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
20230 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
20240 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
20250 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
20260 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
20270 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
20280 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
20290 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
202a0 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
202b0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
202c0 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
202d0 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
202e0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
202f0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
20300 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
20310 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
20320 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
20330 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
20340 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
20350 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
20360 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
20370 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
20380 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
20390 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
203a0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
203b0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
203c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
203d0 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
203e0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
203f0 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
20400 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
20410 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
20420 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
20430 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
20440 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
20450 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
20460 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
20470 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
20480 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
20490 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23  e3VtabLock(X) .#
204a0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
204b0 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20  VtabUnlock(X).# 
204c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
204d0 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29  tabUnlockList(X)
204e0 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73  .#else.   void s
204f0 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
20500 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
20510 6c 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  le*);.   int sql
20520 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c  ite3VtabSync(sql
20530 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a  ite3 *db, char *
20540 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
20550 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
20560 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
20570 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
20580 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
20590 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
205a0 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
205b0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
205c0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
205d0 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
205e0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
205f0 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65  nlockList(sqlite
20600 33 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  3*);.#  define s
20610 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
20620 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
20630 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
20640 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
20650 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  f.void sqlite3Vt
20660 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
20670 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
20680 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
20690 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
206a0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
206b0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
206c0 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
206d0 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
206e0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
206f0 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
20700 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
20710 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
20720 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
20730 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
20740 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
20750 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
20760 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
20770 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
20780 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
20790 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
207a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
207b0 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
207c0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
207d0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
207e0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
207f0 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
20800 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
20810 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
20820 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
20830 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
20840 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
20850 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
20860 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
20870 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
20880 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
20890 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
208a0 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
208b0 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
208c0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
208d0 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
208e0 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
208f0 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
20900 74 6d 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tmt *);.int sqli
20910 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
20920 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
20930 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
20940 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
20950 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
20960 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
20970 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
20980 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
20990 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
209a0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
209b0 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
209c0 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 56 54  st sqlite3*);.VT
209d0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
209e0 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
209f0 20 54 61 62 6c 65 2a 29 3b 0a 63 6f 6e 73 74 20   Table*);.const 
20a00 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
20a10 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
20a20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
20a30 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
20a40 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
20a50 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
20a60 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
20a70 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
20a80 74 29 3b 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  t);../* Declarat
20a90 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
20aa0 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
20ab0 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
20ac0 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
20ad0 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
20ae0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
20af0 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
20b00 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
20b10 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
20b20 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
20b30 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
20b40 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
20b50 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
20b60 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
20b70 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
20b80 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
20b90 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
20ba0 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
20bb0 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
20bc0 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
20bd0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
20be0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
20bf0 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
20c00 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
20c10 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
20c20 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
20c30 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
20c40 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
20c50 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
20c60 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
20c70 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
20c80 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
20c90 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
20ca0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
20cb0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
20cc0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
20cd0 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
20ce0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
20cf0 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
20d00 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
20d10 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
20d20 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
20d30 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
20d40 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
20d50 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
20d60 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
20d70 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
20d80 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
20d90 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
20da0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
20db0 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
20dc0 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73  c,d).  #define s
20dd0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
20de0 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65  b,c,d).  #define
20df0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
20e00 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
20e10 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
20e20 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
20e30 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
20e40 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
20e50 62 2c 63 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a  b,c,d) 0.#endif.
20e60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20e70 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
20e80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
20e90 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
20ea0 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  , Table*);.#else
20eb0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
20ec0 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
20ed0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
20ee0 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
20ef0 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
20f00 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
20f10 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
20f20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
20f30 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
20f40 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
20f50 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
20f60 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
20f70 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
20f80 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
20f90 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
20fa0 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
20fb0 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
20fc0 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
20fd0 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
20fe0 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
20ff0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
21000 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
21010 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
21020 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21030 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
21040 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
21050 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
21060 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
21070 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
21080 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
21090 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
210a0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
210b0 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
210c0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
210d0 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23  lloc().#endif..#
210e0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
210f0 52 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20  ROWID           
21100 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  1.#define IN_IND
21110 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
21120 20 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f     2.#define IN_
21130 49 4e 44 45 58 5f 49 4e 44 45 58 20 20 20 20 20  INDEX_INDEX     
21140 20 20 20 20 20 20 33 0a 69 6e 74 20 73 71 6c 69        3.int sqli
21150 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
21160 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
21170 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  int*);..#ifdef S
21180 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
21190 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20  MIC_WRITE.  int 
211a0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
211b0 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
211c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
211d0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
211e0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  int, int);.  int
211f0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
21200 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ize(sqlite3_vfs 
21210 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
21220 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
21230 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
21240 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
21250 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
21260 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29  ze(pVfs) ((pVfs)
21270 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 23 65 6e 64  ->szOsFile).#end
21280 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
21290 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
212a0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
212b0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
212c0 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
212d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
212e0 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
212f0 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
21300 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
21310 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
21320 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
21330 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
21340 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
21350 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
21360 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
21370 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
21380 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
21390 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
213a0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
213b0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
213c0 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
213d0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
213e0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
213f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
21400 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
21410 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
21420 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
21430 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
21440 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
21450 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
21460 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
21470 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
21480 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
21490 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
214a0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
214b0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
214c0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
214d0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
214e0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
214f0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
21500 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
21510 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
21520 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
21530 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
21540 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
21550 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
21560 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
21570 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
21580 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
21590 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
215a0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
215b0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
215c0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
215d0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
215e0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
215f0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
21600 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
21610 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
21620 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
21630 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
21640 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
21650 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
21660 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
21670 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
21680 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
21690 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
216a0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
216b0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
216c0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
216d0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
216e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
216f0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
21700 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
21710 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
21720 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
21730 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
21740 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
21750 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
21760 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
21770 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
21780 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
21790 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
217a0 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
217b0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
217c0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
217d0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
217e0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
217f0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
21800 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
21810 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
21820 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
21830 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
21840 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
21850 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
21860 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
21870 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
21880 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
21890 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
218a0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
218b0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
218c0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
218d0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
218e0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
218f0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
21900 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
21910 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
21920 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
21930 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
21940 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
21950 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
21960 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
21970 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
21980 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
21990 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
219a0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
219b0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
219c0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
219d0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
219e0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
219f0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
21a00 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
21a10 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
21a20 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
21a30 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
21a40 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
21a50 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
21a60 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
21a70 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
21a80 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
21a90 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
21aa0 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
21ab0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
21ac0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
21ad0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
21ae0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
21af0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
21b00 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
21b10 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
21b20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
21b30 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
21b40 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
21b50 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
21b60 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
21b70 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
21b80 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
21b90 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
21ba0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
21bb0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
21bc0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
21bd0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
21be0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
21bf0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
21c00 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
21c10 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
21c20 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
21c30 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
21c40 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
21c50 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
21c60 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
21c70 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
21c80 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
21c90 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
21ca0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
21cb0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
21cc0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
21cd0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
21ce0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
21cf0 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
21d00 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
21d10 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
21d20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
21d30 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
21d40 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
21d50 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
21d60 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
21d70 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
21d80 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
21d90 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
21da0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
21db0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
21dc0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
21dd0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
21de0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
21df0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21e00 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
21e10 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
21e20 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
21e30 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
21e40 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
21e50 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
21e60 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
21e70 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
21e80 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
21e90 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
21ea0 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
21eb0 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
21ec0 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
21ed0 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
21ee0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
21ef0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
21f00 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
21f10 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
21f20 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
21f30 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
21f40 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
21f50 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
21f60 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
21f70 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
21f80 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.