/ Hex Artifact Content
Login

Artifact 3ef5fc89a4c9755a08a68de107493785a284e27c:


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 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
7490: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
74a0: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
74b0: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
74c0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
74d0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
74f0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
7500: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
7510: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
7520: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
7530: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
7540: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
7550: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
7560: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
7570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7580: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
7590: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
75a0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
75b0: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
75d0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
75e0: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
75f0: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
7600: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
7610: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
7620: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
7630: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
7640: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
7650: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7660: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
7670: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
7680: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
7690: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
76a0: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
76b0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
76c0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
76d0: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
76e0: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
76f0: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
7700: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
7710: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
7720: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
7730: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
7740: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
7750: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
7760: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
7770: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
7780: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
7790: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
77a0: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
77b0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
77c0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
77d0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
77e0: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
77f0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
7800: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
7810: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
7820: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
7830: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
7840: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
7850: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
7860: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61  message */.  cha
7870: 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
7880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
7890: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
78a0: 6d 65 73 73 61 67 65 20 28 55 54 46 2d 38 20 65  message (UTF-8 e
78b0: 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61  ncoded) */.  cha
78c0: 72 20 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20  r *zErrMsg16;   
78d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
78e0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
78f0: 6d 65 73 73 61 67 65 20 28 55 54 46 2d 31 36 20  message (UTF-16 
7900: 65 6e 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e  encoded) */.  un
7910: 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69  ion {.    volati
7920: 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75  le int isInterru
7930: 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66  pted; /* True if
7940: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
7950: 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  pt has been call
7960: 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  ed */.    double
7970: 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20   notUsed1;      
7980: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20        /* Spacer 
7990: 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f  */.  } u1;.  Loo
79a0: 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65  kaside lookaside
79b0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f  ;          /* Lo
79c0: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63  okaside malloc c
79d0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a  onfiguration */.
79e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
79f0: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
7a00: 4e 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29  N.  int (*xAuth)
7a10: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
7a20: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
7a30: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
7a40: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20  onst char*);.   
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7a70: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
7a80: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
7a90: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
7aa0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7ab0: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
7ac0: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
7ad0: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
7ae0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
7af0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
7b00: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
7b10: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
7b20: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
7b30: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
7b40: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
7b50: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
7b60: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
7b70: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
7b80: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
7b90: 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73  .  int nProgress
7ba0: 4f 70 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ops;            
7bb0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
7bc0: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
7bd0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
7be0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
7bf0: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
7c00: 4c 54 41 42 4c 45 0a 20 20 48 61 73 68 20 61 4d  LTABLE.  Hash aM
7c10: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
7c20: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
7c30: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
7c40: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
7c50: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 56 54 61 62  /.  Table *pVTab
7c60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7c70: 20 20 2f 2a 20 76 74 61 62 20 77 69 74 68 20 61    /* vtab with a
7c80: 63 74 69 76 65 20 43 6f 6e 6e 65 63 74 2f 43 72  ctive Connect/Cr
7c90: 65 61 74 65 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  eate method */. 
7ca0: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
7cb0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
7cc0: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
7cd0: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
7ce0: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  actions */.  int
7cf0: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
7d00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
7d10: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
7d20: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 56 54 61  aVTrans */.  VTa
7d30: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
7d40: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
7d50: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
7d60: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
7d70: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46  () */.#endif.  F
7d80: 75 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63  uncDefHash aFunc
7d90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
7da0: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
7db0: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
7dc0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
7dd0: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
7de0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
7df0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
7e00: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
7e10: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
7e20: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
7e30: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 62 75  back */.  int bu
7e40: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
7e50: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
7e60: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
7e70: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 44 62   in msec */.  Db
7e80: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
7ea0: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
7eb0: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
7ec0: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
7ed0: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
7ee0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
7ef0: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
7f00: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
7f10: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
7f20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7f30: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
7f40: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
7f50: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
7f60: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
7f70: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7f80: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
7f90: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
7fa0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
7fb0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
7fc0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
7fd0: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
7fe0: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
7ff0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
8000: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
8010: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
8020: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
8030: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
8040: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
8050: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
8060: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
8070: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
8080: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
8090: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
80a0: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
80b0: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
80c0: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
80d0: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
80e0: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
80f0: 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d  C_MASTER .  ** m
8100: 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c  utex, not by sql
8110: 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79  ite3.mutex. They
8120: 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64   are used by cod
8130: 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a  e in notify.c. .
8140: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
8150: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
8160: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
8170: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
8180: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
8190: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
81a0: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
81b0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
81c0: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
81d0: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
81e0: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
81f0: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
8200: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
8210: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
8220: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
8230: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
8240: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
8250: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
8260: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
8270: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
8280: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
8290: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
82a0: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
82b0: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
82c0: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
82d0: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
82e0: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
82f0: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
8300: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8320: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
8330: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
8340: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
8350: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
8360: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
8370: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
8380: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
8390: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
83a0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
83b0: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
83c0: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
83d0: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
83e0: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
83f0: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
8400: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
8410: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  se..*/.#define E
8420: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
8430: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
8440: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
8450: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
8460: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
8470: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
8480: 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20  TE_VdbeTrace    
8490: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
84a0: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
84b0: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
84c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
84d0: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30  InternChanges  0
84e0: 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 55 6e  x00000200  /* Un
84f0: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
8500: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
8510: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
8520: 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78  ullColNames   0x
8530: 30 30 30 30 30 34 30 30 20 20 2f 2a 20 53 68 6f  00000400  /* Sho
8540: 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61  w full column na
8550: 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f  mes on SELECT */
8560: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8570: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
8580: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 53 68  x00000800  /* Sh
8590: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
85a0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
85b0: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
85c0: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 31 30  ws      0x000010
85d0: 30 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  00  /* Count row
85e0: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
85f0: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
8630: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
8640: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
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 20 20 20                  
8670: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
8680: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
8690: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
86a0: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
86b0: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
86c0: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
86d0: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
86e0: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8710: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
8720: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
8730: 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61  ne SQLITE_SqlTra
8740: 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30 34  ce       0x00004
8750: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72  000  /* Debug pr
8760: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
8770: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
8780: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
8790: 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 38 30  ting    0x000080
87a0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  00  /* Debug lis
87b0: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
87c0: 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e  ograms */.#defin
87d0: 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  e SQLITE_WriteSc
87e0: 68 65 6d 61 20 20 20 20 30 78 30 30 30 31 30 30  hema    0x000100
87f0: 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64  00  /* OK to upd
8800: 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  ate SQLITE_MASTE
8810: 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  R */.#define SQL
8820: 49 54 45 5f 4e 6f 52 65 61 64 6c 6f 63 6b 20 20  ITE_NoReadlock  
8830: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
8840: 2a 20 52 65 61 64 6c 6f 63 6b 73 20 61 72 65 20  * Readlocks are 
8850: 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 0a 20 20  omitted when .  
8860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8880: 20 20 20 20 20 20 20 20 2a 2a 20 61 63 63 65 73          ** acces
8890: 73 69 6e 67 20 72 65 61 64 2d 6f 6e 6c 79 20 64  sing read-only d
88a0: 61 74 61 62 61 73 65 73 20 2a 2f 0a 23 64 65 66  atabases */.#def
88b0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72  ine SQLITE_Ignor
88c0: 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 34  eChecks   0x0004
88d0: 30 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  0000  /* Do not 
88e0: 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f  enforce check co
88f0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
8900: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64  fine SQLITE_Read
8910: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30  Uncommitted 0x00
8920: 38 30 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68  80000  /* For sh
8930: 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
8940: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8950: 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20  E_LegacyFileFmt 
8960: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
8970: 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62  Create new datab
8980: 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31  ases in format 1
8990: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
89a0: 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20  TE_FullFSync    
89b0: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
89c0: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
89d0: 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a  on the backend *
89e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
89f0: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20  _CkptFullFSync  
8a00: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 55  0x00400000  /* U
8a10: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f  se full fsync fo
8a20: 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a  r checkpoint */.
8a30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
8a40: 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78  ecoveryMode   0x
8a50: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 49 67 6e  00800000  /* Ign
8a60: 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72  ore schema error
8a70: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8a80: 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
8a90: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
8aa0: 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65  * Reverse unorde
8ab0: 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23  red SELECTs */.#
8ac0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
8ad0: 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30  cTriggers    0x0
8ae0: 32 30 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  2000000  /* Enab
8af0: 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69  le recursive tri
8b00: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
8b10: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
8b20: 65 79 73 20 20 20 20 30 78 30 34 30 30 30 30 30  eys    0x0400000
8b30: 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f  0  /* Enforce fo
8b40: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
8b50: 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e  aints  */.#defin
8b60: 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  e SQLITE_AutoInd
8b70: 65 78 20 20 20 20 20 20 30 78 30 38 30 30 30 30  ex      0x080000
8b80: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75  00  /* Enable au
8b90: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
8ba0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8bb0: 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  E_PreferBuiltin 
8bc0: 20 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20   0x10000000  /* 
8bd0: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
8be0: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
8bf0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
8c00: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
8c10: 32 30 30 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  20000000  /* Ena
8c20: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
8c30: 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  on */../*.** Bit
8c40: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
8c50: 2e 66 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  .flags field tha
8c60: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
8c70: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
8c80: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
8c90: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
8ca0: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
8cb0: 65 72 66 61 63 65 2e 0a 2a 2a 20 54 68 65 73 65  erface..** These
8cc0: 20 6d 75 73 74 20 62 65 20 74 68 65 20 6c 6f 77   must be the low
8cd0: 2d 6f 72 64 65 72 20 62 69 74 73 20 6f 66 20 74  -order bits of t
8ce0: 68 65 20 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  he flags field..
8cf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8d00: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
8d10: 20 30 78 30 31 20 20 20 20 20 20 20 20 2f 2a 20   0x01        /* 
8d20: 44 69 73 61 62 6c 65 20 71 75 65 72 79 20 66 6c  Disable query fl
8d30: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
8d40: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
8d50: 6e 43 61 63 68 65 20 20 20 20 30 78 30 32 20 20  nCache    0x02  
8d60: 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65        /* Disable
8d70: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68   the column cach
8d80: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
8d90: 49 54 45 5f 49 6e 64 65 78 53 6f 72 74 20 20 20  ITE_IndexSort   
8da0: 20 20 20 30 78 30 34 20 20 20 20 20 20 20 20 2f     0x04        /
8db0: 2a 20 44 69 73 61 62 6c 65 20 69 6e 64 65 78 65  * Disable indexe
8dc0: 73 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 2a 2f  s for sorting */
8dd0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8de0: 49 6e 64 65 78 53 65 61 72 63 68 20 20 20 20 30  IndexSearch    0
8df0: 78 30 38 20 20 20 20 20 20 20 20 2f 2a 20 44 69  x08        /* Di
8e00: 73 61 62 6c 65 20 69 6e 64 65 78 65 73 20 66 6f  sable indexes fo
8e10: 72 20 73 65 61 72 63 68 69 6e 67 20 2a 2f 0a 23  r searching */.#
8e20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
8e30: 64 65 78 43 6f 76 65 72 20 20 20 20 20 30 78 31  dexCover     0x1
8e40: 30 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 61  0        /* Disa
8e50: 62 6c 65 20 69 6e 64 65 78 20 63 6f 76 65 72 69  ble index coveri
8e60: 6e 67 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  ng table */.#def
8e70: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
8e80: 42 79 4f 72 64 65 72 20 20 20 30 78 32 30 20 20  ByOrder   0x20  
8e90: 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65        /* Disable
8ea0: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
8eb0: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
8ec0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
8ed0: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 34 30 20  orOutConst 0x40 
8ee0: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c         /* Disabl
8ef0: 65 20 66 61 63 74 6f 72 69 6e 67 20 6f 75 74 20  e factoring out 
8f00: 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 23 64 65  constants */.#de
8f10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 70 74 4d  fine SQLITE_OptM
8f20: 61 73 6b 20 20 20 20 20 20 20 20 30 78 66 66 20  ask        0xff 
8f30: 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
8f40: 66 20 61 6c 6c 20 64 69 73 61 62 6c 61 62 6c 65  f all disablable
8f50: 20 6f 70 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   opts */../*.** 
8f60: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
8f70: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
8f80: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
8f90: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
8fa0: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
8fb0: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
8fc0: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
8fd0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
8fe0: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
8ff0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
9000: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9010: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
9020: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
9030: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
9040: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9050: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
9060: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
9070: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
9080: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
9090: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
90a0: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
90b0: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
90c0: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
90d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
90e0: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
90f0: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
9100: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
9110: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
9120: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
9130: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
9140: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
9150: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
9160: 72 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  rred */../*.** E
9170: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
9180: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
9190: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
91a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
91b0: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
91c0: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
91d0: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
91e0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
91f0: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
9200: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
9210: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
9220: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
9230: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
9240: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
9250: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
9260: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
9270: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9280: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
9290: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
92a0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
92b0: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
92c0: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38 20 69  imited */.  u8 i
92d0: 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20 20 20  PrefEnc;        
92e0: 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20 74 65   /* Preferred te
92f0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53 51 4c  xt encoding (SQL
9300: 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45 2c 20  ITE_UTF8, 16LE, 
9310: 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20 66 6c  16BE) */.  u8 fl
9320: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9330: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
9340: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
9350: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
9360: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
9370: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
9380: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
9390: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
93a0: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
93b0: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
93c0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
93d0: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
93e0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
93f0: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
9400: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
9410: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
9420: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9430: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
9440: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
9450: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
9460: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
9470: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9480: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
9490: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
94a0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
94b0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
94c0: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
94d0: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
94e0: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
94f0: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
9500: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
9510: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
9520: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
9530: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
9540: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
9550: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
9560: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
9570: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
9580: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
9590: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
95a0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
95b0: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
95c0: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
95d0: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
95e0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
95f0: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
9600: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
9610: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
9620: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
9630: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
9640: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
9650: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
9660: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
9670: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
9680: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
9690: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
96a0: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
96b0: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
96c0: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
96d0: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
96e0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
96f0: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
9700: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
9710: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
9720: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
9730: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
9740: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
9750: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
9760: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
9770: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
9780: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
9790: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
97a0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
97b0: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
97c0: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
97d0: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
97e0: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
97f0: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
9800: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
9810: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
9820: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
9830: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
9840: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
9850: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
9860: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
9870: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
9880: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
9890: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
98a0: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
98b0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
98c0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
98d0: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
98e0: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 0a 2a 2f  FuncDef.flags.*/
98f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9900: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
9910: 30 31 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  01 /* Candidate 
9920: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
9930: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
9940: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
9950: 5f 43 41 53 45 20 20 20 20 20 30 78 30 32 20 2f  _CASE     0x02 /
9960: 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65  * Case-sensitive
9970: 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74   LIKE-type funct
9980: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
9990: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d  QLITE_FUNC_EPHEM
99a0: 20 20 20 20 30 78 30 34 20 2f 2a 20 45 70 68 65      0x04 /* Ephe
99b0: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
99c0: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
99d0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
99e0: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 38 20 2f 2a  NEEDCOLL 0x08 /*
99f0: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
9a00: 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62  ollSeq() might b
9a10: 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66  e called */.#def
9a20: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
9a30: 50 52 49 56 41 54 45 20 20 30 78 31 30 20 2f 2a  PRIVATE  0x10 /*
9a40: 20 41 6c 6c 6f 77 65 64 20 66 6f 72 20 69 6e 74   Allowed for int
9a50: 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c 79 20 2a  ernal use only *
9a60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9a70: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
9a80: 78 32 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  x20 /* Built-in 
9a90: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
9aa0: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
9ab0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
9ac0: 43 45 20 30 78 34 30 20 2f 2a 20 42 75 69 6c 74  CE 0x40 /* Built
9ad0: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
9ae0: 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  r ifnull() funct
9af0: 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ion */../*.** Th
9b00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
9b10: 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49  e macros, FUNCTI
9b20: 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29  ON(), LIKEFUNC()
9b30: 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29   and AGGREGATE()
9b40: 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
9b50: 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69  create the initi
9b60: 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20  alizers for the 
9b70: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
9b80: 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43  es..**.**   FUNC
9b90: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
9ba0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
9bb0: 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
9bc0: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
9bd0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
9be0: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
9bf0: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
9c00: 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62     implemented b
9c10: 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75  y C function xFu
9c20: 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20  nc that accepts 
9c30: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20  nArg arguments. 
9c40: 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65  The.**     value
9c50: 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20   passed as iArg 
9c60: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
9c70: 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76  id*) and made av
9c80: 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61  ailable.**     a
9c90: 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  s the user-data 
9ca0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
9cb0: 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75  ta()) for the fu
9cc0: 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20  nction. If .**  
9cd0: 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20     argument bNC 
9ce0: 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
9cf0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
9d00: 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73  EDCOLL flag is s
9d10: 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  et..**.**   AGGR
9d20: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
9d30: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
9d40: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
9d50: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
9d60: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
9d70: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
9d80: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
9d90: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
9da0: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
9db0: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
9dc0: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
9dd0: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
9de0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
9df0: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
9e00: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
9e10: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
9e20: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
9e30: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
9e40: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
9e50: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
9e60: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
9e70: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
9e80: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
9e90: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
9ea0: 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
9eb0: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
9ec0: 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
9ed0: 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
9ee0: 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e  to C .**     fun
9ef0: 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20  ction likeFunc. 
9f00: 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73  Argument pArg is
9f10: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
9f20: 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20   *) and made.** 
9f30: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73      available as
9f40: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
9f50: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
9f60: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54  _user_data()). T
9f70: 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65  he.**     FuncDe
9f80: 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65  f.flags variable
9f90: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
9fa0: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74  alue passed as t
9fb0: 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20  he flags.**     
9fc0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64  parameter..*/.#d
9fd0: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a  efine FUNCTION(z
9fe0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
9ff0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
a000: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
a010: 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49 54 45  UTF8, bNC*SQLITE
a020: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20  _FUNC_NEEDCOLL, 
a030: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
a040: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
a050: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
a060: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
a070: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
a080: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
a090: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
a0a0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
a0b0: 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49  E_UTF8, bNC*SQLI
a0c0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
a0d0: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
a0e0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
a0f0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
a100: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
a110: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
a120: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
a130: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c 61  SQLITE_UTF8, fla
a140: 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  gs, (void *)arg,
a150: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
a160: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
a170: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
a180: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
a190: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
a1a0: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
a1b0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
a1c0: 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f   nc*SQLITE_FUNC_
a1d0: 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53  NEEDCOLL, \.   S
a1e0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
a1f0: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
a200: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
a210: 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ,0,0}../*.** All
a220: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
a230: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
a240: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
a250: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
a260: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
a270: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
a280: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
a290: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
a2a0: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
a2b0: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
a2c0: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
a2d0: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
a2e0: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
a2f0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
a300: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
a310: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
a320: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a340: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
a350: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
a360: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
a370: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a390: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
a3a0: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
a3b0: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
a3c0: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
a3d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
a3e0: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
a3f0: 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
a400: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
a410: 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
a420: 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
a430: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
a440: 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
a450: 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
a460: 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
a470: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
a480: 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
a490: 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
a4a0: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
a4b0: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
a4c0: 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
a4d0: 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
a4e0: 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
a4f0: 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
a500: 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
a510: 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
a520: 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
a530: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
a540: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
a550: 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
a560: 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
a570: 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
a580: 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
a590: 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
a5a0: 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
a5b0: 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
a5c0: 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
a5d0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
a5e0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
a5f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
a600: 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
a610: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
a620: 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a640: 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
a650: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
a660: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
a670: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
a680: 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
a690: 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
a6a0: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
a6b0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
a6c0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
a6d0: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
a6e0: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
a6f0: 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
a700: 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
a710: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
a720: 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
a730: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
a740: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
a750: 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  lumn */.  Expr *
a760: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
a770: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
a780: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
a790: 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20  char *zDflt;    
a7a0: 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
a7b0: 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  t of the default
a7c0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72   value */.  char
a7d0: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
a7e0: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
a7f0: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
a800: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
a810: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
a820: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
a830: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
a840: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
a850: 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ;      /* True i
a860: 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
a870: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
a880: 20 2a 2f 0a 20 20 75 38 20 69 73 50 72 69 6d 4b   */.  u8 isPrimK
a890: 65 79 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ey;    /* True i
a8a0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 69 73  f this column is
a8b0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49   part of the PRI
a8c0: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 63 68  MARY KEY */.  ch
a8d0: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
a8e0: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
a8f0: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
a900: 65 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  es */.#ifndef SQ
a910: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
a920: 4c 54 41 42 4c 45 0a 20 20 75 38 20 69 73 48 69  LTABLE.  u8 isHi
a930: 64 64 65 6e 3b 20 20 20 20 20 2f 2a 20 54 72 75  dden;     /* Tru
a940: 65 20 69 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e if this column
a950: 20 69 73 20 27 68 69 64 64 65 6e 27 20 2a 2f 0a   is 'hidden' */.
a960: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
a970: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
a980: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
a990: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
a9a0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
a9b0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
a9c0: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
a9d0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
a9e0: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
a9f0: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
aa00: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
aa10: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
aa20: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
aa30: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
aa40: 2a 20 54 68 65 72 65 20 6d 61 79 20 74 77 6f 20  * There may two 
aa50: 73 65 70 61 72 61 74 65 20 69 6d 70 6c 65 6d 65  separate impleme
aa60: 6e 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  ntations of the 
aa70: 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 74 69  collation functi
aa80: 6f 6e 2c 20 6f 6e 65 0a 2a 2a 20 74 68 61 74 20  on, one.** that 
aa90: 70 72 6f 63 65 73 73 65 73 20 74 65 78 74 20 69  processes text i
aaa0: 6e 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67  n UTF-8 encoding
aab0: 20 28 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 29 20   (CollSeq.xCmp) 
aac0: 61 6e 64 20 61 6e 6f 74 68 65 72 20 74 68 61 74  and another that
aad0: 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 74 65  .** processes te
aae0: 78 74 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  xt encoded in UT
aaf0: 46 2d 31 36 20 28 43 6f 6c 6c 53 65 71 2e 78 43  F-16 (CollSeq.xC
ab00: 6d 70 31 36 29 2c 20 75 73 69 6e 67 20 74 68 65  mp16), using the
ab10: 20 6d 61 63 68 69 6e 65 0a 2a 2a 20 6e 61 74 69   machine.** nati
ab20: 76 65 20 62 79 74 65 20 6f 72 64 65 72 2e 20 57  ve byte order. W
ab30: 68 65 6e 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  hen a collation 
ab40: 73 65 71 75 65 6e 63 65 20 69 73 20 69 6e 76 6f  sequence is invo
ab50: 6b 65 64 2c 20 53 51 4c 69 74 65 20 73 65 6c 65  ked, SQLite sele
ab60: 63 74 73 0a 2a 2a 20 74 68 65 20 76 65 72 73 69  cts.** the versi
ab70: 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 72 65 71  on that will req
ab80: 75 69 72 65 20 74 68 65 20 6c 65 61 73 74 20 65  uire the least e
ab90: 78 70 65 6e 73 69 76 65 20 65 6e 63 6f 64 69 6e  xpensive encodin
aba0: 67 0a 2a 2a 20 74 72 61 6e 73 6c 61 74 69 6f 6e  g.** translation
abb0: 73 2c 20 69 66 20 61 6e 79 2e 0a 2a 2a 0a 2a 2a  s, if any..**.**
abc0: 20 54 68 65 20 43 6f 6c 6c 53 65 71 2e 70 55 73   The CollSeq.pUs
abd0: 65 72 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  er member variab
abe0: 6c 65 20 69 73 20 61 6e 20 65 78 74 72 61 20 70  le is an extra p
abf0: 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 70 61  arameter that pa
ac00: 73 73 65 64 20 69 6e 0a 2a 2a 20 61 73 20 74 68  ssed in.** as th
ac10: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
ac20: 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20 63 6f   to the UTF-8 co
ac30: 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
ac40: 6e 2c 20 78 43 6d 70 2e 0a 2a 2a 20 43 6f 6c 6c  n, xCmp..** Coll
ac50: 53 65 71 2e 70 55 73 65 72 31 36 20 69 73 20 74  Seq.pUser16 is t
ac60: 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 66 6f  he equivalent fo
ac70: 72 20 74 68 65 20 55 54 46 2d 31 36 20 63 6f 6d  r the UTF-16 com
ac80: 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
ac90: 2c 0a 2a 2a 20 78 43 6d 70 31 36 2e 0a 2a 2a 0a  ,.** xCmp16..**.
aca0: 2a 2a 20 49 66 20 62 6f 74 68 20 43 6f 6c 6c 53  ** If both CollS
acb0: 65 71 2e 78 43 6d 70 20 61 6e 64 20 43 6f 6c 6c  eq.xCmp and Coll
acc0: 53 65 71 2e 78 43 6d 70 31 36 20 61 72 65 20 4e  Seq.xCmp16 are N
acd0: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
ace0: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
acf0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
ad00: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
ad10: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
ad20: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
ad30: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
ad40: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
ad50: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
ad60: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
ad70: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
ad80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
ad90: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
ada0: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
adb0: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
adc0: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
add0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
ade0: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
adf0: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 75 38 20 74  xCmp() */.  u8 t
ae00: 79 70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ype;            
ae10: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
ae20: 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 2e 2e 2e 20  SQLITE_COLL_... 
ae30: 76 61 6c 75 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  values below */.
ae40: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
ae50: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
ae60: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
ae70: 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
ae80: 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
ae90: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
aea0: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
aeb0: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
aec0: 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
aed0: 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
aee0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
aef0: 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20 43  owed values of C
af00: 6f 6c 6c 53 65 71 2e 74 79 70 65 3a 0a 2a 2f 0a  ollSeq.type:.*/.
af10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
af20: 4f 4c 4c 5f 42 49 4e 41 52 59 20 20 31 20 20 2f  OLL_BINARY  1  /
af30: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d 65  * The default me
af40: 6d 63 6d 70 28 29 20 63 6f 6c 6c 61 74 69 6e 67  mcmp() collating
af50: 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a 23 64 65   sequence */.#de
af60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c  fine SQLITE_COLL
af70: 5f 4e 4f 43 41 53 45 20 20 32 20 20 2f 2a 20 54  _NOCASE  2  /* T
af80: 68 65 20 62 75 69 6c 74 2d 69 6e 20 4e 4f 43 41  he built-in NOCA
af90: 53 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  SE collating seq
afa0: 75 65 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65  uence */.#define
afb0: 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 52 45 56   SQLITE_COLL_REV
afc0: 45 52 53 45 20 33 20 20 2f 2a 20 54 68 65 20 62  ERSE 3  /* The b
afd0: 75 69 6c 74 2d 69 6e 20 52 45 56 45 52 53 45 20  uilt-in REVERSE 
afe0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
aff0: 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ce */.#define SQ
b000: 4c 49 54 45 5f 43 4f 4c 4c 5f 55 53 45 52 20 20  LITE_COLL_USER  
b010: 20 20 30 20 20 2f 2a 20 41 6e 79 20 6f 74 68 65    0  /* Any othe
b020: 72 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 63  r user-defined c
b030: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
b040: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  e */../*.** A so
b050: 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
b060: 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
b070: 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
b080: 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
b090: 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
b0a0: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
b0b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b0c0: 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
b0d0: 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
b0e0: 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
b0f0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
b100: 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
b110: 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
b120: 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
b130: 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
b140: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
b150: 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
b160: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
b170: 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
b180: 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
b190: 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
b1a0: 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
b1b0: 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
b1c0: 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
b1d0: 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20  consecutively.  
b1e0: 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
b1f0: 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
b200: 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
b210: 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68  in with 'a'.  Th
b220: 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
b230: 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
b240: 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
b250: 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
b260: 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
b270: 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
b280: 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
b290: 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
b2a0: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
b2b0: 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
b2c0: 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
b2d0: 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
b2e0: 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
b2f0: 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
b300: 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
b310: 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23  comparison..*/.#
b320: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b330: 46 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23  F_TEXT     'a'.#
b340: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b350: 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23  F_NONE     'b'.#
b360: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b370: 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23  F_NUMERIC  'c'.#
b380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b390: 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23  F_INTEGER  'd'.#
b3a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
b3b0: 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a  F_REAL     'e'..
b3c0: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
b3d0: 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
b3e0: 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
b3f0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
b400: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
b410: 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
b420: 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
b430: 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
b440: 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
b450: 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65  y value. .*/.#de
b460: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b470: 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f  MASK     0x67../
b480: 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
b490: 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
b4a0: 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
b4b0: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
b4c0: 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
b4d0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
b4e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b4f0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
b500: 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  08  /* jumps if 
b510: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
b520: 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
b530: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
b540: 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53        0x10  /* S
b550: 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
b560: 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
b570: 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
b580: 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
b590: 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
b5a0: 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  NULL=NULL */../*
b5b0: 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
b5c0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
b5d0: 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
b5e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
b5f0: 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
b600: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
b610: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
b620: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
b630: 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
b640: 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
b650: 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
b660: 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
b670: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
b680: 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
b690: 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
b6a0: 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
b6b0: 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
b6c0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
b6d0: 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
b6e0: 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
b6f0: 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
b700: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
b710: 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
b720: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
b730: 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69  tual table .** i
b740: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73  mplementation. s
b750: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
b760: 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20  dles can not be 
b770: 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a  shared between .
b780: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
b790: 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68  ections, even wh
b7a0: 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  en the rest of t
b7b0: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  he in-memory dat
b7c0: 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61  abase .** schema
b7d0: 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
b7e0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
b7f0: 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
b800: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
b810: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
b820: 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
b830: 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
b840: 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
b850: 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
b860: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
b870: 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
b880: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b890: 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
b8a0: 20 74 68 65 6e 20 75 73 65 64 20 62 79 20 74 68   then used by th
b8b0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
b8c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
b8d0: 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61  o access real ta
b8e0: 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20  bles .** within 
b8f0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f  the database. So
b900: 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61   that they appea
b910: 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  r as part of the
b920: 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61   callers .** tra
b930: 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20  nsaction, these 
b940: 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f  accesses need to
b950: 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65   be made via the
b960: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a   same database .
b970: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  ** connection as
b980: 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78   that used to ex
b990: 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74  ecute SQL operat
b9a0: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74  ions on the virt
b9b0: 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ual table..**.**
b9c0: 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65   All VTable obje
b9d0: 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70  cts that corresp
b9e0: 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  ond to a single 
b9f0: 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65  table in a share
ba00: 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63  d.** database sc
ba10: 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c  hema are initial
ba20: 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  ly stored in a l
ba30: 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74  inked-list point
ba40: 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20  ed to by.** the 
ba50: 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65  Table.pVTable me
ba60: 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66  mber variable of
ba70: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
ba80: 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e  ng Table object.
ba90: 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69  .** When an sqli
baa0: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70  te3_prepare() op
bab0: 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69  eration is requi
bac0: 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  red to access th
bad0: 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
bae0: 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20  le, it searches 
baf0: 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65  the list for the
bb00: 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72   VTable that cor
bb10: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a  responds to the.
bb20: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
bb30: 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65  ection doing the
bb40: 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73   preparing so as
bb50: 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72   to use the corr
bb60: 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76  ect.** sqlite3_v
bb70: 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74  tab* handle in t
bb80: 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
bb90: 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e  y..**.** When an
bba0: 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65   in-memory Table
bbb0: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74   object is delet
bbc0: 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20  ed (for example 
bbd0: 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65  when the.** sche
bbe0: 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f  ma is being relo
bbf0: 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65  aded for some re
bc00: 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c  ason), the VTabl
bc10: 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f  e objects are no
bc20: 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e  t .** deleted an
bc30: 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  d the sqlite3_vt
bc40: 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20  ab* handles are 
bc50: 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28  not xDisconnect(
bc60: 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  )ed .** immediat
bc70: 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ely. Instead, th
bc80: 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f  ey are moved fro
bc90: 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  m the Table.pVTa
bca0: 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61  ble list to.** a
bcb0: 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69  nother linked li
bcc0: 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65  st headed by the
bcd0: 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
bce0: 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74  nect member of t
bcf0: 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
bd00: 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75  ing sqlite3 stru
bd10: 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20  cture. They are 
bd20: 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69  then deleted/xDi
bd30: 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e  sconnected .** n
bd40: 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65  ext time a state
bd50: 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64  ment is prepared
bd60: 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69   using said sqli
bd70: 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f  te3*. This is do
bd80: 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64  ne.** to avoid d
bd90: 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69  eadlock issues i
bda0: 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
bdb0: 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  e sqlite3.mutex 
bdc0: 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65  mutexes..** Refe
bdd0: 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62  r to comments ab
bde0: 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c  ove function sql
bdf0: 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
be00: 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  st() for an.** e
be10: 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f  xplanation as to
be20: 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20   why it is safe 
be30: 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20  to add an entry 
be40: 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44  to an sqlite3.pD
be50: 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73  isconnect.** lis
be60: 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e  t without holdin
be70: 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
be80: 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ing sqlite3.mute
be90: 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  x mutex..**.** T
bea0: 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62  he memory for ob
beb0: 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79  jects of this ty
bec0: 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c  pe is always all
bed0: 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71  ocated by .** sq
bee0: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
bef0: 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
bf00: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
bf10: 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
bf20: 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73   as .** the firs
bf30: 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  t argument..*/.s
bf40: 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20  truct VTable {. 
bf50: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
bf60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
bf70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
bf80: 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
bf90: 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  h this table */.
bfa0: 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20    Module *pMod; 
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
bfc0: 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65  ointer to module
bfd0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bfe0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
bff0: 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f  b *pVtab;      /
c000: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61  * Pointer to vta
c010: 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20  b instance */.  
c020: 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
c030: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c040: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
c050: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
c060: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  e */.  VTable *p
c070: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
c080: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b   /* Next in link
c090: 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f  ed list (see abo
c0a0: 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ve) */.};../*.**
c0b0: 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   Each SQL table 
c0c0: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
c0d0: 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20 69  n memory by an i
c0e0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a  nstance of the.*
c0f0: 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  * following stru
c100: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  cture..**.** Tab
c110: 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  le.zName is the 
c120: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
c130: 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66 20  e.  The case of 
c140: 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20  the original.** 
c150: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
c160: 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64  tement is stored
c170: 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e 6f  , but case is no
c180: 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66 6f  t significant fo
c190: 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73  r.** comparisons
c1a0: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43  ..**.** Table.nC
c1b0: 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  ol is the number
c1c0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
c1d0: 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62 6c  his table.  Tabl
c1e0: 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70  e.aCol is a.** p
c1f0: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72 72  ointer to an arr
c200: 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72  ay of Column str
c210: 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72  uctures, one for
c220: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a   each column..**
c230: 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
c240: 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20   has an INTEGER 
c250: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65  PRIMARY KEY, the
c260: 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  n Table.iPKey is
c270: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a   the index of.**
c280: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74   the column that
c290: 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20 20   is that key.   
c2a0: 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65 2e  Otherwise Table.
c2b0: 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69 76  iPKey is negativ
c2c0: 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74  e.  Note.** that
c2d0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
c2e0: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
c2f0: 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45 52   must be INTEGER
c300: 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64 20   for this field 
c310: 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20 41  to.** be set.  A
c320: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
c330: 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61 73  Y KEY is used as
c340: 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65   the rowid for e
c350: 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68  ach row of.** th
c360: 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20 74  e table.  If a t
c370: 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54 45  able has no INTE
c380: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
c390: 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72   then a random r
c3a0: 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72  owid.** is gener
c3b0: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
c3c0: 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20  w of the table. 
c3d0: 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
c3e0: 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20 74  y is set if.** t
c3f0: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 79  he table has any
c400: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e   PRIMARY KEY, IN
c410: 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77 69  TEGER or otherwi
c420: 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e  se..**.** Table.
c430: 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67 65  tnum is the page
c440: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
c450: 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  root BTree page 
c460: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20  of the table in 
c470: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
c480: 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65 2e  file.  If Table.
c490: 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65 78  iDb is the index
c4a0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
c4b0: 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a   table backend.*
c4c0: 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b  * in sqlite.aDb[
c4d0: 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68 65  ].  0 is for the
c4e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61   main database a
c4f0: 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65 20  nd 1 is for the 
c500: 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c  file that.** hol
c510: 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ds temporary tab
c520: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
c530: 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72 61    If TF_Ephemera
c540: 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e  l is set.** then
c550: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73 74   the table is st
c560: 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74  ored in a file t
c570: 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63  hat is automatic
c580: 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20  ally deleted.** 
c590: 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63 75  when the VDBE cu
c5a0: 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c  rsor to the tabl
c5b0: 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e  e is closed.  In
c5c0: 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c 65   this case Table
c5d0: 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73  .tnum .** refers
c5e0: 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
c5f0: 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ber that holds t
c600: 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e  he table open, n
c610: 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a  ot to the root.*
c620: 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20  * page number.  
c630: 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73  Transient tables
c640: 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c   are used to hol
c650: 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  d the results of
c660: 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20   a.** sub-query 
c670: 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 73  that appears ins
c680: 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74  tead of a real t
c690: 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65  able name in the
c6a0: 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a   FROM clause .**
c6b0: 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
c6c0: 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
c6d0: 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
c6e0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
c6f0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
c700: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f  table or view */
c710: 0a 20 20 69 6e 74 20 69 50 4b 65 79 3b 20 20 20  .  int iPKey;   
c720: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
c730: 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
c740: 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
c750: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
c760: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
c770: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c780: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
c790: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
c7a0: 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
c7b0: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
c7c0: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
c7d0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
c7e0: 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
c7f0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
c800: 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
c810: 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 69 6e 74 20  table. */.  int 
c820: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
c830: 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e   /* Root BTree n
c840: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  ode for this tab
c850: 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f  le (see note abo
c860: 76 65 29 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ve) */.  unsigne
c870: 64 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 2f 2a  d nRowEst;    /*
c880: 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
c890: 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
c8a0: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
c8b0: 6c 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  le */.  Select *
c8c0: 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
c8d0: 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
c8e0: 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
c8f0: 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
c900: 2e 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  . */.  u16 nRef;
c910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c920: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
c930: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
c940: 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73  */.  u8 tabFlags
c950: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
c960: 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
c970: 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
c980: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
c990: 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
c9a0: 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
c9b0: 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
c9c0: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
c9d0: 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
c9e0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
c9f0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
ca00: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
ca10: 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
ca20: 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
ca30: 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
ca40: 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
ca50: 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lumn */.#ifndef 
ca60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43  SQLITE_OMIT_CHEC
ca70: 4b 0a 20 20 45 78 70 72 20 2a 70 43 68 65 63 6b  K.  Expr *pCheck
ca80: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
ca90: 41 4e 44 20 6f 66 20 61 6c 6c 20 43 48 45 43 4b  AND of all CHECK
caa0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
cab0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
cac0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
cad0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
cae0: 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
caf0: 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
cb00: 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
cb10: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
cb20: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
cb30: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
cb40: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 56 54 61  RTUALTABLE.  VTa
cb50: 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
cb60: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
cb70: 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
cb80: 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67    int nModuleArg
cb90: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
cba0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
cbb0: 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20   the module */. 
cbc0: 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65   char **azModule
cbd0: 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66  Arg;  /* Text of
cbe0: 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73   all module args
cbf0: 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20  . [0] is module 
cc00: 6e 61 6d 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  name */.#endif. 
cc10: 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
cc20: 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
cc30: 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
cc40: 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
cc50: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
cc60: 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
cc70: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
cc80: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
cc90: 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
cca0: 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
ccb0: 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
ccc0: 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
ccd0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
cce0: 75 65 73 20 66 6f 72 20 54 61 62 65 2e 74 61 62  ues for Tabe.tab
ccf0: 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Flags..*/.#defin
cd00: 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
cd10: 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
cd20: 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d  Read-only system
cd30: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
cd40: 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20  e TF_Ephemeral  
cd50: 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
cd60: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
cd70: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
cd80: 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
cd90: 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c   0x04    /* Tabl
cda0: 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
cdb0: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
cdc0: 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  F_Autoincrement 
cdd0: 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74    0x08    /* Int
cde0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
cdf0: 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
ce00: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
ce10: 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20  Virtual         
ce20: 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20  0x10    /* Is a 
ce30: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
ce40: 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 65 65 64  .#define TF_Need
ce50: 4d 65 74 61 64 61 74 61 20 20 20 20 30 78 32 30  Metadata    0x20
ce60: 20 20 20 20 2f 2a 20 61 43 6f 6c 5b 5d 2e 7a 54      /* aCol[].zT
ce70: 79 70 65 20 61 6e 64 20 61 43 6f 6c 5b 5d 2e 70  ype and aCol[].p
ce80: 43 6f 6c 6c 20 6d 69 73 73 69 6e 67 20 2a 2f 0a  Coll missing */.
ce90: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  .../*.** Test to
cea0: 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
ceb0: 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
cec0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
ced0: 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
cee0: 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
cef0: 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
cf00: 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
cf10: 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
cf20: 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
cf30: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
cf40: 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
cf50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
cf60: 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
cf70: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
cf80: 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62        (((X)->tab
cf90: 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75  Flags & TF_Virtu
cfa0: 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  al)!=0).#  defin
cfb0: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
cfc0: 28 58 29 20 28 28 58 29 2d 3e 69 73 48 69 64 64  (X) ((X)->isHidd
cfd0: 65 6e 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  en).#else.#  def
cfe0: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
cff0: 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
d000: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
d010: 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (X) 0.#endif../*
d020: 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
d030: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
d040: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
d050: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
d060: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
d070: 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
d080: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
d090: 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
d0a0: 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
d0b0: 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
d0c0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
d0d0: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
d0e0: 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
d0f0: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
d100: 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
d110: 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
d120: 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
d130: 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
d140: 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
d150: 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
d160: 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
d170: 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
d180: 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
d190: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
d1a0: 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
d1b0: 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
d1c0: 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
d1d0: 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
d1e0: 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
d1f0: 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
d200: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
d210: 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
d220: 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
d230: 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
d240: 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
d250: 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
d260: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
d270: 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
d280: 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
d290: 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
d2a0: 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
d2b0: 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
d2c0: 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
d2d0: 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
d2e0: 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
d2f0: 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
d300: 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
d310: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  d..*/.struct FKe
d320: 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
d330: 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
d340: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
d350: 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
d360: 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
d370: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
d380: 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f  rom;  /* Next fo
d390: 72 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46 72  reign key in pFr
d3a0: 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  om */.  char *zT
d3b0: 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  o;        /* Nam
d3c0: 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20  e of table that 
d3d0: 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74  the key points t
d3e0: 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20  o (aka: Parent) 
d3f0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
d400: 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  To;    /* Next f
d410: 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61  oreign key on ta
d420: 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f  ble named zTo */
d430: 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
d440: 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
d450: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20   foreign key on 
d460: 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20  table named zTo 
d470: 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
d480: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d490: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
d4a0: 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
d4b0: 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
d4c0: 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
d4d0: 72 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65  rred;    /* True
d4e0: 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
d4f0: 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
d500: 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
d510: 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
d520: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  2];          /* 
d530: 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
d540: 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
d550: 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
d560: 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
d570: 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72  igger[2];  /* Tr
d580: 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
d590: 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
d5a0: 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
d5b0: 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f   {  /* Mapping o
d5c0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
d5d0: 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
d5e0: 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
d5f0: 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f  iFrom;         /
d600: 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
d610: 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
d620: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
d630: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
d640: 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
d650: 49 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59  If 0 use PRIMARY
d660: 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
d670: 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [1];        /* O
d680: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
d690: 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
d6a0: 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   s */.};../*.** 
d6b0: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
d6c0: 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
d6d0: 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
d6e0: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
d6f0: 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
d700: 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
d710: 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
d720: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
d730: 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
d740: 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
d750: 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
d760: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
d770: 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
d780: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
d790: 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
d7a0: 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
d7b0: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
d7c0: 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
d7d0: 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
d7e0: 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
d7f0: 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
d800: 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
d810: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
d820: 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
d830: 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
d840: 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
d850: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
d860: 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
d870: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
d880: 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
d890: 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
d8a0: 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
d8b0: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
d8c0: 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
d8d0: 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
d8e0: 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
d8f0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
d900: 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
d910: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
d920: 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
d930: 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
d940: 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
d950: 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
d960: 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
d970: 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
d980: 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
d990: 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
d9a0: 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
d9b0: 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
d9c0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
d9d0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
d9e0: 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
d9f0: 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
da00: 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
da10: 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
da20: 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
da30: 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
da40: 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
da50: 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
da60: 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
da70: 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
da80: 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
da90: 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
daa0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
dab0: 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
dac0: 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
dad0: 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
dae0: 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
daf0: 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
db00: 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
db10: 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
db20: 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
db30: 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
db40: 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
db50: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
db60: 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
db70: 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
db80: 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
db90: 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
dba0: 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
dbb0: 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20  key..** .** The 
dbc0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
dbd0: 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
dbe0: 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
dbf0: 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
dc00: 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
dc10: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
dc20: 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
dc30: 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
dc40: 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
dc50: 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
dc60: 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
dc70: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
dc80: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
dc90: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
dca0: 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
dcb0: 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
dcc0: 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
dcd0: 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
dce0: 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
dcf0: 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
dd00: 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
dd10: 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
dd20: 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
dd30: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
dd40: 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
dd50: 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
dd60: 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
dd70: 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
dd80: 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
dd90: 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
dda0: 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
ddb0: 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
ddc0: 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
ddd0: 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  TE */..#define O
dde0: 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f  E_Restrict 6   /
ddf0: 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
de00: 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
de10: 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
de20: 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
de30: 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a  _SetNull  7   /*
de40: 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
de50: 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
de60: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
de70: 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a  _SetDflt  8   /*
de80: 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
de90: 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
dea0: 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
deb0: 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
dec0: 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20   9   /* Cascade 
ded0: 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  the changes */..
dee0: 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
def0: 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77 68  lt  99  /* Do wh
df00: 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
df10: 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
df20: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
df30: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
df40: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
df50: 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
df60: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
df70: 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
df80: 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
df90: 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
dfa0: 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72  l the .** compar
dfb0: 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
dfc0: 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73  index keys..*/.s
dfd0: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
dfe0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
dff0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
e000: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e010: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
e020: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
e030: 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65  t encoding - one
e040: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55   of the SQLITE_U
e050: 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  TF* values */.  
e060: 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
e070: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
e080: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
e090: 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  l[] */.  u8 *aSo
e0a0: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
e0b0: 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
e0c0: 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79  ach column.  May
e0d0: 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f   be NULL */.  Co
e0e0: 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
e0f0: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
e100: 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
e110: 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
e120: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
e130: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e140: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
e150: 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
e160: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a  mation about a.*
e170: 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72  * single index r
e180: 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
e190: 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73  lready been pars
e1a0: 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
e1b0: 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73  vidual.** values
e1c0: 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
e1d0: 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
e1e0: 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
e1f0: 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
e200: 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
e210: 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
e220: 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
e230: 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
e240: 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
e250: 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
e260: 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
e270: 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
e280: 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
e290: 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
e2a0: 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
e2b0: 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
e2c0: 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
e2d0: 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
e2e0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
e2f0: 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  is structure hol
e300: 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  ds a record that
e310: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
e320: 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a  n disassembled.*
e330: 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74  * into its const
e340: 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a  ituent fields..*
e350: 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
e360: 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
e370: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
e380: 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
e390: 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
e3a0: 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36  rmation */.  u16
e3b0: 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
e3c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
e3d0: 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
e3e0: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
e3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f            /* Boo
e400: 6c 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20  lean settings.  
e410: 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c  UNPACKED_... bel
e420: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69  ow */.  i64 rowi
e430: 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55  d;          /* U
e440: 73 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f  sed by UNPACKED_
e450: 50 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f  PREFIX_SEARCH */
e460: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
e470: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
e480: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
e490: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20  lowed values of 
e4a0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66  UnpackedRecord.f
e4b0: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
e4c0: 55 4e 50 41 43 4b 45 44 5f 4e 45 45 44 5f 46 52  UNPACKED_NEED_FR
e4d0: 45 45 20 20 20 20 20 30 78 30 30 30 31 20 20 2f  EE     0x0001  /
e4e0: 2a 20 4d 65 6d 6f 72 79 20 69 73 20 66 72 6f 6d  * Memory is from
e4f0: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 29   sqlite3Malloc()
e500: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41   */.#define UNPA
e510: 43 4b 45 44 5f 4e 45 45 44 5f 44 45 53 54 52 4f  CKED_NEED_DESTRO
e520: 59 20 20 30 78 30 30 30 32 20 20 2f 2a 20 61 70  Y  0x0002  /* ap
e530: 4d 65 6d 5b 5d 73 20 73 68 6f 75 6c 64 20 61 6c  Mem[]s should al
e540: 6c 20 62 65 20 64 65 73 74 72 6f 79 65 64 20 2a  l be destroyed *
e550: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
e560: 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 20  ED_IGNORE_ROWID 
e570: 20 30 78 30 30 30 34 20 20 2f 2a 20 49 67 6e 6f   0x0004  /* Igno
e580: 72 65 20 74 72 61 69 6c 69 6e 67 20 72 6f 77 69  re trailing rowi
e590: 64 20 6f 6e 20 6b 65 79 31 20 2a 2f 0a 23 64 65  d on key1 */.#de
e5a0: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 4e  fine UNPACKED_IN
e5b0: 43 52 4b 45 59 20 20 20 20 20 20 20 30 78 30 30  CRKEY       0x00
e5c0: 30 38 20 20 2f 2a 20 4d 61 6b 65 20 74 68 69 73  08  /* Make this
e5d0: 20 6b 65 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20   key an epsilon 
e5e0: 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65 66 69 6e  larger */.#defin
e5f0: 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  e UNPACKED_PREFI
e600: 58 5f 4d 41 54 43 48 20 20 30 78 30 30 31 30 20  X_MATCH  0x0010 
e610: 20 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61 74   /* A prefix mat
e620: 63 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ch is considered
e630: 20 4f 4b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55   OK */.#define U
e640: 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53  NPACKED_PREFIX_S
e650: 45 41 52 43 48 20 30 78 30 30 32 30 20 20 2f 2a  EARCH 0x0020  /*
e660: 20 41 20 70 72 65 66 69 78 20 6d 61 74 63 68 20   A prefix match 
e670: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b  is considered OK
e680: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
e690: 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
e6a0: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
e6b0: 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
e6c0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
e6d0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
e6e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
e6f0: 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
e700: 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
e710: 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
e720: 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
e730: 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
e740: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
e750: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
e760: 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
e770: 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
e780: 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
e790: 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
e7a0: 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
e7b0: 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
e7c0: 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
e7d0: 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
e7e0: 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
e7f0: 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
e800: 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
e810: 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
e820: 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
e830: 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
e840: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
e850: 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
e860: 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
e870: 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
e880: 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
e890: 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
e8a0: 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
e8b0: 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
e8c0: 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
e8d0: 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
e8e0: 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
e8f0: 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73  use the .** firs
e900: 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
e910: 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
e920: 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
e930: 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
e940: 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
e950: 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
e960: 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
e970: 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
e980: 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
e990: 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
e9a0: 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
e9b0: 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
e9c0: 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
e9d0: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
e9e0: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
e9f0: 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
ea00: 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
ea10: 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
ea20: 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
ea30: 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
ea40: 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
ea50: 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
ea60: 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
ea70: 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
ea80: 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
ea90: 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
eaa0: 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
eab0: 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
eac0: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a  ict resolution .
ead0: 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
eae0: 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
eaf0: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
eb00: 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
eb10: 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
eb20: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
eb30: 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
eb40: 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
eb50: 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
eb60: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d   */.  int nColum
eb70: 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
eb80: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
eb90: 68 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79  he table used by
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 2a 61 69 43 6f 6c 75 6d 6e 3b 20   int *aiColumn; 
ebc0: 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d    /* Which colum
ebd0: 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74  ns are used by t
ebe0: 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20  his index.  1st 
ebf0: 69 73 20 30 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  is 0 */.  unsign
ec00: 65 64 20 2a 61 69 52 6f 77 45 73 74 3b 20 2f 2a  ed *aiRowEst; /*
ec10: 20 52 65 73 75 6c 74 20 6f 66 20 41 4e 41 4c 59   Result of ANALY
ec20: 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65  ZE: Est. rows se
ec30: 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63  lected by each c
ec40: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  olumn */.  Table
ec50: 20 2a 70 54 61 62 6c 65 3b 20 20 20 2f 2a 20 54   *pTable;   /* T
ec60: 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
ec70: 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
ec80: 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
ec90: 20 2f 2a 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   /* Page contain
eca0: 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
ecb0: 20 69 6e 64 65 78 20 69 6e 20 64 61 74 61 62 61   index in databa
ecc0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
ecd0: 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 2f 2a  onError;      /*
ece0: 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
ecf0: 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
ed00: 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
ed10: 20 20 75 38 20 61 75 74 6f 49 6e 64 65 78 3b 20    u8 autoIndex; 
ed20: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 73     /* True if is
ed30: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
ed40: 72 65 61 74 65 64 20 28 65 78 3a 20 62 79 20 55  reated (ex: by U
ed50: 4e 49 51 55 45 29 20 2a 2f 0a 20 20 63 68 61 72  NIQUE) */.  char
ed60: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 2f 2a 20   *zColAff;   /* 
ed70: 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
ed80: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
ed90: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
eda0: 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
edb0: 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
edc0: 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
edd0: 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
ede0: 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
edf0: 70 53 63 68 65 6d 61 3b 20 2f 2a 20 53 63 68 65  pSchema; /* Sche
ee00: 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
ee10: 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
ee20: 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 2f   *aSortOrder;  /
ee30: 2a 20 41 72 72 61 79 20 6f 66 20 73 69 7a 65 20  * Array of size 
ee40: 49 6e 64 65 78 2e 6e 43 6f 6c 75 6d 6e 2e 20 54  Index.nColumn. T
ee50: 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65  rue==DESC, False
ee60: 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20  ==ASC */.  char 
ee70: 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 2f 2a 20 41  **azColl;   /* A
ee80: 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
ee90: 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
eea0: 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
eeb0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61  IndexSample *aSa
eec0: 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 41 72 72 61  mple;    /* Arra
eed0: 79 20 6f 66 20 53 51 4c 49 54 45 5f 49 4e 44 45  y of SQLITE_INDE
eee0: 58 5f 53 41 4d 50 4c 45 53 20 73 61 6d 70 6c 65  X_SAMPLES sample
eef0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  s */.};../*.** E
ef00: 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
ef10: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
ef20: 73 74 61 74 32 20 74 61 62 6c 65 20 69 73 20 72  stat2 table is r
ef30: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
ef40: 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61  mory .** using a
ef50: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
ef60: 69 73 20 74 79 70 65 2e 0a 2a 2f 0a 73 74 72 75  is type..*/.stru
ef70: 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
ef80: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
ef90: 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
efa0: 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65  * Value if eType
efb0: 20 69 73 20 53 51 4c 49 54 45 5f 54 45 58 54 20   is SQLITE_TEXT 
efc0: 6f 72 20 53 51 4c 49 54 45 5f 42 4c 4f 42 20 2a  or SQLITE_BLOB *
efd0: 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 20  /.    double r; 
efe0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69        /* Value i
eff0: 66 20 65 54 79 70 65 20 69 73 20 53 51 4c 49 54  f eType is SQLIT
f000: 45 5f 46 4c 4f 41 54 20 6f 72 20 53 51 4c 49 54  E_FLOAT or SQLIT
f010: 45 5f 49 4e 54 45 47 45 52 20 2a 2f 0a 20 20 7d  E_INTEGER */.  }
f020: 20 75 3b 0a 20 20 75 38 20 65 54 79 70 65 3b 20   u;.  u8 eType; 
f030: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
f040: 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 49  E_NULL, SQLITE_I
f050: 4e 54 45 47 45 52 20 2e 2e 2e 20 65 74 63 2e 20  NTEGER ... etc. 
f060: 2a 2f 0a 20 20 75 38 20 6e 42 79 74 65 3b 20 20  */.  u8 nByte;  
f070: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 69         /* Size i
f080: 6e 20 62 79 74 65 20 6f 66 20 74 65 78 74 20 6f  n byte of text o
f090: 72 20 62 6c 6f 62 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  r blob. */.};../
f0a0: 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
f0b0: 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
f0c0: 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
f0d0: 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
f0e0: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
f0f0: 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
f100: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
f110: 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
f120: 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
f130: 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
f140: 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
f150: 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
f160: 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
f170: 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
f180: 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
f190: 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
f1a0: 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
f1b0: 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
f1c0: 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
f1d0: 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
f1e0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
f1f0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
f200: 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
f210: 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
f220: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
f230: 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
f240: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
f250: 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
f260: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
f270: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
f280: 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
f290: 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
f2a0: 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
f2b0: 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
f2c0: 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
f2d0: 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
f2e0: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
f2f0: 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
f300: 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
f310: 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
f320: 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
f330: 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
f340: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
f350: 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
f360: 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
f370: 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
f380: 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
f390: 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
f3a0: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
f3b0: 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
f3c0: 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
f3d0: 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
f3e0: 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
f3f0: 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
f400: 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
f410: 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
f420: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
f430: 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
f440: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
f450: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
f460: 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
f470: 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
f480: 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
f490: 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
f4a0: 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
f4b0: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
f4c0: 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
f4d0: 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
f4e0: 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
f4f0: 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
f500: 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
f510: 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
f520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f530: 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
f540: 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
f550: 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
f560: 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
f570: 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
f580: 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
f590: 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
f5a0: 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
f5b0: 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5d0: 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
f5e0: 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
f5f0: 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
f600: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
f610: 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
f620: 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
f630: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
f640: 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
f650: 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
f660: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74  e */.  int nSort
f670: 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f  ingColumn;     /
f680: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
f690: 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69  mns in the sorti
f6a0: 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 73 74  ng index */.  st
f6b0: 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
f6c0: 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
f6d0: 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
f6e0: 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
f6f0: 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
f700: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
f710: 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
f720: 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
f730: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
f740: 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
f750: 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
f760: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
f770: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
f780: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
f790: 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
f7a0: 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
f7b0: 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
f7c0: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
f7d0: 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
f7e0: 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
f7f0: 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
f800: 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
f810: 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
f820: 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
f830: 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
f840: 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
f850: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
f860: 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
f870: 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
f880: 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
f890: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
f8a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
f8b0: 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
f8c0: 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
f8d0: 43 6f 6c 75 6d 6e 41 6c 6c 6f 63 3b 20 20 20 20  ColumnAlloc;    
f8e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f8f0: 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
f900: 66 6f 72 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20  for aCol[] */.  
f910: 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
f920: 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
f930: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
f940: 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
f950: 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f970: 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
f980: 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
f990: 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
f9a0: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
f9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9c0: 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
f9d0: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
f9e0: 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
f9f0: 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
fa00: 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
fa10: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
fa20: 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
fa30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
fa40: 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
fa50: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
fa60: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
fa70: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
fa80: 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
fa90: 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
faa0: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
fab0: 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
fac0: 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
fad0: 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
fae0: 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
faf0: 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
fb00: 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
fb10: 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
fb20: 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
fb30: 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
fb40: 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
fb50: 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
fb60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
fb70: 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
fb80: 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 6e 74  aFunc[] */.  int
fb90: 20 6e 46 75 6e 63 41 6c 6c 6f 63 3b 20 20 20 20   nFuncAlloc;    
fba0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
fbb0: 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65  f slots allocate
fbc0: 64 20 66 6f 72 20 61 46 75 6e 63 5b 5d 20 2a 2f  d for aFunc[] */
fbd0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
fbe0: 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
fbf0: 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
fc00: 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
fc10: 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
fc20: 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
fc30: 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
fc40: 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
fc50: 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
fc60: 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
fc70: 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
fc80: 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
fc90: 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
fca0: 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
fcb0: 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
fcc0: 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
fcd0: 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
fce0: 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
fcf0: 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
fd00: 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
fd10: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
fd20: 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
fd30: 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
fd40: 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
fd50: 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
fd60: 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
fd70: 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
fd80: 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
fd90: 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
fda0: 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
fdb0: 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
fdc0: 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
fdd0: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
fde0: 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
fdf0: 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
fe00: 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
fe10: 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
fe20: 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
fe30: 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
fe40: 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
fe50: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
fe60: 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
fe70: 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
fe80: 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
fe90: 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
fea0: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
feb0: 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
fec0: 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
fed0: 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
fee0: 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
fef0: 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
ff00: 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
ff10: 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
ff20: 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
ff30: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
ff40: 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
ff50: 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
ff60: 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
ff70: 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
ff80: 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
ff90: 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
ffa0: 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
ffb0: 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
ffc0: 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
ffd0: 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
ffe0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
fff0: 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
10000 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
10010 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a  LOAT, TK_BLOB, .
10020 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29  ** or TK_STRING)
10030 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  , then Expr.toke
10040 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74  n contains the t
10050 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  ext of the SQL l
10060 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68  iteral. If.** th
10070 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
10080 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56  a variable (TK_V
10090 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45  ARIABLE), then E
100a0 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
100b0 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61  ns the .** varia
100c0 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
100d0 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
100e0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
100f0 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
10100 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
10110 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
10120 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
10130 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
10140 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
10150 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
10160 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
10170 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
10180 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
10190 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
101a0 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
101b0 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
101c0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
101d0 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
101e0 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
101f0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
10200 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
10210 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
10220 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
10230 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
10240 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
10250 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
10260 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
10270 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
10280 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
10290 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
102a0 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
102b0 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
102c0 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
102d0 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
102e0 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
102f0 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
10300 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
10310 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
10320 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
10330 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
10340 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a  .** valid..**.**
10350 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   An expression o
10360 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72  f the form ID or
10370 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f   ID.ID refers to
10380 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74   a column in a t
10390 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63  able..** For suc
103a0 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45  h expressions, E
103b0 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f  xpr.op is set to
103c0 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45   TK_COLUMN and E
103d0 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a  xpr.iTable is.**
103e0 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72   the integer cur
103f0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20  sor number of a 
10400 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e  VDBE cursor poin
10410 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62  ting to that tab
10420 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69  le and.** Expr.i
10430 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f  Column is the co
10440 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  lumn number for 
10450 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c  the specific col
10460 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  umn.  If the.** 
10470 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
10480 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69  ed as a result i
10490 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53  n an aggregate S
104a0 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a  ELECT, then the.
104b0 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f  ** value is also
104c0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45   stored in the E
104d0 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20  xpr.iAgg column 
104e0 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65  in the aggregate
104f0 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63   so that.** it c
10500 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61  an be accessed a
10510 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61  fter all aggrega
10520 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  tes are computed
10530 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
10540 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
10550 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65  unbound variable
10560 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74   marker (a quest
10570 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61  ion mark .** cha
10580 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
10590 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
105a0 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
105b0 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
105c0 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20  ndex .** number 
105d0 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
105e0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
105f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
10600 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
10610 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
10620 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
10630 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
10640 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
10650 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
10660 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
10670 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
10680 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
10690 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
106a0 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
106b0 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
106c0 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
106d0 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
106e0 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
106f0 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
10700 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
10710 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
10720 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
10730 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
10740 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
10750 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
10760 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
10770 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
10780 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
10790 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
107a0 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
107b0 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
107c0 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
107d0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
107e0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
107f0 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
10800 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
10810 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
10820 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
10830 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
10840 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
10850 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
10860 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
10870 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
10880 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
10890 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
108a0 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
108b0 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
108c0 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
108d0 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
108e0 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
108f0 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
10900 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
10910 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
10920 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
10930 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
10940 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
10950 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
10960 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
10970 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
10980 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
10990 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
109a0 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
109b0 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
109c0 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
109d0 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
109e0 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
109f0 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
10a00 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
10a10 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
10a20 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
10a30 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
10a40 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
10a50 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
10a60 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
10a70 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
10a80 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
10a90 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
10aa0 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
10ab0 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
10ac0 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
10ad0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
10ae0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
10af0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
10b00 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
10b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10b20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
10b30 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
10b40 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
10b50 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
10b60 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
10b70 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
10b80 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
10b90 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
10bb0 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
10bc0 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
10bd0 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
10be0 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
10bf0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
10c00 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
10c10 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
10c20 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
10c30 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
10c40 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
10c50 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
10c60 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
10c70 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
10c80 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
10c90 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
10ca0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
10cb0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
10cc0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
10cd0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
10ce0 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
10cf0 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
10d00 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
10d10 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
10d20 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
10d30 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n. .  **********
10d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
10d80 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
10d90 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
10da0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
10db0 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
10dc0 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
10dd0 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
10de0 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
10df0 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75 6e  List;     /* Fun
10e00 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20  ction arguments 
10e10 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49 4e  or in "<expr> IN
10e20 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20 2a   (<expr-list)" *
10e30 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
10e40 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55 73  elect;     /* Us
10e50 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65 63  ed for sub-selec
10e60 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20 49  ts and "<expr> I
10e70 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a 2f  N (<select>)" */
10e80 0a 20 20 7d 20 78 3b 0a 20 20 43 6f 6c 6c 53 65  .  } x;.  CollSe
10e90 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 20 20 20  q *pColl;       
10ea0 20 2f 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f   /* The collatio
10eb0 6e 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  n type of the co
10ec0 6c 75 6d 6e 20 6f 72 20 30 20 2a 2f 0a 0a 20 20  lumn or 0 */..  
10ed0 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
10ee0 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
10ef0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
10f00 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
10f10 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
10f20 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
10f30 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
10f40 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
10f50 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
10f60 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
10f70 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
10f80 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
10f90 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
10fa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10fc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69  **********/..  i
10fe0 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
10ff0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
11000 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  MN: cursor numbe
11010 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69  r of table holdi
11020 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  ng column.      
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11040 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45     ** TK_REGISTE
11050 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  R: register numb
11060 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
11070 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11080 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20  K_TRIGGER: 1 -> 
11090 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f  new, 0 -> old */
110a0 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e  .  ynVar iColumn
110b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  ;         /* TK_
110c0 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69  COLUMN: column i
110d0 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f  ndex.  -1 for ro
110e0 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20  wid..           
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11100 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61   TK_VARIABLE: va
11110 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61  riable number (a
11120 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a  lways >= 1). */.
11130 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20    i16 iAgg;     
11140 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
11150 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49  h entry in pAggI
11160 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d  nfo->aCol[] or -
11170 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31  >aFunc[] */.  i1
11180 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c  6 iRightJoinTabl
11190 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72  e;   /* If EP_Fr
111a0 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68  omJoin, the righ
111b0 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a  t table of the j
111c0 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67  oin */.  u8 flag
111d0 73 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  s2;             
111e0 2f 2a 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66  /* Second set of
111f0 20 66 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e 2e   flags.  EP2_...
11200 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11220 49 66 20 61 20 54 4b 5f 52 45 47 49 53 54 45 52  If a TK_REGISTER
11230 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 76  , the original v
11240 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 20  alue of Expr.op 
11250 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
11260 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
11270 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
11280 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
11290 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
112a0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
112b0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
112c0 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
112d0 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 23 69 66 20  essions. */.#if 
112e0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
112f0 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
11300 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
11310 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
11320 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
11330 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
11340 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ndif.};../*.** T
11350 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
11360 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
11370 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
11380 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
11390 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
113a0 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 31 20 20  mJoin   0x0001  
113b0 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e  /* Originated in
113c0 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
113d0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
113e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
113f0 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f         0x0002  /
11400 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
11410 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
11420 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
11430 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65  efine EP_Resolve
11440 64 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49  d   0x0004  /* I
11450 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  Ds have been res
11460 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73  olved to COLUMNs
11470 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
11480 72 72 6f 72 20 20 20 20 20 20 30 78 30 30 30 38  rror      0x0008
11490 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
114a0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
114b0 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23  more errors */.#
114c0 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
114d0 63 74 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  ct   0x0010  /* 
114e0 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
114f0 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
11500 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
11510 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
11520 20 20 30 78 30 30 32 30 20 20 2f 2a 20 70 53 65    0x0020  /* pSe
11530 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
11540 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
11550 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
11560 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30 34 30  blQuoted  0x0040
11570 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73    /* token.z was
11580 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
11590 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
115a0 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20 30 78  EP_InfixFunc  0x
115b0 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 66 6f  0080  /* True fo
115c0 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
115d0 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
115e0 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
115f0 45 50 5f 45 78 70 43 6f 6c 6c 61 74 65 20 30 78  EP_ExpCollate 0x
11600 30 31 30 30 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  0100  /* Collati
11610 6e 67 20 73 65 71 75 65 6e 63 65 20 73 70 65 63  ng sequence spec
11620 69 66 69 65 64 20 65 78 70 6c 69 63 69 74 6c 79  ified explicitly
11630 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46   */.#define EP_F
11640 69 78 65 64 44 65 73 74 20 20 30 78 30 32 30 30  ixedDest  0x0200
11650 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65 64    /* Result need
11660 65 64 20 69 6e 20 61 20 73 70 65 63 69 66 69 63  ed in a specific
11670 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64 65   register */.#de
11680 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
11690 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49 6e     0x0400  /* In
116a0 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
116b0 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
116c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
116d0 78 49 73 53 65 6c 65 63 74 20 20 30 78 30 38 30  xIsSelect  0x080
116e0 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  0  /* x.pSelect 
116f0 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
11700 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
11710 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 45 50 5f 52  */..#define EP_R
11720 65 64 75 63 65 64 20 20 20 20 30 78 31 30 30 30  educed    0x1000
11730 20 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74    /* Expr struct
11740 20 69 73 20 45 58 50 52 5f 52 45 44 55 43 45 44   is EXPR_REDUCED
11750 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
11760 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f  */.#define EP_To
11770 6b 65 6e 4f 6e 6c 79 20 20 30 78 32 30 30 30 20  kenOnly  0x2000 
11780 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
11790 69 73 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  is EXPR_TOKENONL
117a0 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
117b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
117c0 74 61 74 69 63 20 20 20 20 20 30 78 34 30 30 30  tatic     0x4000
117d0 20 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d    /* Held in mem
117e0 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
117f0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
11800 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
11810 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
11820 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
11830 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
11840 73 32 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  s2 field..*/.#de
11850 66 69 6e 65 20 45 50 32 5f 4d 61 6c 6c 6f 63 65  fine EP2_Malloce
11860 64 54 6f 6b 65 6e 20 20 30 78 30 30 30 31 20 20  dToken  0x0001  
11870 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
11880 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
11890 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
118a0 65 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c  e EP2_Irreducibl
118b0 65 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  e    0x0002  /* 
118c0 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52  Cannot EXPRDUP_R
118d0 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20  EDUCE this Expr 
118e0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70 73  */../*.** The ps
118f0 65 75 64 6f 2d 72 6f 75 74 69 6e 65 20 73 71 6c  eudo-routine sql
11900 69 74 65 33 45 78 70 72 53 65 74 49 72 72 65 64  ite3ExprSetIrred
11910 75 63 69 62 6c 65 20 73 65 74 73 20 74 68 65 20  ucible sets the 
11920 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a  EP2_Irreducible.
11930 2a 2a 20 66 6c 61 67 20 6f 6e 20 61 6e 20 65 78  ** flag on an ex
11940 70 72 65 73 73 69 6f 6e 20 73 74 72 75 63 74 75  pression structu
11950 72 65 2e 20 20 54 68 69 73 20 66 6c 61 67 20 69  re.  This flag i
11960 73 20 75 73 65 64 20 66 6f 72 20 56 56 26 41 20  s used for VV&A 
11970 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a 2a 20 72 6f  only.  The.** ro
11980 75 74 69 6e 65 20 69 73 20 69 6d 70 6c 65 6d 65  utine is impleme
11990 6e 74 65 64 20 61 73 20 61 20 6d 61 63 72 6f 20  nted as a macro 
119a0 74 68 61 74 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  that only works 
119b0 77 68 65 6e 20 69 6e 20 64 65 62 75 67 67 69 6e  when in debuggin
119c0 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61 73  g mode,.** so as
119d0 20 6e 6f 74 20 74 6f 20 62 75 72 64 65 6e 20 70   not to burden p
119e0 72 6f 64 75 63 74 69 6f 6e 20 63 6f 64 65 2e 0a  roduction code..
119f0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
11a00 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
11a10 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62  ExprSetIrreducib
11a20 6c 65 28 58 29 20 20 28 58 29 2d 3e 66 6c 61 67  le(X)  (X)->flag
11a30 73 32 20 7c 3d 20 45 50 32 5f 49 72 72 65 64 75  s2 |= EP2_Irredu
11a40 63 69 62 6c 65 0a 23 65 6c 73 65 0a 23 20 64 65  cible.#else.# de
11a50 66 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65  fine ExprSetIrre
11a60 64 75 63 69 62 6c 65 28 58 29 0a 23 65 6e 64 69  ducible(X).#endi
11a70 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  f../*.** These m
11a80 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
11a90 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
11aa0 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
11ab0 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c   the .** Expr.fl
11ac0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
11ad0 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
11ae0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
11af0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
11b00 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
11b10 78 70 72 48 61 73 41 6e 79 50 72 6f 70 65 72 74  xprHasAnyPropert
11b20 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
11b30 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
11b40 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
11b50 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
11b60 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
11b70 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
11b80 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
11b90 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
11ba0 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
11bb0 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
11bc0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
11bd0 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f  required by a no
11be0 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74  rmal Expr .** st
11bf0 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
11c00 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
11c10 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
11c20 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20  t in Expr.flags 
11c30 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20  .** and an Expr 
11c40 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
11c50 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
11c60 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  g set..*/.#defin
11c70 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20  e EXPR_FULLSIZE 
11c80 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
11c90 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20  (Expr)          
11ca0 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f   /* Full size */
11cb0 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45  .#define EXPR_RE
11cc0 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20  DUCEDSIZE       
11cd0 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69   offsetof(Expr,i
11ce0 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f  Table)  /* Commo
11cf0 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64  n features */.#d
11d00 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e  efine EXPR_TOKEN
11d10 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66  ONLYSIZE      of
11d20 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66  fsetof(Expr,pLef
11d30 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65  t)   /* Fewer fe
11d40 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  atures */../*.**
11d50 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
11d60 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72   the sqlite3Expr
11d70 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  Dup() function. 
11d80 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63  See the header c
11d90 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65  omment .** above
11da0 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
11db0 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
11dc0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
11dd0 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
11de0 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
11df0 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
11e00 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
11e10 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
11e20 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
11e30 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
11e40 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
11e50 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
11e60 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
11e70 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
11e80 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
11e90 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
11ea0 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
11eb0 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
11ec0 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
11ed0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
11ee0 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
11ef0 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
11f00 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
11f10 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
11f20 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
11f30 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
11f40 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
11f50 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
11f60 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
11f70 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
11f80 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
11f90 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
11fa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11fb0 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
11fc0 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
11fd0 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c  st */.  int nAll
11fe0 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  oc;            /
11ff0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
12000 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 65  ies allocated be
12010 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 69 45 43  low */.  int iEC
12020 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20 20  ursor;          
12030 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72 20 61  /* VDBE Cursor a
12040 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
12050 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a 2f 0a  his ExprList */.
12060 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
12070 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 45 78 70  t_item {.    Exp
12080 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
12090 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
120a0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
120b0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
120c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
120d0 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
120e0 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
120f0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
12100 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
12110 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
12120 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
12130 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
12140 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
12150 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
12160 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
12170 2a 2f 0a 20 20 20 20 75 38 20 64 6f 6e 65 3b 20  */.    u8 done; 
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12190 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63   A flag to indic
121a0 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73  ate when process
121b0 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20  ing is finished 
121c0 2a 2f 0a 20 20 20 20 75 31 36 20 69 43 6f 6c 3b  */.    u16 iCol;
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
121e0 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
121f0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
12200 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
12210 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
12220 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
12230 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
12240 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
12250 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20  */.  } *a;      
12260 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
12270 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
12280 68 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  h expression */.
12290 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
122a0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
122b0 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
122c0 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
122d0 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
122e0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
122f0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
12300 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
12310 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
12320 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
12330 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
12340 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
12350 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
12360 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
12370 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
12380 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
12390 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
123a0 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
123b0 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
123c0 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
123d0 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
123e0 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
123f0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
12400 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
12410 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
12420 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
12430 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
12440 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
12450 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
12460 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
12470 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
12480 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
12490 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
124a0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
124b0 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
124c0 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
124d0 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
124e0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
124f0 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
12500 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
12510 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
12520 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
12530 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
12540 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
12550 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
12560 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
12570 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
12580 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
12590 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
125a0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
125b0 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
125c0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
125d0 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
125e0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
125f0 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
12600 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
12610 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
12620 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
12630 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
12640 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
12650 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
12660 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
12670 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
12680 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
12690 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
126a0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
126b0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
126c0 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
126d0 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
126e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
126f0 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
12700 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e   list */.  int n
12710 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
12720 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
12730 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
12740 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  [] below */.};..
12750 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73  /*.** The bitmas
12760 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e  k datatype defin
12770 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64  ed below is used
12780 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74   for various opt
12790 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  imizations..**.*
127a0 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20  * Changing this 
127b0 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f  from a 64-bit to
127c0 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c   a 32-bit type l
127d0 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72  imits the number
127e0 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e   of.** tables in
127f0 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e   a join to 32 in
12800 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75  stead of 64.  Bu
12810 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65  t it also reduce
12820 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66  s the size.** of
12830 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20   the library by 
12840 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38  738 bytes on ix8
12850 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36  6..*/.typedef u6
12860 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a  4 Bitmask;../*.*
12870 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
12880 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73  bits in a Bitmas
12890 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20  k.  "BMS" means 
128a0 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a  "BitMask Size"..
128b0 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20  */.#define BMS  
128c0 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69  ((int)(sizeof(Bi
128d0 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a  tmask)*8))../*.*
128e0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
128f0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
12900 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
12910 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
12920 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
12930 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
12940 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
12950 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
12960 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
12970 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
12980 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
12990 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
129a0 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
129b0 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
129c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
129d0 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
129e0 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
129f0 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
12a00 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
12a10 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
12a20 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
12a30 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
12a40 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
12a50 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
12a60 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
12a70 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
12a80 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
12a90 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
12aa0 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
12ab0 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
12ac0 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
12ad0 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
12ae0 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
12af0 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
12b00 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
12b10 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
12b20 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
12b30 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
12b40 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
12b50 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
12b60 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
12b70 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
12b80 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
12b90 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
12ba0 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
12bb0 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
12bc0 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
12bd0 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
12be0 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
12bf0 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
12c00 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
12c10 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
12c20 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
12c30 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
12c40 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
12c50 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
12c60 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
12c70 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
12c80 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
12c90 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
12ca0 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
12cb0 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
12cc0 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
12cd0 72 63 4c 69 73 74 20 7b 0a 20 20 69 31 36 20 6e  rcList {.  i16 n
12ce0 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
12cf0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
12d00 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
12d10 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
12d20 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c 6c 6f 63   */.  i16 nAlloc
12d30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
12d40 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
12d50 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
12d60 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
12d70 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
12d80 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
12d90 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
12da0 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
12db0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
12dc0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
12dd0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
12de0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
12df0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
12e00 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
12e10 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
12e20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
12e30 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
12e40 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
12e50 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
12e60 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
12e70 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
12e80 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
12e90 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
12ea0 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
12eb0 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
12ec0 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 75 38  e name */.    u8
12ed0 20 69 73 50 6f 70 75 6c 61 74 65 64 3b 20 20 20   isPopulated;   
12ee0 2f 2a 20 54 65 6d 70 6f 72 61 72 79 20 74 61 62  /* Temporary tab
12ef0 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
12f00 74 68 20 53 45 4c 45 43 54 20 69 73 20 70 6f 70  th SELECT is pop
12f10 75 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 38  ulated */.    u8
12f20 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
12f30 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
12f40 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
12f50 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
12f60 75 73 20 2a 2f 0a 20 20 20 20 75 38 20 6e 6f 74  us */.    u8 not
12f70 49 6e 64 65 78 65 64 3b 20 20 20 20 2f 2a 20 54  Indexed;    /* T
12f80 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
12f90 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
12fa0 61 75 73 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  ause */.#ifndef 
12fb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
12fc0 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65  AIN.    u8 iSele
12fd0 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20  ctId;     /* If 
12fe0 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20  pSelect!=0, the 
12ff0 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65  id of the sub-se
13000 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23  lect in EQP */.#
13010 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43  endif.    int iC
13020 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
13030 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
13040 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
13050 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
13060 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
13070 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
13080 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
13090 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
130a0 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
130b0 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
130c0 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
130d0 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
130e0 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
130f0 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
13100 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
13110 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  sed */.    char 
13120 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20  *zIndex;     /* 
13130 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
13140 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
13150 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
13160 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65      Index *pInde
13170 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73  x;    /* Index s
13180 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
13190 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78  onding to zIndex
131a0 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20  , if any */.  } 
131b0 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
131c0 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
131d0 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
131e0 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
131f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
13200 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
13210 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
13220 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
13230 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
13240 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
13250 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
13260 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
13270 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
13280 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
13290 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
132a0 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
132b0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
132c0 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
132d0 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
132e0 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
132f0 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
13300 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
13310 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
13320 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
13330 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
13340 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
13350 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
13360 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
13370 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
13380 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
13390 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
133a0 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
133b0 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
133c0 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
133d0 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
133e0 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
133f0 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68 65 72 65 50  ../*.** A WhereP
13400 6c 61 6e 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  lan object holds
13410 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
13420 74 20 64 65 73 63 72 69 62 65 73 20 61 20 6c 6f  t describes a lo
13430 6f 6b 75 70 0a 2a 2a 20 73 74 72 61 74 65 67 79  okup.** strategy
13440 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ..**.** This obj
13450 65 63 74 20 69 73 20 69 6e 74 65 6e 64 65 64 20  ect is intended 
13460 74 6f 20 62 65 20 6f 70 61 71 75 65 20 6f 75 74  to be opaque out
13470 73 69 64 65 20 6f 66 20 74 68 65 20 77 68 65 72  side of the wher
13480 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a 20 49  e.c module..** I
13490 74 20 69 73 20 69 6e 63 6c 75 64 65 64 20 68 65  t is included he
134a0 72 65 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20  re only so that 
134b0 74 68 61 74 20 63 6f 6d 70 69 6c 65 72 20 77 69  that compiler wi
134c0 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20  ll know how big 
134d0 69 74 0a 2a 2a 20 69 73 2e 20 20 4e 6f 6e 65 20  it.** is.  None 
134e0 6f 66 20 74 68 65 20 66 69 65 6c 64 73 20 69 6e  of the fields in
134f0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 68 6f   this object sho
13500 75 6c 64 20 62 65 20 75 73 65 64 20 6f 75 74 73  uld be used outs
13510 69 64 65 20 6f 66 0a 2a 2a 20 74 68 65 20 77 68  ide of.** the wh
13520 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a  ere.c module..**
13530 0a 2a 2a 20 57 69 74 68 69 6e 20 74 68 65 20 75  .** Within the u
13540 6e 69 6f 6e 2c 20 70 49 64 78 20 69 73 20 6f 6e  nion, pIdx is on
13550 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73 46  ly used when wsF
13560 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 44 45 58  lags&WHERE_INDEX
13570 45 44 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 70  ED is true..** p
13580 54 65 72 6d 20 69 73 20 6f 6e 6c 79 20 75 73 65  Term is only use
13590 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26 57  d when wsFlags&W
135a0 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 69 73  HERE_MULTI_OR is
135b0 20 74 72 75 65 2e 20 20 41 6e 64 20 70 56 74 61   true.  And pVta
135c0 62 49 64 78 0a 2a 2a 20 69 73 20 6f 6e 6c 79 20  bIdx.** is only 
135d0 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67  used when wsFlag
135e0 73 26 57 48 45 52 45 5f 56 49 52 54 55 41 4c 54  s&WHERE_VIRTUALT
135f0 41 42 4c 45 20 69 73 20 74 72 75 65 2e 20 20 49  ABLE is true.  I
13600 74 20 69 73 20 6e 65 76 65 72 20 74 68 65 0a 2a  t is never the.*
13610 2a 20 63 61 73 65 20 74 68 61 74 20 6d 6f 72 65  * case that more
13620 20 74 68 61 6e 20 6f 6e 65 20 6f 66 20 74 68 65   than one of the
13630 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20 69 73  se conditions is
13640 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 72 75 63 74   true..*/.struct
13650 20 57 68 65 72 65 50 6c 61 6e 20 7b 0a 20 20 75   WherePlan {.  u
13660 33 32 20 77 73 46 6c 61 67 73 3b 20 20 20 20 20  32 wsFlags;     
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13680 20 57 48 45 52 45 5f 2a 20 66 6c 61 67 73 20 74   WHERE_* flags t
13690 68 61 74 20 64 65 73 63 72 69 62 65 20 74 68 65  hat describe the
136a0 20 73 74 72 61 74 65 67 79 20 2a 2f 0a 20 20 75   strategy */.  u
136b0 33 32 20 6e 45 71 3b 20 20 20 20 20 20 20 20 20  32 nEq;         
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
136d0 20 4e 75 6d 62 65 72 20 6f 66 20 3d 3d 20 63 6f   Number of == co
136e0 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 64  nstraints */.  d
136f0 6f 75 62 6c 65 20 6e 52 6f 77 3b 20 20 20 20 20  ouble nRow;     
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13710 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
13720 72 20 6f 66 20 72 6f 77 73 20 28 66 6f 72 20 45  r of rows (for E
13730 51 50 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  QP) */.  union {
13740 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
13750 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13760 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 77 68 65      /* Index whe
13770 6e 20 57 48 45 52 45 5f 49 4e 44 45 58 45 44 20  n WHERE_INDEXED 
13780 69 73 20 74 72 75 65 20 2a 2f 0a 20 20 20 20 73  is true */.    s
13790 74 72 75 63 74 20 57 68 65 72 65 54 65 72 6d 20  truct WhereTerm 
137a0 2a 70 54 65 72 6d 3b 20 20 20 20 20 20 20 2f 2a  *pTerm;       /*
137b0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74 65   WHERE clause te
137c0 72 6d 20 66 6f 72 20 4f 52 2d 73 65 61 72 63 68  rm for OR-search
137d0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   */.    sqlite3_
137e0 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 56 74 61  index_info *pVta
137f0 62 49 64 78 3b 20 20 2f 2a 20 56 69 72 74 75 61  bIdx;  /* Virtua
13800 6c 20 74 61 62 6c 65 20 69 6e 64 65 78 20 74 6f  l table index to
13810 20 75 73 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d   use */.  } u;.}
13820 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63  ;../*.** For eac
13830 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e  h nested loop in
13840 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
13850 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
13860 74 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a  the WhereInfo.**
13870 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
13880 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73  ins a single ins
13890 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
138a0 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 73  ructure.  This s
138b0 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69  tructure.** is i
138c0 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72  ntended to be pr
138d0 69 76 61 74 65 20 74 68 65 20 74 68 65 20 77 68  ivate the the wh
138e0 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64  ere.c module and
138f0 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
13900 2a 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64 69  * access or modi
13910 66 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f  fied by other mo
13920 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  dules..**.** The
13930 20 70 49 64 78 49 6e 66 6f 20 66 69 65 6c 64 20   pIdxInfo field 
13940 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
13950 70 69 63 6b 20 74 68 65 20 62 65 73 74 20 69 6e  pick the best in
13960 64 65 78 20 6f 6e 20 61 0a 2a 2a 20 76 69 72 74  dex on a.** virt
13970 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ual table.  The 
13980 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72  pIdxInfo pointer
13990 20 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78 69   contains indexi
139a0 6e 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  ng.** informatio
139b0 6e 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74  n for the i-th t
139c0 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  able in the FROM
139d0 20 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20 72   clause before r
139e0 65 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c  eordering..** Al
139f0 6c 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70  l the pIdxInfo p
13a00 6f 69 6e 74 65 72 73 20 61 72 65 20 66 72 65 65  ointers are free
13a10 64 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46 72  d by whereInfoFr
13a20 65 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63 2e  ee() in where.c.
13a30 0a 2a 2a 20 41 6c 6c 20 6f 74 68 65 72 20 69 6e  .** All other in
13a40 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65  formation in the
13a50 20 69 2d 74 68 20 57 68 65 72 65 4c 65 76 65 6c   i-th WhereLevel
13a60 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
13a70 69 2d 74 68 20 74 61 62 6c 65 0a 2a 2a 20 61 66  i-th table.** af
13a80 74 65 72 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  ter FROM clause 
13a90 6f 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72  ordering..*/.str
13aa0 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 7b  uct WhereLevel {
13ab0 0a 20 20 57 68 65 72 65 50 6c 61 6e 20 70 6c 61  .  WherePlan pla
13ac0 6e 3b 20 20 20 20 20 20 20 2f 2a 20 71 75 65 72  n;       /* quer
13ad0 79 20 70 6c 61 6e 20 66 6f 72 20 74 68 69 73 20  y plan for this 
13ae0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 46  element of the F
13af0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
13b00 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e 3b 20 20  int iLeftJoin;  
13b10 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
13b20 63 65 6c 6c 20 75 73 65 64 20 74 6f 20 69 6d 70  cell used to imp
13b30 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f 55 54 45  lement LEFT OUTE
13b40 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74 20  R JOIN */.  int 
13b50 69 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20  iTabCur;        
13b60 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
13b70 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63  rsor used to acc
13b80 65 73 73 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ess the table */
13b90 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20  .  int iIdxCur; 
13ba0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
13bb0 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65 64  VDBE cursor used
13bc0 20 74 6f 20 61 63 63 65 73 73 20 70 49 64 78 20   to access pIdx 
13bd0 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 42 72 6b  */.  int addrBrk
13be0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75  ;          /* Ju
13bf0 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b  mp here to break
13c00 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70   out of the loop
13c10 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4e 78   */.  int addrNx
13c20 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a  t;          /* J
13c30 75 6d 70 20 68 65 72 65 20 74 6f 20 73 74 61 72  ump here to star
13c40 74 20 74 68 65 20 6e 65 78 74 20 49 4e 20 63 6f  t the next IN co
13c50 6d 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69  mbination */.  i
13c60 6e 74 20 61 64 64 72 43 6f 6e 74 3b 20 20 20 20  nt addrCont;    
13c70 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
13c80 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69  e to continue wi
13c90 74 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70  th the next loop
13ca0 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   cycle */.  int 
13cb0 61 64 64 72 46 69 72 73 74 3b 20 20 20 20 20 20  addrFirst;      
13cc0 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 73 74 72    /* First instr
13cd0 75 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69  uction of interi
13ce0 6f 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  or of the loop *
13cf0 2f 0a 20 20 75 38 20 69 46 72 6f 6d 3b 20 20 20  /.  u8 iFrom;   
13d00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
13d10 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  ch entry in the 
13d20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
13d30 20 75 38 20 6f 70 2c 20 70 35 3b 20 20 20 20 20   u8 op, p5;     
13d40 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
13d50 20 61 6e 64 20 50 35 20 6f 66 20 74 68 65 20 6f   and P5 of the o
13d60 70 63 6f 64 65 20 74 68 61 74 20 65 6e 64 73 20  pcode that ends 
13d70 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
13d80 74 20 70 31 2c 20 70 32 3b 20 20 20 20 20 20 20  t p1, p2;       
13d90 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20      /* Operands 
13da0 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 75 73  of the opcode us
13db0 65 64 20 74 6f 20 65 6e 64 73 20 74 68 65 20 6c  ed to ends the l
13dc0 6f 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  oop */.  union {
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13de0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  * Information th
13df0 61 74 20 64 65 70 65 6e 64 73 20 6f 6e 20 70 6c  at depends on pl
13e00 61 6e 2e 77 73 46 6c 61 67 73 20 2a 2f 0a 20 20  an.wsFlags */.  
13e10 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
13e20 20 69 6e 74 20 6e 49 6e 3b 20 20 20 20 20 20 20   int nIn;       
13e30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13e40 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
13e50 49 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20  InLoop[] */.    
13e60 20 20 73 74 72 75 63 74 20 49 6e 4c 6f 6f 70 20    struct InLoop 
13e70 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 43  {.        int iC
13e80 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
13e90 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
13ea0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 69 73  sor used by this
13eb0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a   IN operator */.
13ec0 20 20 20 20 20 20 20 20 69 6e 74 20 61 64 64 72          int addr
13ed0 49 6e 54 6f 70 3b 20 20 20 20 20 20 20 20 20 2f  InTop;         /
13ee0 2a 20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e 20  * Top of the IN 
13ef0 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 20 20 7d 20  loop */.      } 
13f00 2a 61 49 6e 4c 6f 6f 70 3b 20 20 20 20 20 20 20  *aInLoop;       
13f10 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
13f20 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65  on about each ne
13f30 73 74 65 64 20 49 4e 20 6f 70 65 72 61 74 6f 72  sted IN operator
13f40 20 2a 2f 0a 20 20 20 20 7d 20 69 6e 3b 20 20 20   */.    } in;   
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13f60 20 55 73 65 64 20 77 68 65 6e 20 70 6c 61 6e 2e   Used when plan.
13f70 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e  wsFlags&WHERE_IN
13f80 5f 41 42 4c 45 20 2a 2f 0a 20 20 7d 20 75 3b 0a  _ABLE */.  } u;.
13f90 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
13fa0 69 6e 67 20 66 69 65 6c 64 20 69 73 20 72 65 61  ing field is rea
13fb0 6c 6c 79 20 6e 6f 74 20 70 61 72 74 20 6f 66 20  lly not part of 
13fc0 74 68 65 20 63 75 72 72 65 6e 74 20 6c 65 76 65  the current leve
13fd0 6c 2e 20 20 42 75 74 0a 20 20 2a 2a 20 77 65 20  l.  But.  ** we 
13fe0 6e 65 65 64 20 61 20 70 6c 61 63 65 20 74 6f 20  need a place to 
13ff0 63 61 63 68 65 20 76 69 72 74 75 61 6c 20 74 61  cache virtual ta
14000 62 6c 65 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d  ble index inform
14010 61 74 69 6f 6e 20 66 6f 72 20 65 61 63 68 0a 20  ation for each. 
14020 20 2a 2a 20 76 69 72 74 75 61 6c 20 74 61 62 6c   ** virtual tabl
14030 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
14040 61 75 73 65 20 61 6e 64 20 74 68 65 20 57 68 65  ause and the Whe
14050 72 65 4c 65 76 65 6c 20 73 74 72 75 63 74 75 72  reLevel structur
14060 65 20 69 73 0a 20 20 2a 2a 20 61 20 63 6f 6e 76  e is.  ** a conv
14070 65 6e 69 65 6e 74 20 70 6c 61 63 65 20 73 69 6e  enient place sin
14080 63 65 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  ce there is one 
14090 57 68 65 72 65 4c 65 76 65 6c 20 66 6f 72 20 65  WhereLevel for e
140a0 61 63 68 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  ach FROM clause.
140b0 20 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 20 20    ** element..  
140c0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 64  */.  sqlite3_ind
140d0 65 78 5f 69 6e 66 6f 20 2a 70 49 64 78 49 6e 66  ex_info *pIdxInf
140e0 6f 3b 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 66  o;  /* Index inf
140f0 6f 20 66 6f 72 20 6e 2d 74 68 20 73 6f 75 72 63  o for n-th sourc
14100 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
14110 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
14120 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
14130 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
14140 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
14150 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
14160 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
14170 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
14180 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
14190 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
141a0 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
141b0 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
141c0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
141d0 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
141e0 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
141f0 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
14200 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
14210 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
14220 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
14230 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
14240 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
14250 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
14260 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
14270 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
14280 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
14290 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
142a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
142b0 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
142c0 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
142d0 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
142e0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
142f0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14300 4f 4d 49 54 5f 4f 50 45 4e 20 20 20 20 20 20 20  OMIT_OPEN       
14310 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
14320 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
14330 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
14340 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f  fine WHERE_OMIT_
14350 43 4c 4f 53 45 20 20 20 20 20 20 20 30 78 30 30  CLOSE       0x00
14360 32 30 20 2f 2a 20 4f 6d 69 74 20 63 6c 6f 73 65  20 /* Omit close
14370 20 6f 66 20 74 61 62 6c 65 20 26 20 69 6e 64 65   of table & inde
14380 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 23 64 65  x cursors */.#de
14390 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
143a0 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
143b0 34 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  40 /* Do not use
143c0 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
143d0 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
143e0 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
143f0 4f 4e 4c 59 20 20 20 20 30 78 30 30 38 30 20 2f  ONLY    0x0080 /
14400 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
14410 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
14420 62 4c 69 73 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  bList */../*.** 
14430 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
14440 20 70 72 6f 63 65 73 73 69 6e 67 20 72 6f 75 74   processing rout
14450 69 6e 65 20 68 61 73 20 74 77 6f 20 68 61 6c 76  ine has two halv
14460 65 73 2e 20 20 54 68 65 0a 2a 2a 20 66 69 72 73  es.  The.** firs
14470 74 20 70 61 72 74 20 64 6f 65 73 20 74 68 65 20  t part does the 
14480 73 74 61 72 74 20 6f 66 20 74 68 65 20 57 48 45  start of the WHE
14490 52 45 20 6c 6f 6f 70 20 61 6e 64 20 74 68 65 20  RE loop and the 
144a0 73 65 63 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20 64  second.** half d
144b0 6f 65 73 20 74 68 65 20 74 61 69 6c 20 6f 66 20  oes the tail of 
144c0 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 2e 20  the WHERE loop. 
144d0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   An instance of.
144e0 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
144f0 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 62 79  e is returned by
14500 20 74 68 65 20 66 69 72 73 74 20 68 61 6c 66 20   the first half 
14510 61 6e 64 20 70 61 73 73 65 64 0a 2a 2a 20 69 6e  and passed.** in
14520 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 20 68 61  to the second ha
14530 6c 66 20 74 6f 20 67 69 76 65 20 73 6f 6d 65 20  lf to give some 
14540 63 6f 6e 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73  continuity..*/.s
14550 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
14560 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
14570 65 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73  e;       /* Pars
14580 69 6e 67 20 61 6e 64 20 63 6f 64 65 20 67 65 6e  ing and code gen
14590 65 72 61 74 69 6e 67 20 63 6f 6e 74 65 78 74 20  erating context 
145a0 2a 2f 0a 20 20 75 31 36 20 77 63 74 72 6c 46 6c  */.  u16 wctrlFl
145b0 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 46 6c 61  ags;      /* Fla
145c0 67 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 70 61  gs originally pa
145d0 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 57  ssed to sqlite3W
145e0 68 65 72 65 42 65 67 69 6e 28 29 20 2a 2f 0a 20  hereBegin() */. 
145f0 20 75 38 20 6f 6b 4f 6e 65 50 61 73 73 3b 20 20   u8 okOnePass;  
14600 20 20 20 20 20 20 2f 2a 20 4f 6b 20 74 6f 20 75        /* Ok to u
14610 73 65 20 6f 6e 65 2d 70 61 73 73 20 61 6c 67 6f  se one-pass algo
14620 72 69 74 68 6d 20 66 6f 72 20 55 50 44 41 54 45  rithm for UPDATE
14630 20 6f 72 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20   or DELETE */.  
14640 75 38 20 75 6e 74 65 73 74 65 64 54 65 72 6d 73  u8 untestedTerms
14650 3b 20 20 20 20 2f 2a 20 4e 6f 74 20 61 6c 6c 20  ;    /* Not all 
14660 57 48 45 52 45 20 74 65 72 6d 73 20 72 65 73 6f  WHERE terms reso
14670 6c 76 65 64 20 62 79 20 6f 75 74 65 72 20 6c 6f  lved by outer lo
14680 6f 70 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  op */.  SrcList 
14690 2a 70 54 61 62 4c 69 73 74 3b 20 20 20 20 20 20  *pTabList;      
146a0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
146b0 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  f tables in the 
146c0 6a 6f 69 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 54  join */.  int iT
146d0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
146e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
146f0 76 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f  very beginning o
14700 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70  f the WHERE loop
14710 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69   */.  int iConti
14720 6e 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nue;            
14730 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
14740 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69  e to continue wi
14750 74 68 20 6e 65 78 74 20 72 65 63 6f 72 64 20 2a  th next record *
14760 2f 0a 20 20 69 6e 74 20 69 42 72 65 61 6b 3b 20  /.  int iBreak; 
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
14790 74 6f 20 62 72 65 61 6b 20 6f 75 74 20 6f 66 20  to break out of 
147a0 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
147b0 74 20 6e 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t nLevel;       
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
147d0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
147e0 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75 63   loop */.  struc
147f0 74 20 57 68 65 72 65 43 6c 61 75 73 65 20 2a 70  t WhereClause *p
14800 57 43 3b 20 20 20 20 20 20 20 2f 2a 20 44 65 63  WC;       /* Dec
14810 6f 6d 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68  omposition of th
14820 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
14830 2f 0a 20 20 64 6f 75 62 6c 65 20 73 61 76 65 64  /.  double saved
14840 4e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  NQueryLoop;     
14850 20 20 20 2f 2a 20 70 50 61 72 73 65 2d 3e 6e 51     /* pParse->nQ
14860 75 65 72 79 4c 6f 6f 70 20 6f 75 74 73 69 64 65  ueryLoop outside
14870 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20   the WHERE loop 
14880 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 52 6f 77  */.  double nRow
14890 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
148a0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
148b0 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 70 75   number of outpu
148c0 74 20 72 6f 77 73 20 2a 2f 0a 20 20 57 68 65 72  t rows */.  Wher
148d0 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20 20 20  eLevel a[1];    
148e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
148f0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
14900 65 61 63 68 20 6e 65 73 74 20 6c 6f 6f 70 20 69  each nest loop i
14910 6e 20 57 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f  n WHERE */.};../
14920 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
14930 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
14940 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
14950 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
14960 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
14970 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
14980 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
14990 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
149a0 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
149b0 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
149c0 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
149d0 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
149e0 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
149f0 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
14a00 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
14a10 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
14a20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
14a30 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
14a40 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
14a50 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
14a60 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
14a70 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
14a80 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
14a90 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
14aa0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
14ab0 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
14ac0 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
14ad0 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
14ae0 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
14af0 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
14b00 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
14b10 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
14b20 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74  er-most .** cont
14b30 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20  ext is searched 
14b40 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61  first.  If no ma
14b50 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
14b60 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20  e next outer.** 
14b70 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b  context is check
14b80 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ed.  If there is
14b90 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c   still no match,
14ba0 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78   the next contex
14bb0 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e  t.** is checked.
14bc0 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63    This process c
14bd0 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65  ontinues until e
14be0 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73  ither a match is
14bf0 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c   found.** or all
14c00 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68   contexts are ch
14c10 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74  eck.  When a mat
14c20 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
14c30 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a   nRef member of.
14c40 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63  ** the context c
14c50 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61  ontaining the ma
14c60 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  tch is increment
14c70 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ed. .**.** Each 
14c80 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
14c90 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
14ca0 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
14cb0 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
14cc0 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
14cd0 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
14ce0 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
14cf0 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
14d00 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
14d10 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
14d20 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
14d30 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
14d40 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
14d50 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
14d60 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
14d70 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
14d80 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
14d90 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
14da0 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
14db0 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
14dc0 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
14dd0 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
14de0 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
14df0 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  mes */.  ExprLis
14e00 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
14e10 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
14e20 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
14e30 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ons */.  int nRe
14e40 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
14e50 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
14e60 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
14e70 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
14e80 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
14e90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14ea0 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
14eb0 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
14ec0 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  ing names */.  u
14ed0 38 20 61 6c 6c 6f 77 41 67 67 3b 20 20 20 20 20  8 allowAgg;     
14ee0 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
14ef0 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 6c 6f 77   functions allow
14f00 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 75 38 20  ed here */.  u8 
14f10 68 61 73 41 67 67 3b 20 20 20 20 20 20 20 20 20  hasAgg;         
14f20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 67 67    /* True if agg
14f30 72 65 67 61 74 65 73 20 61 72 65 20 73 65 65 6e  regates are seen
14f40 20 2a 2f 0a 20 20 75 38 20 69 73 43 68 65 63 6b   */.  u8 isCheck
14f50 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
14f60 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
14f70 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b  names in a CHECK
14f80 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
14f90 20 69 6e 74 20 6e 44 65 70 74 68 3b 20 20 20 20   int nDepth;    
14fa0 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
14fb0 66 20 73 75 62 71 75 65 72 79 20 72 65 63 75 72  f subquery recur
14fc0 73 69 6f 6e 2e 20 31 20 66 6f 72 20 6e 6f 20 72  sion. 1 for no r
14fd0 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 20 20 41 67  ecursion */.  Ag
14fe0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
14ff0 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
15000 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
15010 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
15020 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
15030 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
15040 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
15050 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
15060 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 7d 3b   outermost */.};
15070 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
15080 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
15090 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
150a0 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
150b0 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
150c0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
150d0 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
150e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
150f0 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
15100 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
15110 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
15120 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
15130 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
15140 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
15150 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
15160 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
15170 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
15180 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
15190 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
151a0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
151b0 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
151c0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
151d0 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
151e0 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
151f0 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
15200 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
15210 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
15220 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
15230 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
15240 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
15250 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
15260 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
15270 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
15280 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
15290 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
152a0 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
152b0 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
152c0 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
152d0 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
152e0 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
152f0 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
15300 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
15310 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
15320 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
15330 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
15340 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
15350 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
15360 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
15370 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
15380 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
15390 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
153a0 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
153b0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
153c0 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
153d0 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
153e0 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
153f0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
15400 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
15410 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
15420 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
15430 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
15440 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
15450 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
15460 54 72 61 6e 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Tran[2] contains
15470 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
15480 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
15490 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
154a0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
154b0 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
154c0 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
154d0 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
154e0 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
154f0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
15500 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
15510 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
15520 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
15530 45 58 43 45 50 54 20 2a 2f 0a 20 20 63 68 61 72  EXCEPT */.  char
15540 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
15550 20 20 20 2f 2a 20 4d 61 6b 65 52 65 63 6f 72 64     /* MakeRecord
15560 20 77 69 74 68 20 74 68 69 73 20 61 66 66 69 6e   with this affin
15570 69 74 79 20 66 6f 72 20 53 52 54 5f 53 65 74 20  ity for SRT_Set 
15580 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67  */.  u16 selFlag
15590 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
155a0 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
155b0 65 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  es */.  SrcList 
155c0 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
155d0 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
155e0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
155f0 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
15600 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
15610 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
15620 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
15630 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
15640 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
15650 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
15660 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
15670 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
15680 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
15690 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
156a0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
156b0 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
156c0 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
156d0 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
156e0 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
156f0 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
15700 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
15710 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
15720 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
15730 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65  compound */.  Se
15740 6c 65 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74  lect *pRightmost
15750 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f  ;    /* Right-mo
15760 73 74 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  st select in a c
15770 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
15780 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78  tatement */.  Ex
15790 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
157a0 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
157b0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
157c0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
157d0 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
157e0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
157f0 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
15800 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
15810 75 73 65 64 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  used. */.  int i
15820 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
15830 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
15840 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
15850 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
15860 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61  nters */.  int a
15870 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20  ddrOpenEphm[3]; 
15880 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
15890 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
158a0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
158b0 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65   */.  double nSe
158c0 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20  lectRow;     /* 
158d0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
158e0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
158f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
15900 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
15910 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
15920 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
15930 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
15940 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
15950 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73  /.#define SF_Dis
15960 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30  tinct        0x0
15970 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73  001  /* Output s
15980 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43  hould be DISTINC
15990 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
159a0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20  Resolved        
159b0 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74  0x0002  /* Ident
159c0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
159d0 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
159e0 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
159f0 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20  e       0x0004  
15a00 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
15a10 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
15a20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
15a30 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78  esEphemeral   0x
15a40 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68  0008  /* Uses th
15a50 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
15a60 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
15a70 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
15a80 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20       0x0010  /* 
15a90 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
15aa0 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
15ab0 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
15ac0 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
15ad0 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52     0x0020  /* FR
15ae0 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
15af0 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
15b00 61 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  a */.../*.** The
15b10 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73 65   results of a se
15b20 6c 65 63 74 20 63 61 6e 20 62 65 20 64 69 73 74  lect can be dist
15b30 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
15b40 61 6c 20 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a  al ways.  The.**
15b50 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
15b60 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
15b70 6c 74 20 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65  lt Type"..*/.#de
15b80 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
15b90 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
15ba0 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
15bb0 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
15bc0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
15bd0 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
15be0 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
15bf0 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
15c00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
15c10 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
15c20 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
15c30 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
15c40 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
15c50 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
15c60 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
15c70 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
15c80 6e 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54  nywhere */../* T
15c90 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
15ca0 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
15cb0 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
15cc0 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
15cd0 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
15ce0 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
15cf0 52 54 5f 44 69 73 63 61 72 64 29 0a 0a 23 64 65  RT_Discard)..#de
15d00 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
15d10 20 20 20 20 20 20 35 20 20 2f 2a 20 4f 75 74 70        5  /* Outp
15d20 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
15d30 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
15d40 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
15d50 20 20 36 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    6  /* Store re
15d60 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
15d70 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
15d80 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
15d90 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
15da0 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
15db0 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
15dc0 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20  fine SRT_Table  
15dd0 20 20 20 20 20 20 38 20 20 2f 2a 20 53 74 6f 72        8  /* Stor
15de0 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
15df0 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
15e00 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
15e10 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
15e20 20 20 20 20 20 39 20 20 2f 2a 20 43 72 65 61 74       9  /* Creat
15e30 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
15e40 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
15e50 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
15e60 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
15e70 65 20 20 20 31 30 20 20 2f 2a 20 47 65 6e 65 72  e   10  /* Gener
15e80 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
15e90 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f   of result */../
15ea0 2a 0a 2a 2a 20 41 20 73 74 72 75 63 74 75 72 65  *.** A structure
15eb0 20 75 73 65 64 20 74 6f 20 63 75 73 74 6f 6d 69   used to customi
15ec0 7a 65 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  ze the behavior 
15ed0 6f 66 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  of sqlite3Select
15ee0 28 29 2e 20 53 65 65 0a 2a 2a 20 63 6f 6d 6d 65  (). See.** comme
15ef0 6e 74 73 20 61 62 6f 76 65 20 73 71 6c 69 74 65  nts above sqlite
15f00 33 53 65 6c 65 63 74 28 29 20 66 6f 72 20 64 65  3Select() for de
15f10 74 61 69 6c 73 2e 0a 2a 2f 0a 74 79 70 65 64 65  tails..*/.typede
15f20 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  f struct SelectD
15f30 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a  est SelectDest;.
15f40 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
15f50 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
15f60 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
15f70 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
15f80 20 72 65 73 75 6c 74 73 20 2a 2f 0a 20 20 75 38   results */.  u8
15f90 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
15fa0 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
15fb0 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
15fc0 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 50  _Set */.  int iP
15fd0 61 72 6d 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  arm;        /* A
15fe0 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
15ff0 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
16000 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
16010 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
16020 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
16030 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
16040 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
16050 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
16060 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16070 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
16080 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ocated */.};../*
16090 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
160a0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
160b0 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
160c0 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
160d0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20  TOINCREMENT .** 
160e0 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
160f0 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
16100 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
16110 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
16120 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
16130 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
16140 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
16150 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
16160 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
16170 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
16180 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
16190 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
161a0 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
161b0 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
161c0 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
161d0 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e  inserts are down
161e0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
161f0 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
16200 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
16210 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
16220 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
16230 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
16240 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
16250 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
16260 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
16270 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
16280 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
16290 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
162a0 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
162b0 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
162c0 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
162d0 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
162e0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
162f0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
16300 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
16310 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
16320 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
16330 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
16340 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
16350 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
16360 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
16370 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
16380 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
16390 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
163a0 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
163b0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
163c0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
163d0 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
163e0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
163f0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
16400 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
16410 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
16420 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
16430 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
16440 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
16450 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
16460 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  h .** trigger th
16470 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
16480 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
16490 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
164a0 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
164b0 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
164c0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
164d0 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
164e0 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
164f0 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
16500 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
16510 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
16520 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
16530 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
16540 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
16550 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
16560 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
16570 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
16580 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
16590 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
165a0 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
165b0 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
165c0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
165d0 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
165e0 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
165f0 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
16600 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
16610 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
16620 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
16630 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
16640 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
16650 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
16660 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
16670 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
16680 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
16690 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
166a0 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
166b0 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
166c0 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
166d0 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
166e0 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
166f0 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
16700 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
16710 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  ERT .** statemen
16720 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
16730 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
16740 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
16750 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
16760 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
16770 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
16780 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
16790 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
167a0 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
167b0 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
167c0 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
167d0 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
167e0 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 6f   from */.  int o
167f0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
16800 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
16810 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
16820 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
16830 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
16840 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
16850 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
16860 72 63 6f 6e 66 20 2a 2f 0a 20 20 75 33 32 20 61  rconf */.  u32 a
16870 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
16880 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
16890 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
168a0 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
168b0 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e    TriggerPrg *pN
168c0 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
168d0 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65  t entry in Parse
168e0 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
168f0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
16900 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
16910 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
16920 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
16930 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
16940 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
16950 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
16960 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
16970 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
16980 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
16990 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
169a0 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
169b0 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
169c0 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
169d0 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
169e0 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
169f0 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
16a00 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
16a10 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
16a20 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
16a30 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
16a40 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
16a50 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
16a60 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
16a70 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
16a80 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
16a90 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
16aa0 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
16ab0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
16ac0 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
16ad0 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
16ae0 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
16af0 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
16b00 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65  ache .** feature
16b10 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
16b20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
16b30 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
16b40 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
16b50 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
16b60 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
16b70 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
16b80 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
16b90 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
16ba0 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
16bb0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
16bc0 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
16bd0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
16be0 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
16bf0 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
16c00 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
16c10 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
16c20 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
16c30 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
16c40 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
16c50 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65  rn code from exe
16c60 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 63 68 61 72  cution */.  char
16c70 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
16c80 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
16c90 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
16ca0 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
16cb0 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
16cc0 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
16cd0 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
16ce0 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
16cf0 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
16d00 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
16d10 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
16d20 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
16d30 75 38 20 6e 61 6d 65 43 6c 61 73 68 3b 20 20 20  u8 nameClash;   
16d40 20 20 20 20 20 2f 2a 20 41 20 70 65 72 6d 61 6e       /* A perman
16d50 65 6e 74 20 74 61 62 6c 65 20 6e 61 6d 65 20 63  ent table name c
16d60 6c 61 73 68 65 73 20 77 69 74 68 20 74 65 6d 70  lashes with temp
16d70 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
16d80 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
16d90 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
16da0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
16db0 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
16dc0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
16dd0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
16de0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
16df0 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
16e00 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
16e10 74 6f 72 20 2a 2f 0a 20 20 75 38 20 70 61 72 73  tor */.  u8 pars
16e20 65 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a  eError;       /*
16e30 20 54 72 75 65 20 61 66 74 65 72 20 61 20 70 61   True after a pa
16e40 72 73 69 6e 67 20 65 72 72 6f 72 2e 20 20 54 69  rsing error.  Ti
16e50 63 6b 65 74 20 23 31 37 39 34 20 2a 2f 0a 20 20  cket #1794 */.  
16e60 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
16e70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16e80 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
16e90 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
16ea0 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  g[] */.  u8 nTem
16eb0 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a  pInUse;       /*
16ec0 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70   Number of aTemp
16ed0 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20  Reg[] currently 
16ee0 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
16ef0 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d   int aTempReg[8]
16f00 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67  ;     /* Holding
16f10 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
16f20 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
16f30 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67  .  int nRangeReg
16f40 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  ;       /* Size 
16f50 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
16f60 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
16f70 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52  */.  int iRangeR
16f80 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72  eg;       /* Fir
16f90 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74  st register in t
16fa0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
16fb0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
16fc0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
16fd0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16fe0 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
16ff0 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20  int nTab;       
17000 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17010 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c  f previously all
17020 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73  ocated VDBE curs
17030 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ors */.  int nMe
17040 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
17050 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
17060 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20  y cells used so 
17070 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  far */.  int nSe
17080 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
17090 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20   Number of sets 
170a0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
170b0 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
170c0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
170d0 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
170e0 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
170f0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
17100 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
17110 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
17120 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
17130 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
17140 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
17150 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
17160 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
17170 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
17180 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
17190 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6e 43  alues */.  u8 nC
171a0 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  olCache;        
171b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
171c0 72 69 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  ries in the colu
171d0 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 20 20 75 38  mn cache */.  u8
171e0 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20   iColCache;     
171f0 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
17200 20 6f 66 20 74 68 65 20 63 61 63 68 65 20 74 6f   of the cache to
17210 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 73 74   replace */.  st
17220 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
17230 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
17240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
17250 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
17260 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  r */.    int iCo
17270 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
17280 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
17290 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
172a0 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
172b0 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
172c0 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
172d0 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
172e0 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
172f0 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
17300 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
17310 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
17320 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
17330 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
17340 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
17350 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
17360 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17380 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
17390 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
173a0 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
173b0 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
173c0 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
173d0 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
173e0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
173f0 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 75  che entry */.  u
17400 33 32 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  32 writeMask;   
17410 20 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77      /* Start a w
17420 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
17430 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
17440 73 65 73 20 2a 2f 0a 20 20 75 33 32 20 63 6f 6f  ses */.  u32 coo
17450 6b 69 65 4d 61 73 6b 3b 20 20 20 20 20 20 2f 2a  kieMask;      /*
17460 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
17470 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
17480 62 61 73 65 73 20 2a 2f 0a 20 20 75 38 20 69 73  bases */.  u8 is
17490 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
174a0 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
174b0 6d 65 6e 74 20 6d 61 79 20 61 66 66 65 63 74 2f  ment may affect/
174c0 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
174d0 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
174e0 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
174f0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
17500 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
17510 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
17520 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
17530 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64  Goto;      /* Ad
17540 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f  dress of OP_Goto
17550 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66   to cookie verif
17560 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a  ier subroutine *
17570 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
17580 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
17590 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
175a0 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
175b0 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 23  s to verify */.#
175c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
175d0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
175e0 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
175f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
17600 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
17610 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
17620 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
17630 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
17640 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
17650 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
17660 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
17670 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
17680 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
17690 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
176a0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
176b0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
176c0 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
176d0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
176e0 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
176f0 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
17700 63 74 73 20 2a 2f 0a 20 20 41 75 74 6f 69 6e 63  cts */.  Autoinc
17710 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
17720 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
17730 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
17740 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69   counters */.  i
17750 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20  nt nMaxArg;     
17760 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20      /* Max args 
17770 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66  passed to user f
17780 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70  unction by sub-p
17790 72 6f 67 72 61 6d 20 2a 2f 0a 0a 20 20 2f 2a 20  rogram */..  /* 
177a0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
177b0 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72   while coding tr
177c0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20  igger programs. 
177d0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
177e0 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
177f0 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
17800 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
17810 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
17820 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
17830 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
17840 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
17850 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 75 33 32  ded for */.  u32
17860 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
17870 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
17880 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
17890 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
178a0 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
178b0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
178c0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
178d0 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
178e0 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
178f0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
17900 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
17910 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
17920 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
17930 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
17940 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
17950 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
17960 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
17970 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
17980 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
17990 72 73 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e  rs */.  double n
179a0 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20  QueryLoop;   /* 
179b0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
179c0 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
179d0 66 20 61 20 71 75 65 72 79 20 2a 2f 0a 0a 20 20  f a query */..  
179e0 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73  /* Above is cons
179f0 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63  tant between rec
17a00 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20  ursions.  Below 
17a10 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20  is reset before 
17a20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65  and after.  ** e
17a30 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20 2a 2f  ach recursion */
17a40 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20  ..  int nVar;   
17a50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17a60 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
17a70 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
17a80 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
17a90 69 6e 74 20 6e 56 61 72 45 78 70 72 3b 20 20 20  int nVarExpr;   
17aa0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17ab0 66 20 75 73 65 64 20 73 6c 6f 74 73 20 69 6e 20  f used slots in 
17ac0 61 70 56 61 72 45 78 70 72 5b 5d 20 2a 2f 0a 20  apVarExpr[] */. 
17ad0 20 69 6e 74 20 6e 56 61 72 45 78 70 72 41 6c 6c   int nVarExprAll
17ae0 6f 63 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  oc;   /* Number 
17af0 6f 66 20 61 6c 6c 6f 63 61 74 65 64 20 73 6c 6f  of allocated slo
17b00 74 73 20 69 6e 20 61 70 56 61 72 45 78 70 72 5b  ts in apVarExpr[
17b10 5d 20 2a 2f 0a 20 20 45 78 70 72 20 2a 2a 61 70  ] */.  Expr **ap
17b20 56 61 72 45 78 70 72 3b 20 20 20 20 2f 2a 20 50  VarExpr;    /* P
17b30 6f 69 6e 74 65 72 73 20 74 6f 20 3a 61 61 61 20  ointers to :aaa 
17b40 61 6e 64 20 24 61 61 61 61 20 77 69 6c 64 63 61  and $aaaa wildca
17b50 72 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  rd expressions *
17b60 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
17b70 70 61 72 65 3b 20 20 20 20 2f 2a 20 56 4d 20 62  pare;    /* VM b
17b80 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
17b90 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
17ba0 65 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  e()) */.  int nA
17bb0 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lias;          /
17bc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61  * Number of alia
17bd0 73 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63  sed result set c
17be0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  olumns */.  int 
17bf0 6e 41 6c 69 61 73 41 6c 6c 6f 63 3b 20 20 20 20  nAliasAlloc;    
17c00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c   /* Number of al
17c10 6c 6f 63 61 74 65 64 20 73 6c 6f 74 73 20 66 6f  located slots fo
17c20 72 20 61 41 6c 69 61 73 5b 5d 20 2a 2f 0a 20 20  r aAlias[] */.  
17c30 69 6e 74 20 2a 61 41 6c 69 61 73 3b 20 20 20 20  int *aAlias;    
17c40 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
17c50 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c   used to hold al
17c60 69 61 73 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a  iased result */.
17c70 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20    u8 explain;   
17c80 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
17c90 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
17ca0 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
17cb0 68 65 20 71 75 65 72 79 20 2a 2f 0a 20 20 54 6f  he query */.  To
17cc0 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
17cd0 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
17ce0 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
17cf0 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
17d00 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  */.  Token sLast
17d10 54 6f 6b 65 6e 3b 20 20 20 20 2f 2a 20 54 68 65  Token;    /* The
17d20 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
17d30 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ed */.  const ch
17d40 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 2f 2a 20  ar *zTail;   /* 
17d50 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
17d60 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
17d70 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
17d80 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
17d90 65 3b 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65  e;    /* A table
17da0 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
17db0 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
17dc0 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
17dd0 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
17de0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
17df0 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
17e00 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
17e10 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
17e20 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
17e30 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
17e40 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
17e50 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23  h callbacks */.#
17e60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
17e70 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
17e80 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17ea0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
17eb0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
17ec0 6e 74 20 2a 2f 0a 20 20 75 38 20 64 65 63 6c 61  nt */.  u8 decla
17ed0 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
17ee0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e     /* True if in
17ef0 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63  side sqlite3_dec
17f00 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20  lare_vtab() */. 
17f10 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
17f20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17f30 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
17f40 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
17f50 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
17f60 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
17f70 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69  /* Pointer to vi
17f80 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65  rtual tables nee
17f90 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a  ding locking */.
17fa0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65  #endif.  int nHe
17fb0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
17fc0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
17fd0 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
17fe0 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
17ff0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f   */.  Table *pZo
18000 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 2f 2a  mbieTab;      /*
18010 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f   List of Table o
18020 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65  bjects to delete
18030 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20   after code gen 
18040 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
18050 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 20  *pTriggerPrg;   
18060 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
18070 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
18080 73 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  s */..#ifndef SQ
18090 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
180a0 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49  N.  int iSelectI
180b0 64 3b 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65  d;.  int iNextSe
180c0 6c 65 63 74 49 64 3b 0a 23 65 6e 64 69 66 0a 7d  lectId;.#endif.}
180d0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
180e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
180f0 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
18100 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
18110 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
18120 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
18130 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56  pParse->declareV
18140 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  tab).#endif../*.
18150 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
18160 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
18170 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
18180 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
18190 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
181a0 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
181b0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
181c0 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
181d0 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
181e0 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
181f0 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
18200 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
18210 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
18220 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
18230 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
18240 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
18250 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
18260 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
18270 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
18280 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
18290 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
182a0 6c 75 65 20 69 6e 20 4f 50 5f 49 6e 73 65 72 74  lue in OP_Insert
182b0 20 61 6e 64 20 4f 50 5f 44 65 6c 65 74 65 0a 2a   and OP_Delete.*
182c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
182d0 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
182e0 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x01    /* Set to
182f0 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
18300 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nge */.#define O
18310 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
18320 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53      0x02    /* S
18330 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
18340 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
18350 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
18360 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
18370 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
18380 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
18390 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
183a0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
183b0 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
183c0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
183d0 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
183e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
183f0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
18400 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
18410 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
18420 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
18430 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
18440 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20 20  G_CLEARCACHE    
18450 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72  0x20    /* Clear
18460 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61   pseudo-table ca
18470 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e  che in OP_Column
18480 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20   */../*. * Each 
18490 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20  trigger present 
184a0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
184b0 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64  schema is stored
184c0 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   as an instance 
184d0 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69  of. * struct Tri
184e0 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69  gger. . *. * Poi
184f0 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
18500 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
18510 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
18520 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
18530 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
18540 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
18550 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
18560 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
18570 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20  sents the . *   
18580 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
18590 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
185a0 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
185b0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
185c0 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
185d0 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
185e0 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
185f0 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
18600 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
18610 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
18620 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
18630 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
18640 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
18650 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
18660 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
18670 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
18680 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
18690 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
186a0 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
186b0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
186c0 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
186d0 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
186e0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
186f0 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
18700 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
18710 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
18720 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
18730 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
18740 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
18750 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
18760 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
18770 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
18780 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
18790 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
187a0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
187b0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
187c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
187d0 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
187e0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
187f0 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
18800 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
18810 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
18820 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
18830 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
18840 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
18850 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
18860 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
18870 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
18880 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
18890 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
188a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
188b0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
188c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
188d0 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
188e0 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
188f0 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
18900 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
18910 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
18920 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
18930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18940 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
18950 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
18960 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
18970 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
18980 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
18990 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
189a0 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
189b0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
189c0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
189d0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
189e0 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
189f0 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
18a00 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
18a10 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
18a20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
18a30 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
18a40 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
18a50 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
18a60 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
18a70 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
18a80 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
18a90 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
18aa0 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
18ab0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
18ac0 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
18ad0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
18ae0 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ich. .**.** If t
18af0 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
18b00 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
18b10 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
18b20 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
18b30 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
18b40 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
18b50 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
18b60 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
18b70 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
18b80 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
18b90 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
18ba0 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
18bb0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
18bc0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
18bd0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
18be0 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
18bf0 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
18c00 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
18c10 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
18c20 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65   . *. * Instance
18c30 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
18c40 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
18c50 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
18c60 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
18c70 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
18c80 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
18c90 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
18ca0 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
18cb0 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20  mber of the . * 
18cc0 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63  associated struc
18cd0 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e  t Trigger instan
18ce0 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  ce. The first el
18cf0 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e  ement of the lin
18d00 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74  ked list is. * t
18d10 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66  he first step of
18d20 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f   the trigger-pro
18d30 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65  gram.. * . * The
18d40 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
18d50 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
18d60 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
18d70 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
18d80 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
18d90 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
18da0 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
18db0 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
18dc0 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
18dd0 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65  by the . * value
18de0 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
18df0 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
18e00 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
18e10 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
18e20 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
18e30 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
18e40 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
18e50 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
18e60 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
18e70 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
18e80 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
18e90 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
18ea0 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
18eb0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
18ec0 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
18ed0 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20  NULL.. * target 
18ee0 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
18ef0 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
18f00 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
18f10 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
18f20 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
18f30 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
18f40 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
18f50 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
18f60 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
18f70 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
18f80 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
18f90 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
18fa0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
18fb0 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
18fc0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
18fd0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
18fe0 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
18ff0 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20  LUES ... . *    
19000 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
19010 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
19020 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
19030 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
19050 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
19060 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
19070 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20  TE). * target   
19080 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64   -> A token hold
19090 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e  ing the quoted n
190a0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
190b0 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
190c0 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
190d0 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
190e0 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
190f0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
19100 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
19110 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
19120 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
19130 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f  * . * (op == TK_
19140 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65  UPDATE). * targe
19150 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
19160 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
19170 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
19180 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72  able to update r
19190 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72  ows of.. * pWher
191a0 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
191b0 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
191c0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
191d0 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
191e0 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
191f0 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
19200 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
19210 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
19220 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
19230 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
19240 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
19250 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
19260 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
19270 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
19280 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
19290 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
192b0 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73  ument.. * . */.s
192c0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
192d0 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  p {.  u8 op;    
192e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
192f0 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
19300 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
19310 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20  SERT, TK_SELECT 
19320 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20  */.  u8 orconf; 
19330 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
19340 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f  Rollback etc. */
19350 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
19360 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74  g;      /* The t
19370 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73  rigger that this
19380 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20   step is a part 
19390 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  of */.  Select *
193a0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
193b0 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20  SELECT statment 
193c0 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
193d0 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20   INTO .. SELECT 
193e0 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74  ... */.  Token t
193f0 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  arget;        /*
19400 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
19410 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
19420 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
19430 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
19440 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
19450 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
19460 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
19470 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
19480 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
19490 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
194a0 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20 63 6c  DATE.  VALUES cl
194b0 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52 54 20  ause for INSERT 
194c0 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
194d0 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
194e0 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
194f0 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
19500 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
19510 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
19520 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
19530 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
19540 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
19550 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
19560 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
19570 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
19580 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
19590 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
195a0 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
195b0 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
195c0 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
195d0 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
195e0 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
195f0 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
19600 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
19610 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f  * explicit.  .*/
19620 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
19630 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
19640 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
19650 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
19660 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
19670 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
19680 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
19690 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
196a0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
196b0 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
196c0 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
196d0 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
196e0 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
196f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
19700 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
19710 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
19720 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
19730 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
19740 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
19750 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
19760 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
19770 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
19780 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
19790 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
197a0 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
197b0 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
197c0 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
197d0 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
197e0 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
197f0 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
19800 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
19810 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41  ..*/.struct StrA
19820 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33  ccum {.  sqlite3
19830 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
19840 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61   Optional databa
19850 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  se for lookaside
19860 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a  .  Can be NULL *
19870 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b  /.  char *zBase;
19880 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61           /* A ba
19890 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  se allocation.  
198a0 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e  Not from malloc.
198b0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
198c0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
198d0 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
198e0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
198f0 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  nt  nChar;      
19900 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
19910 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
19920 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c  ar */.  int  nAl
19930 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
19940 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20  Amount of space 
19950 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65  allocated in zTe
19960 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41  xt */.  int  mxA
19970 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
19980 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20  Maximum allowed 
19990 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
199a0 0a 20 20 75 38 20 20 20 6d 61 6c 6c 6f 63 46 61  .  u8   mallocFa
199b0 69 6c 65 64 3b 20 20 20 2f 2a 20 42 65 63 6f 6d  iled;   /* Becom
199c0 65 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6d  es true if any m
199d0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
199e0 20 66 61 69 6c 73 20 2a 2f 0a 20 20 75 38 20 20   fails */.  u8  
199f0 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20   useMalloc;     
19a00 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a   /* 0: none,  1:
19a10 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
19a20 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61  ,  2: sqlite3_ma
19a30 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 74  lloc */.  u8   t
19a40 6f 6f 42 69 67 3b 20 20 20 20 20 20 20 20 20 2f  ooBig;         /
19a50 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69  * Becomes true i
19a60 66 20 73 74 72 69 6e 67 20 73 69 7a 65 20 65 78  f string size ex
19a70 63 65 65 64 73 20 6c 69 6d 69 74 73 20 2a 2f 0a  ceeds limits */.
19a80 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  };../*.** A poin
19a90 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
19aa0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
19ab0 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
19ac0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
19ad0 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
19ae0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
19af0 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
19b00 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
19b10 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
19b20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
19b30 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
19b40 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
19b50 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
19b60 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
19b70 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
19b80 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
19b90 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
19ba0 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 63 68  ATTACHed */.  ch
19bb0 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20  ar **pzErrMsg;  
19bc0 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
19bd0 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  ge stored here *
19be0 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
19bf0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
19c00 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
19c10 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  re */.} InitData
19c20 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  ;../*.** Structu
19c30 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
19c40 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
19c50 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
19c60 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
19c70 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
19c80 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
19c90 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
19ca0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
19cb0 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
19cc0 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
19cd0 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
19ce0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
19cf0 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
19d00 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
19d10 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d30 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
19d40 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
19d50 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
19d60 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
19d70 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
19d80 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
19d90 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
19da0 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20  mxStrlen;       
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19dc0 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20   Maximum string 
19dd0 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20  length */.  int 
19de0 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  szLookaside;    
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19e00 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
19e10 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a  de buffer size *
19e20 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69  /.  int nLookasi
19e30 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
19e40 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
19e50 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
19e60 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c  r count */.  sql
19e70 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
19e80 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
19e90 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
19ea0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
19eb0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
19ec0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
19ed0 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
19ee0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
19ef0 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
19f00 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
19f10 6d 65 74 68 6f 64 73 20 70 63 61 63 68 65 3b 20  methods pcache; 
19f20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
19f30 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
19f40 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
19f50 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
19f60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
19f70 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
19f80 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
19f90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
19fb0 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
19fc0 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
19fd0 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
19fe0 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
19ff0 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
1a000 73 69 7a 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20  sizes */.  void 
1a010 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  *pScratch;      
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a030 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a  Scratch memory *
1a040 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63  /.  int szScratc
1a050 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1a060 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1a070 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75   each scratch bu
1a080 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ffer */.  int nS
1a090 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1a0b0 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68  umber of scratch
1a0c0 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
1a0d0 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20  id *pPage;      
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0f0 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65  /* Page cache me
1a100 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
1a110 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1a120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1a130 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65  ize of each page
1a140 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1a150 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20   int nPage;     
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1a180 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d  pages in pPage[]
1a190 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73   */.  int mxPars
1a1a0 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20  erStack;        
1a1b0 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d          /* maxim
1a1c0 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20  um depth of the 
1a1d0 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a  parser stack */.
1a1e0 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68    int sharedCach
1a1f0 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  eEnabled;       
1a200 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73      /* true if s
1a210 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1a220 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a   enabled */.  /*
1a230 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74   The above might
1a240 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
1a250 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68  to non-zero.  Th
1a260 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64  e following need
1a270 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   to always.  ** 
1a280 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72  initially be zer
1a290 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20  o, however. */. 
1a2a0 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20   int isInit;    
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2c0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1a2d0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1a2e0 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a  has finished */.
1a2f0 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73    int inProgress
1a300 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a310 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c      /* True whil
1a320 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
1a330 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a   in progress */.
1a340 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69    int isMutexIni
1a350 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1a360 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1a370 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e  r mutexes are in
1a380 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1a390 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b  nt isMallocInit;
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1a3c0 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1a3d0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1a3e0 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20  PCacheInit;     
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 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
1a430 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
1a440 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
1a450 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
1a460 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
1a470 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75    int nRefInitMu
1a480 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1a490 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a4a0 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d   users of pInitM
1a4b0 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20 28  utex */.  void (
1a4c0 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74  *xLog)(void*,int
1a4d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f  ,const char*); /
1a4e0 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c  * Function for l
1a4f0 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  ogging */.  void
1a500 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20   *pLogArg;      
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
1a530 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a  nt to xLog() */.
1a540 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  };../*.** Contex
1a550 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
1a560 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
1a570 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
1a580 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
1a590 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
1a5a0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
1a5b0 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
1a5c0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
1a5d0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
1a5e0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
1a5f0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
1a600 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
1a610 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1a620 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1a630 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a650 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
1a660 20 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20    */.  union {  
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a690 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66   /* Extra data f
1a6a0 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  or callback */. 
1a6b0 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a     NameContext *
1a6c0 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  pNC;            
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a6e0 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20   Naming context 
1a6f0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20  */.    int i;   
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a720 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
1a730 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  ue */.  } u;.};.
1a740 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
1a750 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
1a760 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
1a770 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1a780 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1a790 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
1a7a0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
1a7b0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1a7c0 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
1a7d0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1a7e0 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
1a7f0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1a800 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1a810 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
1a820 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1a830 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
1a840 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
1a850 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
1a860 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
1a870 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
1a880 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
1a890 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
1a8a0 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
1a8b0 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
1a8c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
1a8d0 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
1a8e0 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
1a8f0 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
1a900 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
1a910 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
1a920 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
1a930 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
1a940 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
1a950 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
1a960 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
1a970 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
1a980 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
1a990 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
1a9a0 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
1a9b0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
1a9c0 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
1a9d0 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
1a9e0 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
1a9f0 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1aa10 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
1aa20 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
1aa50 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
1aa60 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
1aa70 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
1aa80 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
1aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aab0 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
1aac0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
1aad0 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
1aae0 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
1aaf0 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
1ab00 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
1ab10 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
1ab20 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
1ab30 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
1ab40 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
1ab50 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
1ab60 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
1ab70 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
1ab80 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
1ab90 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
1aba0 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
1abb0 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
1abc0 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
1abd0 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
1abe0 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
1abf0 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
1ac00 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1ac10 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
1ac20 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
1ac30 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1ac40 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
1ac50 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
1ac60 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
1ac70 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
1ac80 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
1ac90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
1aca0 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
1acb0 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
1acc0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
1acd0 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
1ace0 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
1acf0 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
1ad00 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69  ).../*.** FTS4 i
1ad10 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65  s really an exte
1ad20 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20  nsion for FTS3. 
1ad30 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75   It is enabled u
1ad40 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49  sing the.** SQLI
1ad50 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d  TE_ENABLE_FTS3 m
1ad60 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76  acro.  But to av
1ad70 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65  oid confusion we
1ad80 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65   also all.** the
1ad90 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1ada0 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72  TS4 macro to ser
1adb0 76 65 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20  ve as an alisse 
1adc0 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  for SQLITE_ENABL
1add0 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64  E_FTS3..*/.#if d
1ade0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1adf0 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64  ABLE_FTS4) && !d
1ae00 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1ae10 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66  ABLE_FTS3).# def
1ae20 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
1ae30 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f  E_FTS3.#endif../
1ae40 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
1ae50 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
1ae60 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
1ae70 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
1ae80 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
1ae90 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
1aea0 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
1aeb0 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
1aec0 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
1aed0 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
1aee0 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
1aef0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1af00 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
1af10 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
1af20 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
1af30 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
1af40 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
1af50 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
1af60 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
1af70 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
1af80 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
1af90 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
1afa0 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
1afb0 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
1afc0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
1afd0 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
1afe0 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
1aff0 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
1b000 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
1b010 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
1b020 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
1b030 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
1b040 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
1b050 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
1b060 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1b070 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
1b080 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b090 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
1b0a0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1b0b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b0c0 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
1b0d0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
1b0e0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1b0f0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1b100 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
1b110 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b120 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
1b130 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1b140 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b150 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
1b160 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
1b170 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
1b180 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1b190 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
1b1a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b1b0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
1b1c0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
1b1d0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b1e0 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
1b1f0 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1b200 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
1b210 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
1b220 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
1b230 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1b240 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
1b250 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
1b260 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1b270 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1b280 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
1b290 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
1b2a0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1b2b0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
1b2c0 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
1b2d0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1b2e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b2f0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
1b300 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
1b310 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1b320 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
1b330 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
1b340 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1b350 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1b360 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
1b370 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
1b380 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1b390 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
1b3a0 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
1b3b0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
1b3c0 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )(x)).#endif../*
1b3d0 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
1b3e0 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
1b3f0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
1b400 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
1b410 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
1b420 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
1b430 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
1b440 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
1b450 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
1b460 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
1b470 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
1b480 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
1b490 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
1b4a0 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
1b4b0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e  sqlite3Malloc(in
1b4c0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1b4d0 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29  3MallocZero(int)
1b4e0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1b4f0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
1b500 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  te3*, int);.void
1b510 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
1b520 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 69  cRaw(sqlite3*, i
1b530 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
1b540 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
1b550 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
1b560 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
1b570 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
1b580 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
1b590 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1b5a0 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
1b5b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
1b5c0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
1b5d0 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
1b5e0 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oid *, int);.voi
1b5f0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
1b600 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
1b610 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  oid *, int);.voi
1b620 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
1b630 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
1b640 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
1b650 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a  locSize(void*);.
1b660 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  int sqlite3DbMal
1b670 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a  locSize(sqlite3*
1b680 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  , void*);.void *
1b690 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61  sqlite3ScratchMa
1b6a0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
1b6b0 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72  sqlite3ScratchFr
1b6c0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1b6d0 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
1b6e0 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
1b6f0 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
1b700 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
1b710 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
1b720 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
1b730 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
1b740 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
1b750 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
1b760 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id));.int sqlite
1b770 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28  3HeapNearlyFull(
1b780 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  void);../*.** On
1b790 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d   systems with am
1b7a0 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20  ple stack space 
1b7b0 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74  and that support
1b7c0 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a   alloca(), make.
1b7d0 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61  ** use of alloca
1b7e0 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61  () to obtain spa
1b7f0 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74  ce for large aut
1b800 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20  omatic objects. 
1b810 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20   By default,.** 
1b820 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f  obtain space fro
1b830 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a  m malloc()..**.*
1b840 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72  * The alloca() r
1b850 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74  outine never ret
1b860 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73  urns NULL.  This
1b870 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65   will cause code
1b880 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64   paths.** that d
1b890 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33  eal with sqlite3
1b8a0 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69  StackAlloc() fai
1b8b0 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65  lures to be unre
1b8c0 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64  achable..*/.#ifd
1b8d0 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c  ef SQLITE_USE_AL
1b8e0 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71  LOCA.# define sq
1b8f0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
1b900 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61  aw(D,N)   alloca
1b910 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (N).# define sql
1b920 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
1b930 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28  ro(D,N)  memset(
1b940 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29  alloca(N), 0, N)
1b950 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1b960 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
1b970 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64        .#else.# d
1b980 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1b990 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
1b9a0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1b9b0 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
1b9c0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1b9d0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
1b9e0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
1b9f0 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
1ba00 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
1ba10 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
1ba20 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
1ba30 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
1ba40 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1ba50 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS3.const sqlit
1ba60 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1ba70 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1ba80 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys3(void);.#end
1ba90 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
1baa0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
1bab0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
1bac0 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
1bad0 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
1bae0 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
1baf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
1bb00 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
1bb10 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1bb20 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
1bb30 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
1bb40 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
1bb50 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
1bb60 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
1bb70 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
1bb80 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
1bb90 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
1bba0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
1bbb0 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
1bbc0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
1bbd0 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
1bbe0 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
1bbf0 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
1bc00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1bc10 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69  StatusAdd(int, i
1bc20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1bc30 33 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20  3StatusSet(int, 
1bc40 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  int);..#ifndef S
1bc50 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
1bc60 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
1bc70 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
1bc80 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
1bc90 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
1bca0 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
1bcb0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72  void sqlite3VXPr
1bcc0 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
1bcd0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
1bce0 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 6e  , va_list);.#ifn
1bcf0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1bd00 54 52 41 43 45 0a 76 6f 69 64 20 73 71 6c 69 74  TRACE.void sqlit
1bd10 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  e3XPrintf(StrAcc
1bd20 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  um*, const char*
1bd30 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 63  , ...);.#endif.c
1bd40 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69  har *sqlite3MPri
1bd50 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
1bd60 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1bd70 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50  char *sqlite3VMP
1bd80 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
1bd90 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
1bda0 69 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ist);.char *sqli
1bdb0 74 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69  te3MAppendf(sqli
1bdc0 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74  te3*,char*,const
1bdd0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66   char*,...);.#if
1bde0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1bdf0 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64  TEST) || defined
1be00 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
1be10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
1be20 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
1be30 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
1be40 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
1be50 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
1be60 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
1be70 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
1be80 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
1be90 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
1bea0 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
1beb0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
1bec0 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
1bed0 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
1bee0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1bef0 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71  r*, ...);.int sq
1bf00 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
1bf10 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1bf20 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73  KeywordCode(cons
1bf30 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
1bf40 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1bf50 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
1bf60 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
1bf70 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64  , char **);.void
1bf80 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f   sqlite3FinishCo
1bf90 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e  ding(Parse*);.in
1bfa0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
1bfb0 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Reg(Parse*);.voi
1bfc0 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
1bfd0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69  TempReg(Parse*,i
1bfe0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1bff0 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72  GetTempRange(Par
1c000 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
1c010 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
1c020 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
1c030 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
1c040 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
1c050 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
1c060 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
1c070 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1c080 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1c090 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1c0a0 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
1c0b0 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
1c0c0 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
1c0d0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
1c0e0 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
1c0f0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
1c100 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
1c110 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
1c120 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65  e3ExprAnd(sqlite
1c130 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  3*,Expr*, Expr*)
1c140 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1c150 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73  xprFunction(Pars
1c160 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  e*,ExprList*, To
1c170 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1c180 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
1c190 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
1c1a0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1c1b0 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
1c1c0 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
1c1d0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
1c1e0 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
1c1f0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1c200 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
1c210 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
1c220 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
1c230 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
1c240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1c250 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
1c260 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1c270 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
1c280 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
1c290 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1c2a0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1c2b0 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
1c2c0 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
1c2d0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
1c2e0 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
1c2f0 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
1c300 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
1c310 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
1c320 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
1c330 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
1c340 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
1c350 6e 61 6c 53 63 68 65 6d 61 28 73 71 6c 69 74 65  nalSchema(sqlite
1c360 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  3*, int);.void s
1c370 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65  qlite3BeginParse
1c380 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
1c390 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
1c3a0 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
1c3b0 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65  sqlite3*);.Table
1c3c0 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53   *sqlite3ResultS
1c3d0 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65  etOfSelect(Parse
1c3e0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64  *,Select*);.void
1c3f0 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74   sqlite3OpenMast
1c400 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c  erTable(Parse *,
1c410 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1c420 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
1c430 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
1c440 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
1c450 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1c460 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
1c470 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
1c480 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
1c490 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
1c4a0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
1c4b0 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
1c4c0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1c4d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1c4e0 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
1c4f0 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
1c500 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
1c510 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
1c520 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b  nType(Parse*,Tok
1c530 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1c540 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
1c550 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
1c560 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1c570 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
1c580 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
1c590 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
1c5a0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
1c5b0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63  en*,Token*,Selec
1c5c0 74 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71  t*);..Bitvec *sq
1c5d0 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74  lite3BitvecCreat
1c5e0 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  e(u32);.int sqli
1c5f0 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69  te3BitvecTest(Bi
1c600 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
1c610 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65   sqlite3BitvecSe
1c620 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
1c630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
1c640 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a  vecClear(Bitvec*
1c650 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76  , u32, void*);.v
1c660 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
1c670 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a  cDestroy(Bitvec*
1c680 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69  );.u32 sqlite3Bi
1c690 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a  tvecSize(Bitvec*
1c6a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
1c6b0 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28  tvecBuiltinTest(
1c6c0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53  int,int*);..RowS
1c6d0 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
1c6e0 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  tInit(sqlite3*, 
1c6f0 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20  void*, unsigned 
1c700 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1c710 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f  e3RowSetClear(Ro
1c720 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  wSet*);.void sql
1c730 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
1c740 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
1c750 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
1c760 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 75  tTest(RowSet*, u
1c770 38 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  8 iBatch, i64);.
1c780 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
1c790 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
1c7a0 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
1c7b0 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
1c7c0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
1c7d0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74  n*,Token*,Select
1c7e0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66  *,int,int);..#if
1c7f0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1c800 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21  _OMIT_VIEW) || !
1c810 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1c820 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1c830 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  ).  int sqlite3V
1c840 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
1c850 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  s(Parse*,Table*)
1c860 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1c870 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
1c880 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20  olumnNames(A,B) 
1c890 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  0.#endif..void s
1c8a0 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28  qlite3DropTable(
1c8b0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1c8c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1c8d0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1c8e0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
1c8f0 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
1c900 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
1c910 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
1c920 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
1c930 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
1c940 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
1c950 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
1c960 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
1c970 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
1c980 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c990 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
1c9a0 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
1c9b0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
1c9c0 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
1c9d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
1c9e0 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
1c9f0 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
1ca00 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
1ca10 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1ca20 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
1ca30 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
1ca40 64 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c  d*,int,int,int*,
1ca50 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
1ca60 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
1ca70 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
1ca80 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
1ca90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
1caa0 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
1cab0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
1cac0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
1cad0 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
1cae0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
1caf0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
1cb00 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
1cb10 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
1cb20 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
1cb30 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
1cb40 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1cb50 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
1cb60 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
1cb70 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
1cb80 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbb0 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
1cbc0 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
1cbd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1cbe0 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
1cbf0 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
1cc00 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74  *, Token *);.int
1cc10 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
1cc20 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
1cc30 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
1cc40 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
1cc50 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
1cc60 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
1cc70 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1cc80 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
1cc90 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
1cca0 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
1ccb0 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
1ccc0 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
1ccd0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1cce0 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
1ccf0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
1cd00 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
1cd10 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
1cd20 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
1cd30 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
1cd40 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
1cd50 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1cd60 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
1cd70 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1cd80 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
1cd90 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
1cda0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
1cdb0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
1cdc0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
1cdd0 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
1cde0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
1cdf0 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
1ce00 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
1ce10 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1ce20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce30 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
1ce40 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 45 78  ExprList*,int,Ex
1ce50 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
1ce60 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
1ce70 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
1ce80 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
1ce90 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
1cea0 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
1ceb0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1cec0 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
1ced0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1cee0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1cef0 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
1cf00 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
1cf10 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
1cf20 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
1cf30 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
1cf40 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
1cf50 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
1cf60 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
1cf70 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
1cf80 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
1cf90 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
1cfa0 45 78 70 72 20 2a 2c 20 45 78 70 72 4c 69 73 74  Expr *, ExprList
1cfb0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
1cfc0 20 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e   *, char *);.#en
1cfd0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
1cfe0 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
1cff0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
1d000 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1d010 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
1d020 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
1d030 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
1d040 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
1d050 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
1d060 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1d070 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
1d080 2a 2a 2c 20 75 31 36 29 3b 0a 76 6f 69 64 20 73  **, u16);.void s
1d090 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
1d0a0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1d0b0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
1d0c0 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
1d0d0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1d0e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1d0f0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
1d100 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
1d110 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
1d120 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1d130 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1d140 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
1d150 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1d160 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1d170 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 69  deCopy(Parse*, i
1d180 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1d190 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1d1a0 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
1d1b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1d1c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d1d0 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
1d1e0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1d1f0 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
1d200 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1d210 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1d220 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20  eRemove(Parse*, 
1d230 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1d240 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
1d250 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76  Clear(Parse*);.v
1d260 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1d270 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e  acheAffinityChan
1d280 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ge(Parse*, int, 
1d290 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1d2a0 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a  3ExprCode(Parse*
1d2b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
1d2c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1d2d0 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45  deTemp(Parse*, E
1d2e0 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
1d2f0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1d300 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45  Target(Parse*, E
1d310 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
1d320 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
1d330 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
1d340 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
1d350 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1d360 65 43 6f 6e 73 74 61 6e 74 73 28 50 61 72 73 65  eConstants(Parse
1d370 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
1d380 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
1d390 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
1d3a0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
1d3b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d3c0 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
1d3d0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
1d3e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d3f0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
1d400 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1d410 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
1d420 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
1d430 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1d440 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
1d450 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
1d460 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
1d470 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
1d480 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1d490 73 74 20 63 68 61 72 2a 29 3b 0a 49 6e 64 65 78  st char*);.Index
1d4a0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
1d4b0 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
1d4c0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
1d4d0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1d4e0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
1d4f0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
1d500 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1d510 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1d520 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
1d530 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
1d540 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1d550 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
1d560 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  m(Parse*);.int s
1d570 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
1d580 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  char**, sqlite3*
1d590 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1d5a0 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
1d5b0 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
1d5c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1d5d0 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
1d5e0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1d5f0 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
1d600 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
1d610 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
1d620 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
1d630 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
1d640 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
1d650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1d660 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28  rAnalyzeAggList(
1d670 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70  NameContext*,Exp
1d680 72 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  rList*);.Vdbe *s
1d690 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
1d6a0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1d6b0 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
1d6c0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1d6d0 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
1d6e0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
1d6f0 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 65   sqlite3PrngRese
1d700 74 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  tState(void);.vo
1d710 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
1d720 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 29 3b  ckAll(sqlite3*);
1d730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1d740 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
1d750 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1d760 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
1d770 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
1d780 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1d790 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
1d7a0 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
1d7b0 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
1d7c0 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
1d7d0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1d7e0 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
1d7f0 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
1d800 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1d810 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
1d820 71 6c 69 74 65 33 20 2a 29 3b 0a 69 6e 74 20 73  qlite3 *);.int s
1d830 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
1d840 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
1d850 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
1d860 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
1d870 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1d880 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
1d890 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29  rFunction(Expr*)
1d8a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1d8b0 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
1d8c0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
1d8d0 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
1d8e0 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
1d8f0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1d900 43 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56  CodeIsNullJump(V
1d910 64 62 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  dbe*, const Expr
1d920 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
1d930 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
1d940 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
1d950 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
1d960 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
1d970 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
1d980 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
1d990 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
1d9a0 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
1d9b0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1d9c0 69 6e 74 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  int, Trigger *, 
1d9d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d9e0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
1d9f0 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
1da00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1da10 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1da20 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
1da30 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
1da40 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1da50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
1da60 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
1da70 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
1da80 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  le*,int,int,.   
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 20 20 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69    int*,int,int,i
1dac0 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  nt,int,int*);.vo
1dad0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
1dae0 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
1daf0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1db00 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c   int, int*, int,
1db10 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1db20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
1db30 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
1db40 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1db50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1db60 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
1db70 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
1db80 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1db90 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
1dba0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1dbb0 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
1dbc0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1dbd0 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
1dbe0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  t(Parse*, int, c
1dbf0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  har*, int);.Expr
1dc00 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
1dc10 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
1dc20 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
1dc30 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
1dc40 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
1dc50 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
1dc60 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
1dc70 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
1dc80 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
1dc90 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
1dca0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
1dcb0 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
1dcc0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
1dcd0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
1dce0 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ect*,int);.void 
1dcf0 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e  sqlite3FuncDefIn
1dd00 73 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68  sert(FuncDefHash
1dd10 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75  *, FuncDef*);.Fu
1dd20 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
1dd30 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
1dd40 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1dd50 69 6e 74 2c 69 6e 74 2c 75 38 2c 69 6e 74 29 3b  int,int,u8,int);
1dd60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1dd70 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
1dd80 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
1dd90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1dda0 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
1ddb0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
1ddc0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
1ddd0 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  erGlobalFunction
1dde0 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
1ddf0 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
1de00 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
1de10 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
1de20 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
1de30 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1de40 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
1de50 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
1de60 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1de70 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
1de80 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1de90 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
1dea0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
1deb0 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
1dec0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
1ded0 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
1dee0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1def0 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
1df00 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
1df10 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
1df20 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
1df30 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
1df40 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df60 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
1df70 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1df80 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
1df90 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
1dfa0 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
1dfb0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1dfc0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1dfd0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
1dfe0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
1dff0 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
1e000 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
1e010 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
1e020 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
1e030 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
1e040 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
1e050 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
1e060 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
1e070 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
1e080 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
1e090 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
1e0a0 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
1e0b0 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
1e0c0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
1e0d0 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0f0 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
1e100 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
1e110 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
1e120 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
1e130 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
1e140 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
1e150 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
1e160 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
1e170 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
1e180 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
1e190 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
1e1a0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1e1b0 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
1e1c0 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
1e1d0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
1e1e0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
1e1f0 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
1e200 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
1e210 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1e220 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
1e230 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
1e240 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
1e250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e270 20 20 20 20 20 20 20 20 20 45 78 70 72 4c 69 73           ExprLis
1e280 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a  t*,Select*,u8);.
1e290 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1e2a0 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
1e2b0 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
1e2c0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
1e2d0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
1e2e0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1e2f0 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
1e300 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
1e310 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
1e320 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
1e330 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
1e340 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
1e350 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
1e360 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
1e370 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
1e380 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1e390 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
1e3a0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
1e3b0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
1e3c0 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
1e3d0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
1e3e0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
1e3f0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
1e400 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
1e410 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
1e420 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (p)).#else.# def
1e430 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
1e440 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
1e450 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
1e460 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
1e470 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
1e480 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
1e490 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
1e4a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
1e4b0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
1e4c0 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
1e4d0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
1e4e0 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
1e4f0 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
1e500 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
1e510 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
1e520 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
1e530 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1e540 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
1e550 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
1e560 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
1e570 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
1e580 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
1e590 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
1e5a0 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
1e5b0 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
1e5c0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
1e5d0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1e5e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1e5f0 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
1e600 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
1e610 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
1e620 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
1e630 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
1e640 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
1e650 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
1e660 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
1e670 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
1e680 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
1e690 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
1e6a0 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
1e6b0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
1e6c0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
1e6d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
1e6e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1e6f0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
1e700 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
1e710 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
1e720 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
1e730 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
1e740 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
1e750 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
1e760 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
1e770 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
1e780 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1e790 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
1e7a0 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
1e7b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1e7c0 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
1e7d0 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
1e7e0 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
1e7f0 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
1e800 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
1e810 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1e820 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
1e830 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
1e840 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
1e850 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
1e860 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
1e870 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
1e880 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
1e890 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1e8a0 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
1e8b0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1e8c0 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
1e8d0 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
1e8e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1e8f0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
1e900 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
1e910 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
1e920 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1e930 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
1e940 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
1e950 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
1e960 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
1e970 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1e980 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
1e990 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
1e9a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1e9b0 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
1e9c0 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
1e9d0 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
1e9e0 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
1e9f0 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
1ea00 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
1ea10 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
1ea20 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
1ea30 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
1ea40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
1ea50 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
1ea60 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
1ea70 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
1ea80 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
1ea90 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
1eaa0 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
1eab0 6e 74 20 6e 42 79 74 65 29 3b 0a 69 6e 74 20 73  nt nByte);.int s
1eac0 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
1ead0 6f 6e 73 74 20 75 38 2a 2c 20 63 6f 6e 73 74 20  onst u8*, const 
1eae0 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  u8**);../*.** Ro
1eaf0 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
1eb00 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
1eb10 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
1eb20 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
1eb30 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
1eb40 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
1eb50 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
1eb60 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
1eb70 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
1eb80 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c 64 20  e.  Code should 
1eb90 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20 66 6f  use the MACRO fo
1eba0 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20 74 68  rms below, as th
1ebb0 65 20 56 61 72 69 6e 74 33 32 20 76 65 72 73 69  e Varint32 versi
1ebc0 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64  ons.** are coded
1ebd0 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65 20 73   to assume the s
1ebe0 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73 65 20  ingle byte case 
1ebf0 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e 64 6c  is already handl
1ec00 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20 74 68  ed (which .** th
1ec10 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65  e MACRO form doe
1ec20 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  s)..*/.int sqlit
1ec30 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
1ec40 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
1ec50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  ;.int sqlite3Put
1ec60 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67 6e 65  Varint32(unsigne
1ec70 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a 75  d char*, u32);.u
1ec80 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
1ec90 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
1eca0 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
1ecb0 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
1ecc0 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
1ecd0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
1ece0 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
1ecf0 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
1ed00 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68  v);../*.** The h
1ed10 65 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72  eader of a recor
1ed20 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  d consists of a 
1ed30 73 65 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c  sequence variabl
1ed40 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
1ed50 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65  s..** These inte
1ed60 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20  gers are almost 
1ed70 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64  always small and
1ed80 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20   are encoded as 
1ed90 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a  a single byte..*
1eda0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1edb0 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61  macros take adva
1edc0 6e 74 61 67 65 20 74 68 69 73 20 66 61 63 74 20  ntage this fact 
1edd0 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61 73  to provide a fas
1ede0 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20  t encode.** and 
1edf0 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e  decode of the in
1ee00 74 65 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f  tegers in a reco
1ee10 72 64 20 68 65 61 64 65 72 2e 20 20 49 74 20 69  rd header.  It i
1ee20 73 20 66 61 73 74 65 72 20 66 6f 72 20 74 68 65  s faster for the
1ee30 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20   common.** case 
1ee40 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 67 65  where the intege
1ee50 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79  r is a single by
1ee60 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74  te.  It is a lit
1ee70 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20  tle slower when 
1ee80 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
1ee90 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79  s two or more by
1eea0 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c  tes.  But overal
1eeb0 6c 20 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a  l it is faster..
1eec0 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
1eed0 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ing expressions 
1eee0 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a  are equivalent:.
1eef0 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71  **.**     x = sq
1ef00 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
1ef10 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20  ( A, &B );.**   
1ef20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74    x = sqlite3Put
1ef30 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29  Varint32( A, B )
1ef40 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20  ;.**.**     x = 
1ef50 67 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  getVarint32( A, 
1ef60 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20  B );.**     x = 
1ef70 70 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  putVarint32( A, 
1ef80 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69  B );.**.*/.#defi
1ef90 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
1efa0 2c 42 29 20 20 28 75 38 29 28 28 2a 28 41 29 3c  ,B)  (u8)((*(A)<
1efb0 28 75 38 29 30 78 38 30 29 20 3f 20 28 28 42 29  (u8)0x80) ? ((B)
1efc0 20 3d 20 28 75 33 32 29 2a 28 41 29 29 2c 31 20   = (u32)*(A)),1 
1efd0 3a 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  : sqlite3GetVari
1efe0 6e 74 33 32 28 28 41 29 2c 20 28 75 33 32 20 2a  nt32((A), (u32 *
1eff0 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
1f000 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
1f010 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
1f020 3c 28 75 33 32 29 30 78 38 30 29 20 3f 20 28 2a  <(u32)0x80) ? (*
1f030 28 41 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20  (A) = (unsigned 
1f040 63 68 61 72 29 28 42 29 29 2c 31 20 3a 20 73 71  char)(B)),1 : sq
1f050 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
1f060 28 28 41 29 2c 20 28 42 29 29 29 0a 23 64 65 66  ((A), (B))).#def
1f070 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
1f080 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
1f090 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
1f0a0 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
1f0b0 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
1f0c0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
1f0d0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  exAffinityStr(Vd
1f0e0 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a  be *, Index *);.
1f0f0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
1f100 65 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  eAffinityStr(Vdb
1f110 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63  e *, Table *);.c
1f120 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
1f130 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
1f140 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
1f150 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
1f160 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
1f170 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
1f180 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
1f190 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
1f1a0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
1f1b0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
1f1c0 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
1f1d0 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
1f1e0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
1f1f0 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
1f200 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
1f210 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73  r*,...);.void *s
1f220 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
1f230 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
1f240 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
1f250 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
1f260 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
1f270 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
1f280 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 63 6f  *, Token **);.co
1f290 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
1f2a0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
1f2b0 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
1f2c0 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
1f2d0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
1f2e0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
1f2f0 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
1f300 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
1f310 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
1f320 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
1f330 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
1f340 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
1f350 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
1f360 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
1f370 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
1f380 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
1f390 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 65 74   *sqlite3ExprSet
1f3a0 43 6f 6c 6c 28 45 78 70 72 2a 2c 20 43 6f 6c 6c  Coll(Expr*, Coll
1f3b0 53 65 71 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Seq*);.Expr *sql
1f3c0 69 74 65 33 45 78 70 72 53 65 74 43 6f 6c 6c 42  ite3ExprSetCollB
1f3d0 79 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50  yToken(Parse *pP
1f3e0 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 54 6f 6b  arse, Expr*, Tok
1f3f0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
1f400 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
1f410 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
1f420 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
1f430 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
1f440 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
1f450 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
1f460 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
1f470 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
1f480 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  ;..const void *s
1f490 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
1f4a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
1f4b0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
1f4c0 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  ValueBytes(sqlit
1f4d0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
1f4e0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
1f4f0 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f  eSetStr(sqlite3_
1f500 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  value*, int, con
1f510 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20  st void *,u8, . 
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f530 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
1f540 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
1f550 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71  ite3ValueFree(sq
1f560 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73  lite3_value*);.s
1f570 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71  qlite3_value *sq
1f580 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71  lite3ValueNew(sq
1f590 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a  lite3 *);.char *
1f5a0 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
1f5b0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
1f5c0 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29   void*, int, u8)
1f5d0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1f5e0 45 4e 41 42 4c 45 5f 53 54 41 54 32 0a 63 68 61  ENABLE_STAT2.cha
1f5f0 72 20 2a 73 71 6c 69 74 65 33 55 74 66 38 74 6f  r *sqlite3Utf8to
1f600 31 36 28 73 71 6c 69 74 65 33 20 2a 2c 20 75 38  16(sqlite3 *, u8
1f610 2c 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  , char *, int, i
1f620 6e 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nt *);.#endif.in
1f630 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
1f640 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
1f650 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
1f660 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
1f670 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
1f680 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
1f690 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
1f6a0 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
1f6b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
1f6c0 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
1f6d0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
1f6e0 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
1f6f0 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
1f700 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
1f710 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
1f720 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a  UpperToLower[];.
1f730 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
1f740 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
1f750 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78  e3CtypeMap[];.ex
1f760 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  tern const Token
1f770 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e   sqlite3IntToken
1f780 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  s[];.extern SQLI
1f790 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71  TE_WSD struct Sq
1f7a0 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69  lite3Config sqli
1f7b0 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72  te3Config;.exter
1f7c0 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e  n SQLITE_WSD Fun
1f7d0 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33  cDefHash sqlite3
1f7e0 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b  GlobalFunctions;
1f7f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f800 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
1f810 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
1f820 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
1f830 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
1f840 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
1f850 44 62 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  Db*, int, int);.
1f860 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
1f870 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
1f880 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
1f890 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
1f8a0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
1f8b0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
1f8c0 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
1f8d0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
1f8e0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
1f8f0 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
1f900 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
1f910 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
1f920 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
1f930 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
1f940 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
1f950 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
1f960 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
1f970 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
1f980 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
1f990 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45  elect(Parse *, E
1f9a0 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
1f9b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
1f9c0 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
1f9d0 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
1f9e0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
1f9f0 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
1fa00 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
1fa10 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
1fa20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
1fa30 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
1fa40 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
1fa50 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
1fa60 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
1fa70 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
1fa80 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
1fa90 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
1faa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1fab0 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
1fac0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
1fad0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1fae0 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
1faf0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
1fb00 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
1fb10 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
1fb20 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
1fb30 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
1fb40 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
1fb50 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 73 71 6c  e3GetCollSeq(sql
1fb60 69 74 65 33 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  ite3*, u8, CollS
1fb70 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
1fb80 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
1fb90 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
1fba0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1fbb0 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
1fbc0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
1fbd0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
1fbe0 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
1fbf0 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
1fc00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1fc10 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
1fc20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
1fc30 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
1fc40 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
1fc50 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
1fc60 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
1fc70 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
1fc80 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
1fc90 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
1fca0 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
1fcb0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
1fcc0 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
1fcd0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
1fce0 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
1fcf0 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
1fd00 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
1fd10 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
1fd20 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
1fd30 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
1fd40 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69  void sqlite3Mini
1fd50 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61  mumFileFormat(Pa
1fd60 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
1fd70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
1fd80 65 6d 61 46 72 65 65 28 76 6f 69 64 20 2a 29 3b  emaFree(void *);
1fd90 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
1fda0 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
1fdb0 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
1fdc0 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
1fdd0 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
1fde0 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
1fdf0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
1fe00 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50 61 72  IndexKeyinfo(Par
1fe10 73 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a  se *, Index *);.
1fe20 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
1fe30 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
1fe40 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
1fe50 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
1fe60 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c   .  void (*)(sql
1fe70 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
1fe80 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
1fe90 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  **),.  void (*)(
1fea0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
1feb0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
1fec0 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29  ue **), void (*)
1fed0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
1fee0 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75  *),.  FuncDestru
1fef0 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
1ff00 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r.);.int sqlite3
1ff10 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
1ff20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
1ff30 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
1ff40 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
1ff50 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
1ff60 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
1ff70 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74  cum*, char*, int
1ff80 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1ff90 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
1ffa0 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  nd(StrAccum*,con
1ffb0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 63  st char*,int);.c
1ffc0 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
1ffd0 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
1ffe0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
1fff0 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
20000 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
20010 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
20020 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
20030 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
20040 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
20050 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
20060 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
20070 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
20080 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
20090 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
200a0 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
200b0 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
200c0 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
200d0 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
200e0 74 20 75 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  t u8 *);../*.** 
200f0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
20100 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
20110 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
20120 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
20130 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
20140 28 73 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20  (size_t));.void 
20150 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65  sqlite3ParserFre
20160 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29  e(void*, void(*)
20170 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
20180 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
20190 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20  d*, int, Token, 
201a0 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
201b0 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
201c0 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
201d0 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
201e0 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
201f0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
20200 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
20210 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
20220 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20230 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
20240 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
20250 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
20260 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
20270 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
20280 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
20290 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
202a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
202b0 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
202c0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
202d0 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
202e0 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
202f0 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
20300 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
20310 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
20320 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
20330 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
20340 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
20350 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
20360 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
20370 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20380 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
20390 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
203a0 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
203b0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
203c0 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
203d0 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
203e0 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
203f0 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
20400 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
20410 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
20420 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
20430 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
20440 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
20450 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71  X) .#  define sq
20460 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
20470 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
20480 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
20490 73 74 28 58 29 0a 23 65 6c 73 65 0a 20 20 20 76  st(X).#else.   v
204a0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
204b0 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
204c0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 69 6e  , Table*);.   in
204d0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  t sqlite3VtabSyn
204e0 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  c(sqlite3 *db, c
204f0 68 61 72 20 2a 2a 29 3b 0a 20 20 20 69 6e 74 20  har **);.   int 
20500 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
20510 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
20520 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
20530 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
20540 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
20550 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
20560 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
20570 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
20580 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
20590 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
205a0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
205b0 71 6c 69 74 65 33 2a 29 3b 0a 23 20 20 64 65 66  qlite3*);.#  def
205c0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
205d0 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
205e0 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
205f0 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
20600 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
20610 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61  te3VtabMakeWrita
20620 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ble(Parse*,Table
20630 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20640 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50  VtabBeginParse(P
20650 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
20660 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
20670 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
20680 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
20690 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
206a0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
206b0 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
206c0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
206d0 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
206e0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
206f0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
20700 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
20710 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
20720 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
20730 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
20740 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
20750 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
20760 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
20770 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
20780 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
20790 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
207a0 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
207b0 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
207c0 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
207d0 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
207e0 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
207f0 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
20800 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
20810 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
20820 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
20830 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
20840 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lue**);.int sqli
20850 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72  te3VdbeParameter
20860 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e  Index(Vdbe*, con
20870 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
20880 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
20890 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
208a0 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69  te3_stmt *, sqli
208b0 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74  te3_stmt *);.int
208c0 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
208d0 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
208e0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
208f0 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
20900 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
20910 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
20920 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
20930 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
20940 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
20950 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
20960 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
20970 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
20980 29 3b 0a 56 54 61 62 6c 65 20 2a 73 71 6c 69 74  );.VTable *sqlit
20990 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
209a0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 63  te3*, Table*);.c
209b0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
209c0 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
209d0 65 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  e(int);.int sqli
209e0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
209f0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
20a00 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
20a10 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
20a20 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
20a30 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 20 44 65 63  r*,int);../* Dec
20a40 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
20a50 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
20a60 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
20a70 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
20a80 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
20a90 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
20aa0 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
20ab0 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
20ac0 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
20ad0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
20ae0 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
20af0 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
20b00 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
20b10 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
20b20 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
20b30 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
20b40 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
20b50 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
20b60 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
20b70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
20b80 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
20b90 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65  y is .** provide
20ba0 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
20bb0 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
20bc0 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
20bd0 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
20be0 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
20bf0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
20c00 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
20c10 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20c20 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
20c30 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
20c40 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
20c50 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  e*, int, int);. 
20c60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
20c70 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
20c80 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
20c90 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
20ca0 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
20cb0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
20cc0 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  rList*, int);.  
20cd0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
20ce0 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
20cf0 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
20d00 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
20d10 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
20d20 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
20d30 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
20d40 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
20d50 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
20d60 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
20d70 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65 66  (a,b,c,d).  #def
20d80 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
20d90 63 6b 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64  ck(a,b,c,d).  #d
20da0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
20db0 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
20dc0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
20dd0 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
20de0 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65       0.  #define
20df0 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
20e00 65 64 28 61 2c 62 2c 63 2c 64 29 20 30 0a 23 65  ed(a,b,c,d) 0.#e
20e10 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
20e20 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
20e30 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
20e40 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
20e50 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
20e60 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
20e70 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
20e80 61 2c 62 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  a,b).#endif.../*
20e90 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
20ea0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
20eb0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
20ec0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
20ed0 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
20ee0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
20ef0 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
20f00 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
20f10 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
20f20 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
20f30 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
20f40 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
20f50 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
20f60 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
20f70 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
20f80 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
20f90 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
20fa0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
20fb0 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
20fc0 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
20fd0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
20fe0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
20ff0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
21000 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
21010 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
21020 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
21030 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
21040 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
21050 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
21060 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
21070 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
21080 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
21090 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  if..#define IN_I
210a0 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
210b0 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49       1.#define I
210c0 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
210d0 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e          2.#defin
210e0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
210f0 20 20 20 20 20 20 20 20 20 20 20 33 0a 69 6e 74             3.int
21100 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
21110 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70  dex(Parse *, Exp
21120 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66  r *, int*);..#if
21130 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
21140 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20  E_ATOMIC_WRITE. 
21150 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
21160 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
21170 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
21180 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
21190 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
211a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
211b0 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
211c0 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73  _vfs *);.  int s
211d0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
211e0 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
211f0 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
21200 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
21210 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28  nalSize(pVfs) ((
21220 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29  pVfs)->szOsFile)
21230 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
21240 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
21250 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
21260 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
21270 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76  MemJournalSize(v
21280 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
21290 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71  3IsMemJournal(sq
212a0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
212b0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
212c0 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f  XPR_DEPTH>0.  vo
212d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
212e0 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a 70  tHeight(Parse *p
212f0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
21300 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
21310 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
21320 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
21330 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
21340 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
21350 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
21360 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
21370 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20  SetHeight(x,y). 
21380 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
21390 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
213a0 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
213b0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
213c0 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
213d0 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
213e0 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
213f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21400 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
21410 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
21420 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
21430 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
21440 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
21450 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
21460 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
21470 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
21480 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
21490 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
214a0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
214b0 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
214c0 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
214d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
214e0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
214f0 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
21500 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
21510 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
21520 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
21530 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
21540 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
21550 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
21560 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
21570 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
21580 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
21590 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
215a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
215b0 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
215c0 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
215d0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
215e0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
215f0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
21600 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
21610 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
21620 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
21630 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
21640 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
21650 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
21660 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
21670 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
21680 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
21690 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
216a0 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
216b0 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
216c0 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73  _EXTERN void (*s
216d0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
216e0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
216f0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
21700 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
21710 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
21720 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
21730 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
21740 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
21750 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
21760 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
21770 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
21780 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
21790 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
217a0 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
217b0 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
217c0 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
217d0 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
217e0 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
217f0 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
21800 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
21810 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
21820 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
21830 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
21840 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
21850 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
21860 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
21870 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
21880 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
21890 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
218a0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
218b0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
218c0 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
218d0 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
218e0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
218f0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
21900 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
21910 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
21920 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
21930 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
21940 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
21950 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
21960 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
21970 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
21980 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
21990 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
219a0 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
219b0 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
219c0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
219d0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
219e0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
219f0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
21a00 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
21a10 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
21a20 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
21a30 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
21a40 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
21a50 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
21a60 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
21a70 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
21a80 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
21a90 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
21aa0 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
21ab0 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
21ac0 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
21ad0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
21ae0 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
21af0 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
21b00 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
21b10 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
21b20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
21b30 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
21b40 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
21b50 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
21b60 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
21b70 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
21b80 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
21b90 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
21ba0 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
21bb0 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
21bc0 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
21bd0 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
21be0 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
21bf0 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
21c00 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
21c10 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
21c20 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
21c30 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
21c40 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
21c50 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
21c60 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
21c70 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
21c80 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
21c90 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
21ca0 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
21cb0 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
21cc0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
21cd0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
21ce0 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
21cf0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
21d00 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
21d10 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
21d20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
21d30 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
21d40 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
21d50 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
21d60 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
21d70 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
21d80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
21d90 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
21da0 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
21db0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
21dc0 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
21dd0 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
21de0 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
21df0 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
21e00 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
21e10 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
21e20 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
21e30 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68  0x02  /* Might h
21e40 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
21e50 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65  de memory */.#de
21e60 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
21e70 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
21e80 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
21e90 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
21ea0 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
21eb0 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
21ec0 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
21ed0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
21ee0 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20 20  MTYPE_DB        
21ef0 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73   0x10  /* Uses s
21f00 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
21f10 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  not sqlite_mallo
21f20 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  c */..#endif /* 
21f30 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
21f40 0a                                               .