/ Hex Artifact Content
Login

Artifact 9cec95011e6e6f14f74f855275e21bea79daee2e:


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 66 6f 6c 6c 6f 77  /*.** The follow
0940: 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75  ing macros are u
0950: 73 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e  sed to cast poin
0960: 74 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73  ters to integers
0970: 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73   and.** integers
0980: 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54   to pointers.  T
0990: 68 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68  he way you do th
09a0: 69 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f  is varies from o
09b0: 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74  ne compiler.** t
09c0: 6f 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77  o the next, so w
09d0: 65 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64  e have developed
09e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
09f0: 65 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d  et of #if statem
0a00: 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72  ents.** to gener
0a10: 61 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  ate appropriate 
0a20: 6d 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64  macros for a wid
0a30: 65 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69  e range of compi
0a40: 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lers..**.** The 
0a50: 63 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77  correct "ANSI" w
0a60: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73  ay to do this is
0a70: 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70   to use the intp
0a80: 74 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55  tr_t type. .** U
0a90: 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68  nfortunately, th
0aa0: 61 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f  at typedef is no
0ab0: 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61  t available on a
0ac0: 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72  ll compilers, or
0ad0: 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61  .** if it is ava
0ae0: 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69  ilable, it requi
0af0: 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20  res an #include 
0b00: 6f 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64  of specific head
0b10: 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79  ers.** that vary
0b20: 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e   from one machin
0b30: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a  e to the next..*
0b40: 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36  *.** Ticket #386
0b50: 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63  0:  The llvm-gcc
0b60: 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72  -4.2 compiler fr
0b70: 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20  om Apple chokes 
0b80: 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64  on.** the ((void
0b90: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0ba0: 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75  ) construct.  Bu
0bb0: 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e  t MSVC chokes on
0bc0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a   ((void*)(X))..*
0bd0: 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20  * So we have to 
0be0: 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f  define the macro
0bf0: 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77  s in different w
0c00: 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ays depending on
0c10: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72   the.** compiler
0c20: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
0c30: 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f  (__PTRDIFF_TYPE_
0c40: 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65  _)  /* This case
0c50: 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72   should work for
0c60: 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65   GCC */.# define
0c70: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0c80: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0c90: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0ca0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
0cb0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0cc0: 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54  (X)  ((int)(__PT
0cd0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29  RDIFF_TYPE__)(X)
0ce0: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
0cf0: 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20  (__GNUC__)      
0d00: 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f   /* Works for co
0d10: 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68  mpilers other th
0d20: 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66  an LLVM */.# def
0d30: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
0d40: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
0d50: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0d60: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0d70: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0d80: 20 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29   ((int)(((char*)
0d90: 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65  X)-(char*)0)).#e
0da0: 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45  lif defined(HAVE
0db0: 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20  _STDINT_H)   /* 
0dc0: 55 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66  Use this case if
0dd0: 20 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65   we have ANSI he
0de0: 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e  aders */.# defin
0df0: 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f  e SQLITE_INT_TO_
0e00: 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29  PTR(X)  ((void*)
0e10: 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23  (intptr_t)(X)).#
0e20: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
0e30: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
0e40: 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58  int)(intptr_t)(X
0e50: 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20  )).#else        
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e70: 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61    /* Generates a
0e80: 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69   warning - but i
0e90: 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a  t always works *
0ea0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
0eb0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
0ec0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20   ((void*)(X)).# 
0ed0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0ee0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0ef0: 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a  nt)(X)).#endif..
0f00: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
0f10: 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72  _THREADSAFE macr
0f20: 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65  o must be define
0f30: 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e  d as 0, 1, or 2.
0f40: 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65  .** 0 means mute
0f50: 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e  xes are permanen
0f60: 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20  tly disable and 
0f70: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e  the library is n
0f80: 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61  ever.** threadsa
0f90: 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65  fe.  1 means the
0fa0: 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69   library is seri
0fb0: 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20  alized which is 
0fc0: 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c  the highest.** l
0fd0: 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61  evel of threadsa
0fe0: 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74  fety.  2 means t
0ff0: 68 65 20 6c 69 62 61 72 79 20 69 73 20 6d 75 6c  he libary is mul
1000: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1010: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1020: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1030: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1040: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
1050: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
1060: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1070: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
1080: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
1090: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10a0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
10b0: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
10c0: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
10d0: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
10e0: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
10f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1100: 48 52 45 41 44 53 41 46 45 29 0a 23 69 66 20 64  HREADSAFE).#if d
1110: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1120: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  E).# define SQLI
1130: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48  TE_THREADSAFE TH
1140: 52 45 41 44 53 41 46 45 0a 23 65 6c 73 65 0a 23  READSAFE.#else.#
1150: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1160: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1170: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1180: 39 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 65 6e 64  9 */.#endif.#end
1190: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73  if../*.** Powers
11a0: 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73  afe overwrite is
11b0: 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20   on by default. 
11c0: 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e   But can be turn
11d0: 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20  ed off using.** 
11e0: 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57  the -DSQLITE_POW
11f0: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1200: 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  =0 command-line 
1210: 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  option..*/.#ifnd
1220: 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ef SQLITE_POWERS
1230: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20  AFE_OVERWRITE.# 
1240: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f  define SQLITE_PO
1250: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1260: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 1.#endif../*.*
1270: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46  * The SQLITE_DEF
1280: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d  AULT_MEMSTATUS m
1290: 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66  acro must be def
12a0: 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30  ined as either 0
12b0: 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74   or 1..** It det
12c0: 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
12d0: 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75  or not the featu
12e0: 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a  res related to .
12f0: 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ** SQLITE_CONFIG
1300: 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61  _MEMSTATUS are a
1310: 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
1320: 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73  ult or not. This
1330: 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65   value can.** be
1340: 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72   overridden at r
1350: 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  untime using the
1360: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
1370: 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64  ) API..*/.#if !d
1380: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1390: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29  FAULT_MEMSTATUS)
13a0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
13b0: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
13c0: 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 1.#endif../*.
13d0: 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  ** Exactly one o
13e0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13f0: 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64  macros must be d
1400: 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20  efined in order 
1410: 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68  to.** specify wh
1420: 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ich memory alloc
1430: 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20  ation subsystem 
1440: 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  to use..**.**   
1450: 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f    SQLITE_SYSTEM_
1460: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
1470: 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79  // Use normal sy
1480: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
1490: 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33       SQLITE_WIN3
14a0: 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  2_MALLOC        
14b0: 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20     // Use Win32 
14c0: 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a  native heap API.
14d0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45  **     SQLITE_ZE
14e0: 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  RO_MALLOC       
14f0: 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74       // Use a st
1500: 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61  ub allocator tha
1510: 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a  t always fails.*
1520: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d  *     SQLITE_MEM
1530: 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20  DEBUG           
1540: 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67      // Debugging
1550: 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74   version of syst
1560: 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a  em malloc().**.*
1570: 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66  * On Windows, if
1580: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33   the SQLITE_WIN3
1590: 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54  2_MALLOC_VALIDAT
15a0: 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  E macro is defin
15b0: 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73  ed and the.** as
15c0: 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20  sert() macro is 
15d0: 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61  enabled, each ca
15e0: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33  ll into the Win3
15f0: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75  2 native heap su
1600: 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20  bsystem.** will 
1610: 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61  cause HeapValida
1620: 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e  te to be called.
1630: 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61    If heap valida
1640: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c  tion should fail
1650: 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f  , an.** assertio
1660: 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65  n will be trigge
1670: 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 28 48 69 73 74  red..**.** (Hist
1680: 6f 72 69 63 61 6c 20 6e 6f 74 65 3a 20 20 54 68  orical note:  Th
1690: 65 72 65 20 75 73 65 64 20 74 6f 20 62 65 20 73  ere used to be s
16a0: 65 76 65 72 61 6c 20 6f 74 68 65 72 20 6f 70 74  everal other opt
16b0: 69 6f 6e 73 2c 20 62 75 74 20 77 65 27 76 65 0a  ions, but we've.
16c0: 2a 2a 20 70 61 72 65 64 20 69 74 20 64 6f 77 6e  ** pared it down
16d0: 20 74 6f 20 6a 75 73 74 20 74 68 65 73 65 20 74   to just these t
16e0: 68 72 65 65 2e 29 0a 2a 2a 0a 2a 2a 20 49 66 20  hree.).**.** If 
16f0: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76  none of the abov
1700: 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74  e are defined, t
1710: 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53  hen set SQLITE_S
1720: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a  YSTEM_MALLOC as.
1730: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a  ** the default..
1740: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1750: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1760: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1770: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
1780: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
1790: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
17a0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
17b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
17c0: 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72  EMDEBUG)>1.# err
17d0: 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20  or "Two or more 
17e0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
17f0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
1800: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
1810: 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65  ons\. are define
1820: 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e  d but at most on
1830: 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20  e is allowed:\. 
1840: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1850: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e  LLOC, SQLITE_WIN
1860: 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  32_MALLOC, SQLIT
1870: 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51  E_MEMDEBUG,\. SQ
1880: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1890: 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ".#endif.#if def
18a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
18b0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
18c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
18d0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
18e0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
18f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
1900: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1910: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d  LITE_MEMDEBUG)==
1920: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
1930: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
1940: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
1950: 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  If SQLITE_MALLOC
1960: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e  _SOFT_LIMIT is n
1970: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72  ot zero, then tr
1980: 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a  y to keep the.**
1990: 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79   sizes of memory
19a0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c   allocations bel
19b0: 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68  ow this value wh
19c0: 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f  ere possible..*/
19d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
19e0: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
19f0: 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65  _LIMIT).# define
1a00: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
1a10: 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23  OFT_LIMIT 1024.#
1a20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20  endif../*.** We 
1a30: 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f  need to define _
1a40: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20  XOPEN_SOURCE as 
1a50: 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72  follows in order
1a60: 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65   to enable.** re
1a70: 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20  cursive mutexes 
1a80: 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73  on most Unix sys
1a90: 74 65 6d 73 2e 20 20 42 75 74 20 4d 61 63 20 4f  tems.  But Mac O
1aa0: 53 20 58 20 69 73 20 64 69 66 66 65 72 65 6e 74  S X is different
1ab0: 2e 0a 2a 2a 20 54 68 65 20 5f 58 4f 50 45 4e 5f  ..** The _XOPEN_
1ac0: 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63 61  SOURCE define ca
1ad0: 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f  uses problems fo
1ae0: 72 20 4d 61 63 20 4f 53 20 58 20 77 65 20 61 72  r Mac OS X we ar
1af0: 65 20 74 6f 6c 64 2c 0a 2a 2a 20 73 6f 20 69 74  e told,.** so it
1b00: 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 72   is omitted ther
1b10: 65 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 23  e.  See ticket #
1b20: 32 36 37 33 2e 0a 2a 2a 0a 2a 2a 20 4c 61 74 65  2673..**.** Late
1b30: 72 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20  r we learn that 
1b40: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 69 73  _XOPEN_SOURCE is
1b50: 20 70 6f 6f 72 6c 79 20 6f 72 20 69 6e 63 6f 72   poorly or incor
1b60: 72 65 63 74 6c 79 0a 2a 2a 20 69 6d 70 6c 65 6d  rectly.** implem
1b70: 65 6e 74 65 64 20 6f 6e 20 73 6f 6d 65 20 73 79  ented on some sy
1b80: 73 74 65 6d 73 2e 20 20 53 6f 20 77 65 20 61 76  stems.  So we av
1b90: 6f 69 64 20 64 65 66 69 6e 69 6e 67 20 69 74 20  oid defining it 
1ba0: 61 74 20 61 6c 6c 0a 2a 2a 20 69 66 20 69 74 20  at all.** if it 
1bb0: 69 73 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e  is already defin
1bc0: 65 64 20 6f 72 20 69 66 20 69 74 20 69 73 20 75  ed or if it is u
1bd0: 6e 6e 65 65 64 65 64 20 62 65 63 61 75 73 65 20  nneeded because 
1be0: 77 65 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 64 6f  we are.** not do
1bf0: 69 6e 67 20 61 20 74 68 72 65 61 64 73 61 66 65  ing a threadsafe
1c00: 20 62 75 69 6c 64 2e 20 20 54 69 63 6b 65 74 20   build.  Ticket 
1c10: 23 32 36 38 31 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  #2681..**.** See
1c20: 20 61 6c 73 6f 20 74 69 63 6b 65 74 20 23 32 37   also ticket #27
1c30: 34 31 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  41..*/.#if !defi
1c40: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
1c50: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
1c60: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
1c70: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
1c80: 29 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45  ) && SQLITE_THRE
1c90: 41 44 53 41 46 45 0a 23 20 20 64 65 66 69 6e 65  ADSAFE.#  define
1ca0: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 35   _XOPEN_SOURCE 5
1cb0: 30 30 20 20 2f 2a 20 4e 65 65 64 65 64 20 74 6f  00  /* Needed to
1cc0: 20 65 6e 61 62 6c 65 20 70 74 68 72 65 61 64 20   enable pthread 
1cd0: 72 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65  recursive mutexe
1ce0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  s */.#endif../*.
1cf0: 2a 2a 20 54 68 65 20 54 43 4c 20 68 65 61 64 65  ** The TCL heade
1d00: 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e 65 65 64  rs are only need
1d10: 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
1d20: 67 20 74 68 65 20 54 43 4c 20 62 69 6e 64 69 6e  g the TCL bindin
1d30: 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  gs..*/.#if defin
1d40: 65 64 28 53 51 4c 49 54 45 5f 54 43 4c 29 20 7c  ed(SQLITE_TCL) |
1d50: 7c 20 64 65 66 69 6e 65 64 28 54 43 4c 53 48 29  | defined(TCLSH)
1d60: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e  .# include <tcl.
1d70: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1d80: 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49   NDEBUG and SQLI
1d90: 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70  TE_DEBUG are opp
1da0: 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75  osites.  It shou
1db0: 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75  ld always be tru
1dc0: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
1dd0: 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69  d(NDEBUG)==!defi
1de0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1df0: 29 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e  ).  If this is n
1e00: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75  ot currently tru
1e10: 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72  e,.** make it tr
1e20: 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f  ue by defining o
1e30: 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45  r undefining NDE
1e40: 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69  BUG..**.** Setti
1e50: 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20  ng NDEBUG makes 
1e60: 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72  the code smaller
1e70: 20 61 6e 64 20 72 75 6e 20 66 61 73 74 65 72 20   and run faster 
1e80: 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65  by disabling the
1e90: 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73 73 65 72  .** number asser
1ea0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
1eb0: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
1ec0: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
1ed0: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
1ee0: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
1ef0: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
1f00: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
1f10: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
1f20: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
1f30: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
1f40: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
1f50: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
1f60: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
1f70: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
1f80: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1f90: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1fa0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
1fb0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
1fc0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
1fd0: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
1fe0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
1ff0: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2000: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2010: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2020: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2030: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2040: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2050: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2060: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2070: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2080: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
2090: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
20a0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
20b0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
20c0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
20d0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
20e0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
20f0: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
2100: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2110: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2120: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2130: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2140: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2150: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2160: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2170: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2180: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
2190: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
21a0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
21b0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
21c0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
21d0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
21e0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
21f0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2200: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2210: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2220: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2230: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2240: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2250: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2260: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2270: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2280: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
2290: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
22a0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
22b0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
22c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
22d0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
22e0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
22f0: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
2300: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2310: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2320: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2330: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2340: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2350: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2360: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2370: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2380: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2390: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
23a0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
23b0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
23c0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
23d0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
23e0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
23f0: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2400: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2410: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2420: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2430: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2440: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2450: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2460: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2470: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2480: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2490: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
24a0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
24b0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
24c0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
24d0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
24e0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
24f0: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2500: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2510: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2520: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2530: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2540: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2550: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2560: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2570: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2580: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2590: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
25a0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
25b0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
25c0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
25d0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
25e0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
25f0: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2600: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2610: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2620: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2630: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2640: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2650: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2660: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2670: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2680: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2690: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
26a0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
26b0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
26c0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
26d0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
26e0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
26f0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2700: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2710: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2720: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2730: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2740: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2750: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2760: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2770: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2780: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2790: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
27a0: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
27b0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
27c0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
27d0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
27e0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
27f0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2800: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2810: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2820: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2830: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2840: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2850: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2860: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2870: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2880: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2890: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
28a0: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
28b0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
28c0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
28d0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
28e0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 6e  chable code then
28f0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
2900: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
2910: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
2920: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2930: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2940: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2950: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
2960: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
2970: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
2980: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
2990: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
29a0: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
29b0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
29c0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
29d0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
29e0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
29f0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
2a00: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2a10: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
2a20: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
2a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
2a40: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
2a50: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
2a60: 74 20 69 73 20 61 20 69 6e 74 65 67 65 72 20 74  t is a integer t
2a70: 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  hat is too large
2a80: 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32  .** to fit in 32
2a90: 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63  -bits.  This mac
2aa0: 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
2ab0: 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73  e of various tes
2ac0: 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f  tcase().** macro
2ad0: 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  s to verify that
2ae0: 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20   we have tested 
2af0: 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65  SQLite for large
2b00: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a  -file support..*
2b10: 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47  /.#define IS_BIG
2b20: 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e  _INT(X)  (((X)&~
2b30: 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (i64)0xffffffff)
2b40: 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  !=0)../*.** The 
2b50: 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29  macro unlikely()
2b60: 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20   is a hint that 
2b70: 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c  surrounds a bool
2b80: 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  ean.** expressio
2b90: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
2ba0: 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20  y false.  Macro 
2bb0: 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e  likely() surroun
2bc0: 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20  ds.** a boolean 
2bd0: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
2be0: 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
2bf0: 20 20 47 43 43 20 69 73 20 61 62 6c 65 20 74 6f    GCC is able to
2c00: 0a 2a 2a 20 75 73 65 20 74 68 65 73 65 20 68 69  .** use these hi
2c10: 6e 74 73 20 74 6f 20 67 65 6e 65 72 61 74 65 20  nts to generate 
2c20: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 73 6f 6d  better code, som
2c30: 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69 66 20 64  etimes..*/.#if d
2c40: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2c50: 20 26 26 20 30 0a 23 20 64 65 66 69 6e 65 20 6c   && 0.# define l
2c60: 69 6b 65 6c 79 28 58 29 20 20 20 20 5f 5f 62 75  ikely(X)    __bu
2c70: 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29  iltin_expect((X)
2c80: 2c 31 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c  ,1).# define unl
2c90: 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62 75 69 6c  ikely(X)  __buil
2ca0: 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c 30  tin_expect((X),0
2cb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
2cc0: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 21 21   likely(X)    !!
2cd0: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c  (X).# define unl
2ce0: 69 6b 65 6c 79 28 58 29 20 20 21 21 28 58 29 0a  ikely(X)  !!(X).
2cf0: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65  #endif..#include
2d00: 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e   "sqlite3.h".#in
2d10: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
2d20: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
2d30: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
2d40: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
2d50: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
2d60: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
2d70: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
2d80: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
2d90: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
2da0: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
2db0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
2dc0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
2dd0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
2de0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
2df0: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
2e00: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
2e10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
2e20: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
2e30: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
2e40: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
2e50: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
2e60: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
2e70: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
2e80: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
2e90: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
2ea0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
2eb0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
2ec0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
2ed0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
2ee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2ef0: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
2f00: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
2f10: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
2f20: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
2f30: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
2f40: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
2f50: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
2f60: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2f70: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
2f80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
2f90: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
2fa0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
2fb0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
2fc0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
2fd0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
2fe0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
2ff0: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
3000: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
3010: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
3020: 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a  e C compiler .**
3030: 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73   to omit code us
3040: 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65  ed by TEMP table
3050: 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20  s without messy 
3060: 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e  #ifndef statemen
3070: 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ts..*/.#ifdef SQ
3080: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
3090: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
30a0: 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65  MPDB 1.#else.#de
30b0: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
30c0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
30d0: 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61   The "file forma
30e0: 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20  t" number is an 
30f0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
3100: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
3110: 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45  ever.** the VDBE
3120: 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d  -level file form
3130: 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65  at changes.  The
3140: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
3150: 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20  s define the.** 
3160: 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65  the default file
3170: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20   format for new 
3180: 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68  databases and th
3190: 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66  e maximum file f
31a0: 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68  ormat.** that th
31b0: 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65  e library can re
31c0: 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ad..*/.#define S
31d0: 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46  QLITE_MAX_FILE_F
31e0: 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20  ORMAT 4.#ifndef 
31f0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
3200: 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66  ILE_FORMAT.# def
3210: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
3220: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  LT_FILE_FORMAT 4
3230: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
3240: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3250: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65   triggers are re
3260: 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75  cursive by defau
3270: 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  lt.  This can be
3280: 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72  .** changed at r
3290: 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20  un-time using a 
32a0: 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64  pragma..*/.#ifnd
32b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
32c0: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
32d0: 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51  GERS.# define SQ
32e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
32f0: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20  URSIVE_TRIGGERS 
3300: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3310: 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c  Provide a defaul
3320: 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49  t value for SQLI
3330: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e  TE_TEMP_STORE in
3340: 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20   case it is not 
3350: 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20  specified.** on 
3360: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
3370: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3380: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20  TE_TEMP_STORE.# 
3390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
33a0: 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69  MP_STORE 1.#endi
33b0: 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65  f../*.** GCC doe
33c0: 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65  s not define the
33d0: 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72   offsetof() macr
33e0: 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20  o so we'll have 
33f0: 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73  to do it.** ours
3400: 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  elves..*/.#ifnde
3410: 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69  f offsetof.#defi
3420: 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55  ne offsetof(STRU
3430: 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69  CTURE,FIELD) ((i
3440: 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54  nt)((char*)&((ST
3450: 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45  RUCTURE*)0)->FIE
3460: 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  LD)).#endif../*.
3470: 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  ** Check to see 
3480: 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20  if this machine 
3490: 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59  uses EBCDIC.  (Y
34a0: 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f  es, believe it o
34b0: 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20  r.** not, there 
34c0: 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e  are still machin
34d0: 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61  es out there tha
34e0: 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a  t use EBCDIC.).*
34f0: 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33  /.#if 'A' == '\3
3500: 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  01'.# define SQL
3510: 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c  ITE_EBCDIC 1.#el
3520: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
3530: 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69  TE_ASCII 1.#endi
3540: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72  f../*.** Integer
3550: 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73  s of known sizes
3560: 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66  .  These typedef
3570: 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  s might change f
3580: 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73  or architectures
3590: 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69  .** where the si
35a0: 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72  zes very.  Prepr
35b0: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61  ocessor macros a
35c0: 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20  re available so 
35d0: 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65  that the.** type
35e0: 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69  s can be conveni
35f0: 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20  ently redefined 
3600: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e  at compile-type.
3610: 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a    Like this:.**.
3620: 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d  **         cc '-
3630: 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f  DUINTPTR_TYPE=lo
3640: 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e  ng long int' ...
3650: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  .*/.#ifndef UINT
3660: 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  32_TYPE.# ifdef 
3670: 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20  HAVE_UINT32_T.# 
3680: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
3690: 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65  YPE uint32_t.# e
36a0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
36b0: 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT32_TYPE unsign
36c0: 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  ed int.# endif.#
36d0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
36e0: 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65  NT16_TYPE.# ifde
36f0: 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a  f HAVE_UINT16_T.
3700: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
3710: 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23  _TYPE uint16_t.#
3720: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
3730: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69  UINT16_TYPE unsi
3740: 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23  gned short int.#
3750: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3760: 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  fndef INT16_TYPE
3770: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e  .# ifdef HAVE_IN
3780: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
3790: 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36  INT16_TYPE int16
37a0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
37b0: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73  ine INT16_TYPE s
37c0: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
37d0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
37e0: 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64  UINT8_TYPE.# ifd
37f0: 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a  ef HAVE_UINT8_T.
3800: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
3810: 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65  TYPE uint8_t.# e
3820: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
3830: 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  NT8_TYPE unsigne
3840: 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23  d char.# endif.#
3850: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
3860: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
3870: 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64  HAVE_INT8_T.#  d
3880: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
3890: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
38a0: 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50   define INT8_TYP
38b0: 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  E signed char.# 
38c0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
38d0: 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  ndef LONGDOUBLE_
38e0: 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f  TYPE.# define LO
38f0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f  NGDOUBLE_TYPE lo
3900: 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66  ng double.#endif
3910: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3920: 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20  int64 i64;      
3930: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69      /* 8-byte si
3940: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3950: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75  typedef sqlite_u
3960: 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20  int64 u64;      
3970: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73     /* 8-byte uns
3980: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3990: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f  .typedef UINT32_
39a0: 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20  TYPE u32;       
39b0: 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e      /* 4-byte un
39c0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
39d0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36  /.typedef UINT16
39e0: 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20  _TYPE u16;      
39f0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75       /* 2-byte u
3a00: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
3a10: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
3a20: 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20  _TYPE i16;      
3a30: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
3a40: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3a50: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f  /.typedef UINT8_
3a60: 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20  TYPE u8;        
3a70: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75       /* 1-byte u
3a80: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
3a90: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f  */.typedef INT8_
3aa0: 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20  TYPE i8;        
3ab0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
3ac0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3ad0: 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  /../*.** SQLITE_
3ae0: 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34  MAX_U32 is a u64
3af0: 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69   constant that i
3b00: 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36  s the maximum u6
3b10: 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20  4 value.** that 
3b20: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e  can be stored in
3b30: 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c   a u32 without l
3b40: 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68  oss of data.  Th
3b50: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78  e value.** is 0x
3b60: 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66  00000000ffffffff
3b70: 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f  .  But because o
3b80: 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65  f quirks of some
3b90: 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a   compilers, we.*
3ba0: 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66  * have to specif
3bb0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74  y the value in t
3bc0: 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76  he less intuitiv
3bd0: 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a  e manner shown:.
3be0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
3bf0: 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75  E_MAX_U32  ((((u
3c00: 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f  64)1)<<32)-1)../
3c10: 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
3c20: 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
3c30: 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65  estimates of the
3c40: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
3c50: 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72  in a.** table or
3c60: 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73   index.  This is
3c70: 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74   an unsigned int
3c80: 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20  eger type.  For 
3c90: 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20  99.9% of.** the 
3ca0: 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20  world, a 32-bit 
3cb0: 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69  integer is suffi
3cc0: 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34  cient.  But a 64
3cd0: 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
3ce0: 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63  can be used at c
3cf0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64  ompile-time if d
3d00: 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  esired..*/.#ifde
3d10: 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53  f SQLITE_64BIT_S
3d20: 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36  TATS. typedef u6
3d30: 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a  4 tRowcnt;    /*
3d40: 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20   64-bit only if 
3d50: 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d  requested at com
3d60: 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c  pile-time */.#el
3d70: 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20  se. typedef u32 
3d80: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33  tRowcnt;    /* 3
3d90: 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66  2-bit is the def
3da0: 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  ault */.#endif..
3db0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
3dc0: 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
3dd0: 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73  r the machine is
3de0: 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65   big or little e
3df0: 6e 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61  ndian,.** evalua
3e00: 74 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  ted at runtime..
3e10: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
3e20: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f  _AMALGAMATION.co
3e30: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
3e40: 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78  ne = 1;.#else.ex
3e50: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
3e60: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69  qlite3one;.#endi
3e70: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69 33  f.#if defined(i3
3e80: 38 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  86) || defined(_
3e90: 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69  _i386__) || defi
3ea0: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20  ned(_M_IX86)\.  
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ec0: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65             || de
3ed0: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20  fined(__x86_64) 
3ee0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
3ef0: 5f 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  _64__).# define 
3f00: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
3f10: 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53      0.# define S
3f20: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
3f30: 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 1.# define SQ
3f40: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
3f50: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45    SQLITE_UTF16LE
3f60: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3f70: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
3f80: 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26      (*(char *)(&
3f90: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a  sqlite3one)==0).
3fa0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3fb0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28  LITTLEENDIAN (*(
3fc0: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
3fd0: 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e  one)==1).# defin
3fe0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
3ff0: 54 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47  TIVE (SQLITE_BIG
4000: 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54  ENDIAN?SQLITE_UT
4010: 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46  F16BE:SQLITE_UTF
4020: 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  16LE).#endif../*
4030: 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f  .** Constants fo
4040: 72 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e  r the largest an
4050: 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69  d smallest possi
4060: 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65  ble 64-bit signe
4070: 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54  d integers..** T
4080: 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20  hese macros are 
4090: 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b  designed to work
40a0: 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f   correctly on bo
40b0: 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34  th 32-bit and 64
40c0: 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  -bit.** compiler
40d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41  s..*/.#define LA
40e0: 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78  RGEST_INT64  (0x
40f0: 66 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29  ffffffff|(((i64)
4100: 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
4110: 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45  ).#define SMALLE
4120: 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29  ST_INT64 (((i64)
4130: 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e  -1) - LARGEST_IN
4140: 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75  T64)../* .** Rou
4150: 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74  nd up a number t
4160: 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65  o the next large
4170: 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e  r multiple of 8.
4180: 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a    This is used.*
4190: 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74  * to force 8-byt
41a0: 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36  e alignment on 6
41b0: 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75  4-bit architectu
41c0: 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
41d0: 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28  ROUND8(x)     ((
41e0: 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  (x)+7)&~7)../*.*
41f0: 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20  * Round down to 
4200: 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74  the nearest mult
4210: 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65  iple of 8.*/.#de
4220: 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28  fine ROUNDDOWN8(
4230: 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a  x) ((x)&~7)../*.
4240: 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  ** Assert that t
4250: 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20  he pointer X is 
4260: 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d  aligned to an 8-
4270: 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20  byte boundary.  
4280: 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73  This.** macro is
4290: 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69   used only withi
42a0: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65  n assert() to ve
42b0: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f  rify that the co
42c0: 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61  de gets.** all a
42d0: 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63  lignment restric
42e0: 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a  tions correct..*
42f0: 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20  *.** Except, if 
4300: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4310: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20  IGNED_MALLOC is 
4320: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68  defined, then th
4330: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
4340: 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65  malloc() impleme
4350: 6e 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75  ntion might retu
4360: 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69  rn us 4-byte ali
4370: 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73  gned.** pointers
4380: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
4390: 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62   only verify 4-b
43a0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a  yte alignment..*
43b0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
43c0: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
43d0: 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45  ALLOC.# define E
43e0: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
43f0: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
4400: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
4410: 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  0)&3)==0).#else.
4420: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
4430: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
4440: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
4450: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d   - (char*)0)&7)=
4460: 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  =0).#endif.../*.
4470: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
4480: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
4490: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
44a0: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
44b0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
44c0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
44d0: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
44e0: 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  e. .**.** The sq
44f0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
4500: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
4510: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
4520: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
4530: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
4540: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
4550: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
4560: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
4570: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
4580: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
4590: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
45a0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
45b0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
45c0: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
45d0: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
45e0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
45f0: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
4600: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
4610: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
4620: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
4630: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46  ler {.  int (*xF
4640: 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29  unc)(void *,int)
4650: 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63  ;  /* The busy c
4660: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
4670: 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20  d *pArg;        
4680: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
4690: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
46a0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
46b0: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
46c0: 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65        /* Increme
46d0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62  nted with each b
46e0: 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a  usy call */.};..
46f0: 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68  /*.** Name of th
4700: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
4710: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61  e table.  The ma
4720: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
4730: 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63  ble.** is a spec
4740: 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68  ial table that h
4750: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61  olds the names a
4760: 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  nd attributes of
4770: 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62   all.** user tab
4780: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
4790: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
47a0: 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73  ER_NAME       "s
47b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64  qlite_master".#d
47c0: 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45  efine TEMP_MASTE
47d0: 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f  R_NAME  "sqlite_
47e0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a  temp_master"../*
47f0: 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67  .** The root-pag
4800: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
4810: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a  database table..
4820: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
4830: 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a  R_ROOT       1..
4840: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f  /*.** The name o
4850: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  f the schema tab
4860: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
4870: 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20  CHEMA_TABLE(x)  
4880: 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26  ((!OMIT_TEMPDB)&
4890: 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53  &(x==1)?TEMP_MAS
48a0: 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f  TER_NAME:MASTER_
48b0: 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63  NAME)../*.** A c
48c0: 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f  onvenience macro
48d0: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
48e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
48f0: 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72  ents in.** an ar
4900: 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ray..*/.#define 
4910: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20  ArraySize(X)    
4920: 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29  ((int)(sizeof(X)
4930: 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a  /sizeof(X[0]))).
4940: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
4950: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
4960: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
4970: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
4980: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
4990: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
49a0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
49b0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
49c0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
49d0: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
49e0: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
49f0: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
4a00: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
4a10: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
4a20: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
4a30: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
4a40: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
4a50: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
4a60: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
4a70: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
4a80: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
4a90: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
4aa0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
4ab0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
4ac0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
4ad0: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
4ae0: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
4af0: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
4b00: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
4b10: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
4b20: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
4b30: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
4b40: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
4b50: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
4b60: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
4b70: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
4b80: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
4b90: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
4ba0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
4bb0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
4bc0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
4bd0: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
4be0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
4bf0: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
4c00: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
4c10: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
4c20: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
4c30: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
4c40: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
4c50: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
4c60: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
4c70: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
4c80: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
4c90: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
4ca0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
4cb0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
4cc0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
4cd0: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
4ce0: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
4cf0: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
4d00: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
4d10: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
4d20: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
4d30: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
4d40: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
4d50: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
4d60: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
4d70: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
4d80: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
4d90: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
4da0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
4db0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
4dc0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
4dd0: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
4de0: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
4df0: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
4e00: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
4e10: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
4e20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
4e30: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
4e40: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
4e50: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
4e60: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
4e70: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
4e80: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
4e90: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
4ea0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
4eb0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
4ec0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
4ed0: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
4ee0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
4ef0: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
4f00: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
4f10: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
4f20: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
4f30: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
4f40: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
4f50: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
4f60: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
4f70: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
4f80: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
4f90: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
4fa0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
4fb0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
4fc0: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
4fd0: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
4fe0: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
4ff0: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
5000: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
5010: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
5020: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
5030: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
5040: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5050: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
5060: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
5070: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
5080: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
5090: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
50a0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
50b0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
50c0: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
50d0: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
50e0: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
50f0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
5100: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
5110: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
5120: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
5130: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
5140: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
5150: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
5160: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
5170: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
5180: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
5190: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
51a0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
51b0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
51c0: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
51d0: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
51e0: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
51f0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
5200: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
5210: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
5220: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
5230: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
5240: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
5250: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
5260: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
5270: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
5280: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
5290: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
52a0: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
52b0: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
52c0: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
52d0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
52e0: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
52f0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
5300: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
5310: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
5320: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
5330: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
5340: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
5350: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
5360: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
5370: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
5380: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
5390: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
53a0: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
53b0: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
53c0: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
53d0: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
53e0: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
53f0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
5400: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
5410: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5420: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
5430: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
5440: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
5450: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
5460: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
5470: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
5480: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
5490: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
54a0: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
54b0: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
54c0: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
54d0: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
54e0: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
54f0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
5500: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5510: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
5520: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
5530: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
5540: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5550: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
5560: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
5570: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
5580: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
5590: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
55a0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
55b0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
55c0: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
55d0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
55e0: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
55f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5600: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
5610: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
5620: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
5630: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
5640: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
5650: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
5660: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
5670: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
5680: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
5690: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
56a0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
56b0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
56c0: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
56d0: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
56e0: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
56f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5700: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
5710: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
5720: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
5730: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
5740: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
5750: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
5760: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
5770: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
5780: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
5790: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
57a0: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
57b0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
57c0: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
57d0: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
57e0: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
57f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5800: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
5810: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
5820: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
5830: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5840: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
5850: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5860: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
5870: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
5880: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
5890: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
58a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
58b0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
58c0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
58d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
58e0: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
58f0: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
5900: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
5910: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
5920: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
5930: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 50 6c  f struct WherePl
5940: 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a 74 79  an WherePlan;.ty
5950: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
5960: 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f  reInfo WhereInfo
5970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5980: 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72   WhereLevel Wher
5990: 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20 44  eLevel;../*.** D
59a0: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
59b0: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
59c0: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
59d0: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
59e0: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
59f0: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
5a00: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
5a10: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
5a20: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
5a30: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
5a40: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
5a50: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
5a60: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
5a70: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
5a80: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
5a90: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
5aa0: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
5ab0: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
5ac0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
5ad0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
5ae0: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
5af0: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
5b00: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
5b10: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5b20: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
5b30: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
5b40: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
5b50: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
5b60: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
5b70: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
5b80: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
5b90: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
5ba0: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
5bb0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
5bc0: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
5bd0: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
5be0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
5bf0: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
5c00: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
5c10: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
5c20: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
5c30: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
5c40: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
5c50: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
5c60: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
5c70: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
5c80: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 69  e file */.  u8 i
5c90: 6e 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  nTrans;         
5ca0: 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72 69 74 61   /* 0: not writa
5cb0: 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e 73 61 63  ble.  1: Transac
5cc0: 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65 63 6b 70  tion.  2: Checkp
5cd0: 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20 73 61 66  oint */.  u8 saf
5ce0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
5cf0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
5d00: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
5d10: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63   to disk */.  Sc
5d20: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
5d30: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
5d40: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
5d50: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
5d60: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
5d70: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
5d80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
5d90: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
5da0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
5db0: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
5dc0: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
5dd0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
5de0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
5df0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
5e00: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
5e10: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
5e20: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
5e30: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
5e40: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
5e50: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
5e60: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
5e70: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
5e80: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
5e90: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
5ea0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
5eb0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
5ec0: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
5ed0: 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65   .** Schema obje
5ee0: 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  cts are automati
5ef0: 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65  cally deallocate
5f00: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
5f10: 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65  Btree that.** re
5f20: 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73  ferences them is
5f30: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68   destroyed.   Th
5f40: 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73  e TEMP Schema is
5f50: 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20   manually freed 
5f60: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  by.** sqlite3_cl
5f70: 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68  ose()..*.** A th
5f80: 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c  read must be hol
5f90: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
5fa0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
5fb0: 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72  g Btree in order
5fc0: 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63  .** to access Sc
5fd0: 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54  hema content.  T
5fe0: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
5ff0: 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74   the thread must
6000: 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64   also be.** hold
6010: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
6020: 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65  he sqlite3 conne
6030: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68  ction pointer th
6040: 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65  at owns the Btre
6050: 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50  e..** For a TEMP
6060: 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68   Schema, only th
6070: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  e connection mut
6080: 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  ex is required..
6090: 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61  */.struct Schema
60a0: 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f   {.  int schema_
60b0: 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74  cookie;   /* Dat
60c0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72  abase schema ver
60d0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
60e0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
60f0: 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20  nt iGeneration; 
6100: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f      /* Generatio
6110: 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72  n counter.  Incr
6120: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
6130: 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61  h change */.  Ha
6140: 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20  sh tblHash;     
6150: 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73     /* All tables
6160: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
6170: 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61   */.  Hash idxHa
6180: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
6190: 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65  l (named) indice
61a0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
61b0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67  e */.  Hash trig
61c0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
61d0: 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65  ll triggers inde
61e0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
61f0: 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20   Hash fkeyHash; 
6200: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72        /* All for
6210: 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66  eign keys by ref
6220: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61  erenced table na
6230: 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  me */.  Table *p
6240: 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20  SeqTab;      /* 
6250: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
6260: 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  nce table used b
6270: 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  y AUTOINCREMENT 
6280: 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72  */.  u8 file_for
6290: 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68  mat;      /* Sch
62a0: 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ema format versi
62b0: 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  on for this file
62c0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
62d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
62e0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
62f0: 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73   by this databas
6300: 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  e */.  u16 flags
6310: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
6320: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
6330: 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61  with this schema
6340: 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f   */.  int cache_
6350: 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75  size;      /* Nu
6360: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
6370: 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68   use in the cach
6380: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  e */.};../*.** T
6390: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
63a0: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
63b0: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
63c0: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44  its in the .** D
63d0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
63e0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
63f0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
6400: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
6410: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6420: 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  a->flags&(P))==(
6430: 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61  P)).#define DbHa
6440: 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49  sAnyProperty(D,I
6450: 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b  ,P)  (((D)->aDb[
6460: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  I].pSchema->flag
6470: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
6480: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
6490: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
64a0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
64b0: 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
64c0: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
64d0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
64e0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
64f0: 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
6500: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
6510: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
6520: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
6530: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
6540: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
6550: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
6560: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
6570: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
6580: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
6590: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
65a0: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
65b0: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
65c0: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
65d0: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
65e0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
65f0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
6600: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
6610: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
6620: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
6630: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
6640: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
6650: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
6660: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
6670: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
6680: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
6690: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
66a0: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
66b0: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
66c0: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
66d0: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
66e0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
66f0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
6700: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
6710: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
6720: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
6730: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
6740: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
6750: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
6760: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
6770: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
6780: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
6790: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
67a0: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
67b0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
67c0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
67d0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
67e0: 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a  ER_DEPTH+1)../*.
67f0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
6800: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
6810: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
6820: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
6830: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
6840: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
6850: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
6860: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
6870: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
6880: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
6890: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
68a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
68b0: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
68c0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
68d0: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
68e0: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
68f0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
6900: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
6910: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
6920: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
6930: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
6940: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
6950: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
6960: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
6970: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
6980: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
6990: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
69a0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
69b0: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
69c0: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
69d0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
69e0: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
69f0: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
6a00: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
6a10: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
6a20: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
6a30: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
6a40: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
6a50: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
6a60: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
6a70: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
6a80: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
6a90: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
6aa0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
6ab0: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
6ac0: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
6ad0: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
6ae0: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
6af0: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
6b00: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
6b10: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
6b20: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
6b30: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
6b40: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
6b50: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
6b60: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
6b70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
6b80: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
6b90: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
6ba0: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
6bb0: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
6bc0: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
6bd0: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
6be0: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
6bf0: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
6c00: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20  okaside {.  u16 
6c10: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
6c20: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
6c30: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
6c40: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61  tes */.  u8 bEna
6c50: 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
6c60: 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73   /* False to dis
6c70: 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69  able new lookasi
6c80: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  de allocations *
6c90: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
6ca0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
6cb0: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
6cc0: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
6cd0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
6ce0: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20    int nOut;     
6cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6d00: 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63  ber of buffers c
6d10: 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
6d20: 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78   out */.  int mx
6d30: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
6d40: 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d    /* Highwater m
6d50: 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a  ark for nOut */.
6d60: 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b    int anStat[3];
6d70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20            /* 0: 
6d80: 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d  hits.  1: size m
6d90: 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20  isses.  2: full 
6da0: 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b  misses */.  Look
6db0: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
6dc0: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
6dd0: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
6de0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
6df0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
6e00: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
6e10: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
6e20: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
6e30: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
6e40: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
6e50: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
6e60: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
6e70: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
6e80: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
6e90: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
6ea0: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
6eb0: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
6ec0: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
6ed0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
6ee0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
6ef0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
6f00: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  ns..**.** Hash e
6f10: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
6f20: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
6f30: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
6f40: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
6f50: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
6f60: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48  n the FuncDef.pH
6f70: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74  ash chain..*/.st
6f80: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
6f90: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
6fa0: 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  23];       /* Ha
6fb0: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
6fc0: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ctions */.};../*
6fd0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
6fe0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
6ff0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
7000: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7010: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
7020: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
7030: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
7040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
7050: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
7060: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
7070: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
7080: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
7090: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
70a0: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
70b0: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
70c0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
70d0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
70e0: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
70f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
7100: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
7110: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
7120: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
7130: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
7140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
7150: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
7160: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7180: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
7190: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
71a0: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
71b0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
71c0: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
71d0: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
71e0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
71f0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
7200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
7210: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
7220: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
7230: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 75 6e 73 69  above) */.  unsi
7240: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
7250: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
7260: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
7270: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
7280: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
7290: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
72a0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
72b0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
72c0: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
72d0: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
72f0: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
7300: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
7310: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
7320: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
7330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
7340: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
7350: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
7360: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74  ions */.  u8 aut
7370: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
7380: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
7390: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
73a0: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
73b0: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
73c0: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
73d0: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
73e0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
73f0: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
7400: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
7410: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
7420: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
7430: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
7440: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
7450: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
7460: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
7470: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
7480: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
7490: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
74a0: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
74b0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
74c0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
74d0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
74e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
74f0: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
7500: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
7510: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
7520: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
7530: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
7540: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
7550: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
7560: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
7570: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
7580: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
7590: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
75a0: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
75b0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
75c0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
75d0: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
75e0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
75f0: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7610: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
7620: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
7630: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
7640: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7660: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
7670: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
7680: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
7690: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
76a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
76b0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
76c0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
76d0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
76e0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
76f0: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
7700: 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  its */.  struct 
7710: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
7720: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
7730: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
7740: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
7750: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
7760: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
7770: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
7780: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
7790: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
77a0: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
77c0: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
77d0: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
77e0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
77f0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
7800: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
7810: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
7820: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
7830: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
7840: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
7850: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
7860: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
7870: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
7880: 69 74 3b 0a 20 20 69 6e 74 20 61 63 74 69 76 65  it;.  int active
7890: 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20  VdbeCnt;        
78a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
78b0: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
78c0: 20 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20   executing */.  
78d0: 69 6e 74 20 77 72 69 74 65 56 64 62 65 43 6e 74  int writeVdbeCnt
78e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
78f0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
7900: 65 20 56 44 42 45 73 20 74 68 61 74 20 61 72 65  e VDBEs that are
7910: 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69 6e   writing */.  in
7920: 74 20 76 64 62 65 45 78 65 63 43 6e 74 3b 20 20  t vdbeExecCnt;  
7930: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7940: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
7950: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
7960: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78  c() */.  int nEx
7970: 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  tension;        
7980: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7990: 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e   of loaded exten
79a0: 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20  sions */.  void 
79b0: 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  **aExtension;   
79c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
79d0: 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72  y of shared libr
79e0: 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20  ary handles */. 
79f0: 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28   void (*xTrace)(
7a00: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
7a10: 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72  *);        /* Tr
7a20: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
7a30: 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72    void *pTraceAr
7a40: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7a60: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74  rgument to the t
7a70: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
7a80: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
7a90: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
7aa0: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
7ab0: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
7ac0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
7ad0: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7af0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
7b00: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
7b10: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f  n */.  void *pCo
7b20: 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20  mmitArg;        
7b30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
7b40: 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43  ment to xCommitC
7b50: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a  allback() */   .
7b60: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
7b70: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
7b80: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
7b90: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
7ba0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
7bb0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
7bc0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7bd0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
7be0: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a  allback() */   .
7bf0: 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61    void (*xRollba
7c00: 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  ckCallback)(void
7c10: 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61  *); /* Invoked a
7c20: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
7c30: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61  */.  void *pUpda
7c40: 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a  teArg;.  void (*
7c50: 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
7c60: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
7c70: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
7c80: 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34  ar*,sqlite_int64
7c90: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
7ca0: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
7cb0: 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29   (*xWalCallback)
7cc0: 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33  (void *, sqlite3
7cd0: 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
7ce0: 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
7cf0: 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a  pWalArg;.#endif.
7d00: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
7d10: 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  ded)(void*,sqlit
7d20: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
7d30: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
7d40: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
7d50: 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69  ed16)(void*,sqli
7d60: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
7d70: 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  p,const void*);.
7d80: 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65    void *pCollNee
7d90: 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65  dedArg;.  sqlite
7da0: 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20  3_value *pErr;  
7db0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7dc0: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
7dd0: 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  sage */.  char *
7de0: 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20  zErrMsg;        
7df0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7e00: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
7e10: 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f  sage (UTF-8 enco
7e20: 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ded) */.  char *
7e30: 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20  zErrMsg16;      
7e40: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7e50: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
7e60: 73 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63  sage (UTF-16 enc
7e70: 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e  oded) */.  union
7e80: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
7e90: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
7ea0: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
7eb0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
7ec0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
7ed0: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
7ee0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
7ef0: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
7f00: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
7f10: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
7f20: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
7f30: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
7f40: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
7f50: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7f60: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
7f70: 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f   int (*xAuth)(vo
7f80: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
7f90: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
7fa0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
7fb0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20  t char*);.      
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
7fe0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
7ff0: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
8000: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
8010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8020: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
8030: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
8040: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
8050: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
8060: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
8070: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
8080: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
8090: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
80a0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
80b0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
80c0: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
80d0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
80e0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
80f0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
8100: 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  int nProgressOps
8110: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
8120: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
8130: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
8140: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
8150: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
8160: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
8170: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
8180: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
8190: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
81a0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
81b0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
81c0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
81d0: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
81e0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
81f0: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
8200: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
8210: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
8220: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
8230: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
8240: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
8250: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
8260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
8270: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
8280: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
8290: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
82a0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
82b0: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
82c0: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
82d0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
82e0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63  */.#endif.  Func
82f0: 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20  DefHash aFunc;  
8300: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
8310: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
8320: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
8330: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
8340: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
8350: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
8360: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
8370: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
8380: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
8390: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
83a0: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
83b0: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
83c0: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
83d0: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
83e0: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
83f0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
8400: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
8410: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
8420: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
8430: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
8440: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
8450: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
8460: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
8470: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
8480: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
8490: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
84a0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
84b0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
84c0: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
84d0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
84e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
84f0: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
8500: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
8510: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
8520: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
8530: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
8540: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
8550: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
8560: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
8570: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
8580: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
8590: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
85a0: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
85b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
85c0: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
85d0: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
85e0: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
85f0: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
8600: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
8610: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
8620: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
8630: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
8640: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
8650: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
8660: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
8670: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
8680: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
8690: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
86a0: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
86b0: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
86c0: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
86d0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
86e0: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
86f0: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
8700: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
8710: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
8720: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
8730: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
8740: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
8750: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
8760: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
8770: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
8780: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
8790: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
87a0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
87b0: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
87c0: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
87d0: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
87e0: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
87f0: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
8800: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
8810: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
8820: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8840: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
8850: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
8860: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
8870: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
8880: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
8890: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
88a0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
88b0: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
88c0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
88d0: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
88e0: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
88f0: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
8900: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
8910: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
8920: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
8930: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e  e..*/.#define EN
8940: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
8950: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
8960: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
8970: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
8980: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
8990: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
89a0: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
89b0: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
89c0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
89d0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
89e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
89f0: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
8a00: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
8a10: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
8a20: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
8a30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
8a40: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
8a50: 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77  0000004  /* Show
8a60: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
8a70: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
8a80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
8a90: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
8aa0: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 53 68 6f  00000008  /* Sho
8ab0: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
8ac0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
8ad0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
8ae0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 31  s      0x0000001
8af0: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
8b00: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
8b10: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
8b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b40: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
8b50: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
8b60: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b90: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
8ba0: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
8bb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8bc0: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
8bd0: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
8be0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
8bf0: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
8c00: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8c30: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
8c40: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
8c50: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
8c60: 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30  e       0x000000
8c70: 34 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  40  /* Debug pri
8c80: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
8c90: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
8ca0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
8cb0: 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 30 38  ing    0x0000008
8cc0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
8cd0: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
8ce0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
8cf0: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
8d00: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 31 30  ema    0x0000010
8d10: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  0  /* OK to upda
8d20: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
8d30: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8d50: 20 20 30 78 30 30 30 30 30 32 30 30 20 20 55 6e    0x00000200  Un
8d60: 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
8d70: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
8d80: 63 6b 73 20 20 20 30 78 30 30 30 30 30 34 30 30  cks   0x00000400
8d90: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
8da0: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
8db0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
8dc0: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
8dd0: 6d 6d 69 74 74 65 64 20 30 78 30 30 30 30 38 30  mmitted 0x000080
8de0: 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64  0  /* For shared
8df0: 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
8e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
8e10: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
8e20: 30 30 30 31 30 30 30 20 20 2f 2a 20 43 72 65 61  0001000  /* Crea
8e30: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
8e40: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
8e50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
8e60: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
8e70: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 55 73 65  00002000  /* Use
8e80: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
8e90: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
8ea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
8eb0: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
8ec0: 30 30 34 30 30 30 20 20 2f 2a 20 55 73 65 20 66  004000  /* Use f
8ed0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
8ee0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
8ef0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76  ine SQLITE_Recov
8f00: 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 30  eryMode   0x0000
8f10: 38 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20  8000  /* Ignore 
8f20: 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f  schema errors */
8f30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8f40: 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30  ReverseOrder   0
8f50: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 52 65  x00010000  /* Re
8f60: 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20  verse unordered 
8f70: 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69  SELECTs */.#defi
8f80: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69  ne SQLITE_RecTri
8f90: 67 67 65 72 73 20 20 20 20 30 78 30 30 30 32 30  ggers    0x00020
8fa0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72  000  /* Enable r
8fb0: 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
8fc0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8fd0: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
8fe0: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
8ff0: 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67  * Enforce foreig
9000: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
9010: 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s  */.#define SQ
9020: 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20  LITE_AutoIndex  
9030: 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20      0x00080000  
9040: 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61  /* Enable automa
9050: 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  tic indexes */.#
9060: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
9070: 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30  eferBuiltin  0x0
9080: 30 31 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66  0100000  /* Pref
9090: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
90a0: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66  in funcs */.#def
90b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
90c0: 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 32 30  xtension  0x0020
90d0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
90e0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a  load_extension *
90f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9100: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
9110: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 54  0x00400000  /* T
9120: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
9130: 69 67 67 65 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  iggers */../*.**
9140: 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c   Bits of the sql
9150: 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20  ite3.dbOptFlags 
9160: 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75  field that are u
9170: 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  sed by the.** sq
9180: 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
9190: 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
91a0: 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
91b0: 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20  ,...) interface 
91c0: 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c  to.** selectivel
91d0: 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75  y disable variou
91e0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
91f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
9200: 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65  TE_QueryFlattene
9210: 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75  r 0x0001   /* Qu
9220: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
9230: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9240: 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20  _ColumnCache    
9250: 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75  0x0002   /* Colu
9260: 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  mn cache */.#def
9270: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
9280: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
9290: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
92a0: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
92b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
92c0: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
92d0: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
92e0: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
92f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9300: 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20 20  _IdxRealAsInt   
9310: 30 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f 72  0x0010   /* Stor
9320: 65 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69 6e  e REAL as INT in
9330: 20 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65 66   indices */.#def
9340: 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69  ine SQLITE_Disti
9350: 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30  nctOpt    0x0020
9360: 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75     /* DISTINCT u
9370: 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a  sing indexes */.
9380: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
9390: 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78  overIdxScan   0x
93a0: 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69  0040   /* Coveri
93b0: 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a  ng index scans *
93c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
93d0: 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20  _OrderByIdxJoin 
93e0: 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45  0x0080   /* ORDE
93f0: 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69  R BY of joins vi
9400: 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  a index */.#defi
9410: 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f  ne SQLITE_SubqCo
9420: 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20  routine  0x0100 
9430: 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75    /* Evaluate su
9440: 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f  bqueries as coro
9450: 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e  utines */.#defin
9460: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
9470: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
9480: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
9490: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
94a0: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
94b0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
94c0: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
94d0: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
94e0: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e  isabled..*/.#ifn
94f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9500: 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65  BUILTIN_TEST.#de
9510: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
9520: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
9530: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
9540: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
9550: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
9560: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
9570: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
9580: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
9590: 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65  mask))==0).#else
95a0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
95b0: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
95c0: 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69  , mask)  0.#defi
95d0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
95e0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
95f0: 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     1.#endif../*.
9600: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
9610: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
9620: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
9630: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
9640: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
9650: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
9660: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
9670: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
9680: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
9690: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
96a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
96b0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
96c0: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
96d0: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
96e0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
96f0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
9700: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
9710: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
9720: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
9730: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
9740: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
9750: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
9760: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
9770: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9780: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
9790: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
97a0: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
97b0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
97c0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
97d0: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
97e0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
97f0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
9800: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
9810: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9820: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
9830: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
9840: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
9850: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
9860: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
9870: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
9880: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
9890: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
98a0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20  * structure.  A 
98b0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
98c0: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f  structure is sto
98d0: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
98e0: 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20  e.aFunc.** hash 
98f0: 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c  table.  When mul
9900: 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  tiple functions 
9910: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61  have the same na
9920: 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62  me, the hash tab
9930: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20  le.** points to 
9940: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
9950: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
9960: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
9970: 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72  cDef {.  i16 nAr
9980: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
9990: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
99a0: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
99b0: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
99c0: 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20 20  8 iPrefEnc;     
99d0: 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65 64      /* Preferred
99e0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 28   text encoding (
99f0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36 4c  SQLITE_UTF8, 16L
9a00: 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75 38  E, 16BE) */.  u8
9a10: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
9a20: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
9a30: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
9a40: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
9a50: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
9a60: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
9a70: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
9a80: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
9a90: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
9aa0: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
9ab0: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
9ac0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
9ad0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
9ae0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
9af0: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
9b00: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
9b10: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
9b20: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
9b30: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
9b40: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
9b50: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
9b60: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
9b70: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
9b80: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
9b90: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
9ba0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
9bb0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
9bc0: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
9bd0: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
9be0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
9bf0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
9c00: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
9c10: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
9c20: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
9c30: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
9c40: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
9c50: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
9c60: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
9c70: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
9c80: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
9c90: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
9ca0: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
9cb0: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
9cc0: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
9cd0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
9ce0: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
9cf0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
9d00: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
9d10: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
9d20: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
9d30: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
9d40: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
9d50: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
9d60: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
9d70: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
9d80: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
9d90: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
9da0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
9db0: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
9dc0: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
9dd0: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
9de0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
9df0: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
9e00: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
9e10: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
9e20: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
9e30: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
9e40: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
9e50: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
9e60: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
9e70: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
9e80: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
9e90: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
9ea0: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
9eb0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
9ec0: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
9ed0: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
9ee0: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
9ef0: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
9f00: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
9f10: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
9f20: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
9f30: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
9f40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
9f50: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
9f60: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
9f70: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
9f80: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
9f90: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
9fa0: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
9fb0: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
9fc0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
9fd0: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
9fe0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
9ff0: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
a000: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
a010: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
a020: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
a030: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
a040: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
a050: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
a060: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
a070: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
a080: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
a090: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
a0a0: 4b 45 20 20 20 20 20 30 78 30 31 20 2f 2a 20 43  KE     0x01 /* C
a0b0: 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65  andidate for the
a0c0: 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69   LIKE optimizati
a0d0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
a0e0: 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20  LITE_FUNC_CASE  
a0f0: 20 20 20 30 78 30 32 20 2f 2a 20 43 61 73 65 2d     0x02 /* Case-
a100: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
a110: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
a120: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a130: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
a140: 34 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  4 /* Ephemeral. 
a150: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
a160: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
a170: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
a180: 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c 69 74 65  L 0x08 /* sqlite
a190: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
a1a0: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
a1b0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
a1c0: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
a1d0: 20 20 30 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d    0x10 /* Built-
a1e0: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
a1f0: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
a200: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
a210: 4c 45 53 43 45 20 30 78 32 30 20 2f 2a 20 42 75  LESCE 0x20 /* Bu
a220: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
a230: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66 75  ) or ifnull() fu
a240: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a250: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
a260: 4e 47 54 48 20 20 20 30 78 34 30 20 2f 2a 20 42  NGTH   0x40 /* B
a270: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
a280: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a290: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a2a0: 5f 54 59 50 45 4f 46 20 20 20 30 78 38 30 20 2f  _TYPEOF   0x80 /
a2b0: 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f  * Built-in typeo
a2c0: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  f() function */.
a2d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
a2e0: 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
a2f0: 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
a300: 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
a310: 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
a320: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
a330: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
a340: 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
a350: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
a360: 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
a370: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
a380: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
a390: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
a3a0: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
a3b0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
a3c0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
a3d0: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c  ame .**     impl
a3e0: 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e  emented by C fun
a3f0: 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74  ction xFunc that
a400: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
a410: 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20  guments. The.** 
a420: 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64      value passed
a430: 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74   as iArg is cast
a440: 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e   to a (void*) an
a450: 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  d made available
a460: 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75  .**     as the u
a470: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
a480: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66  3_user_data()) f
a490: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  or the function.
a4a0: 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75   If .**     argu
a4b0: 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
a4c0: 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
a4d0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
a4e0: 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
a4f0: 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a  **   AGGREGATE(z
a500: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
a510: 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46  , bNC, xStep, xF
a520: 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65  inal).**     Use
a530: 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
a540: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
a550: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
a560: 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
a570: 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
a580: 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
a590: 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
a5a0: 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
a5b0: 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
a5c0: 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
a5d0: 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
a5e0: 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
a5f0: 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
a600: 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
a610: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
a620: 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
a630: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
a640: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
a650: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
a660: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
a670: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
a680: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
a690: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
a6a0: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
a6b0: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a  y a call to C .*
a6c0: 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
a6d0: 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
a6e0: 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
a6f0: 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
a700: 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
a710: 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
a720: 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
a730: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
a740: 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
a750: 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
a760: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
a770: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
a780: 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
a790: 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
a7a0: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
a7b0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
a7c0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
a7d0: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
a7e0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28  , SQLITE_UTF8, (
a7f0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
a800: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
a810: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
a820: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
a830: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
a840: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46   0, 0}.#define F
a850: 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20  UNCTION2(zName, 
a860: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
a870: 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61   xFunc, extraFla
a880: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
a890: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
a8a0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
a8b0: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
a8c0: 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
a8d0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
a8e0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
a8f0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
a900: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
a910: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
a920: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
a930: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
a940: 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53  LITE_UTF8, bNC*S
a950: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
a960: 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  OLL, \.   pArg, 
a970: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
a980: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
a990: 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a  efine LIKEFUNC(z
a9a0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
a9b0: 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72   flags) \.  {nAr
a9c0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g, SQLITE_UTF8, 
a9d0: 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29 61  flags, (void *)a
a9e0: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
a9f0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
aa00: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  , 0}.#define AGG
aa10: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
aa20: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
aa30: 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20  ep, xFinal) \.  
aa40: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
aa50: 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8, nc*SQLITE_FU
aa60: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20  NC_NEEDCOLL, \. 
aa70: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
aa80: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
aa90: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
aaa0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
aab0: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
aac0: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
aad0: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
aae0: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
aaf0: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
ab00: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
ab10: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
ab20: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
ab30: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
ab40: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
ab50: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
ab60: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
ab70: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
ab80: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
ab90: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
aba0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
abb0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abd0: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
abe0: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
abf0: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
ac00: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
ac30: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
ac40: 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  ons */.  Savepoi
ac50: 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ac70: 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
ac80: 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
ac90: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
aca0: 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
acb0: 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
acc0: 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
acd0: 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
ace0: 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
acf0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
ad00: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
ad10: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
ad20: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
ad30: 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
ad40: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
ad50: 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
ad60: 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
ad70: 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
ad80: 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
ad90: 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
ada0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
adb0: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
adc0: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
add0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
ade0: 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
adf0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
ae00: 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
ae10: 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
ae20: 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
ae30: 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
ae40: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
ae50: 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
ae60: 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
ae70: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ae90: 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
aea0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
aeb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
aee0: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
aef0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
af00: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
af10: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
af20: 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
af30: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
af40: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
af50: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
af60: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
af70: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
af80: 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
af90: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
afa0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
afb0: 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
afc0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
afd0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
afe0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70   column */.  Exp
aff0: 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
b000: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
b010: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
b020: 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20  .  char *zDflt; 
b030: 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
b040: 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66 61  text of the defa
b050: 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63  ult value */.  c
b060: 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20  har *zType;     
b070: 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f 72  /* Data type for
b080: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
b090: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
b0a0: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
b0b0: 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
b0c0: 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
b0d0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
b0e0: 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
b0f0: 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
b100: 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
b110: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
b120: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
b130: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
b140: 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
b150: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 63  alues */.  u16 c
b160: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 42  olFlags;    /* B
b170: 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
b180: 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
b190: 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
b1a0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
b1b0: 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
b1c0: 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
b1d0: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
b1e0: 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
b1f0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
b200: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
b210: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
b220: 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
b230: 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
b240: 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
b250: 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
b260: 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ble */../*.** A 
b270: 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65  "Collating Seque
b280: 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20  nce" is defined 
b290: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
b2a0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
b2b0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f  ** structure. Co
b2c0: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f  nceptually, a co
b2d0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b2e0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e   consists of a n
b2f0: 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d  ame and.** a com
b300: 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20  parison routine 
b310: 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
b320: 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73   order of that s
b330: 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49  equence..**.** I
b340: 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69  f CollSeq.xCmp i
b350: 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73  s NULL, it means
b360: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c   that the.** col
b370: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
b380: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49  is undefined.  I
b390: 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20  ndices built on 
b3a0: 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20  an undefined.** 
b3b0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
b3c0: 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65  ce may not be re
b3d0: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a  ad or written..*
b3e0: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  /.struct CollSeq
b3f0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
b400: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
b410: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
b420: 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54  ing sequence, UT
b430: 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
b440: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
b450: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
b460: 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
b470: 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76  by xCmp() */.  v
b480: 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
b490: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
b4a0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29  gument to xCmp()
b4b0: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70   */.  int (*xCmp
b4c0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
b4d0: 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  st void*, int, c
b4e0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
b4f0: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
b500: 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74  *);  /* Destruct
b510: 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a  or for pUser */.
b520: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74  };../*.** A sort
b530: 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69   order can be ei
b540: 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
b550: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b560: 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20  ITE_SO_ASC      
b570: 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   0  /* Sort in a
b580: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
b590: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b5a0: 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20  _SO_DESC      1 
b5b0: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
b5c0: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a  nding order */..
b5d0: 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
b5e0: 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
b5f0: 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
b600: 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
b610: 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
b620: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
b630: 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
b640: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
b650: 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
b660: 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
b670: 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
b680: 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
b690: 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
b6a0: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
b6b0: 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a  nsecutively.  .*
b6c0: 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
b6d0: 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
b6e0: 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
b6f0: 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61 74   with 'a'.  That
b700: 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
b710: 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
b720: 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
b730: 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
b740: 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
b750: 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
b760: 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
b770: 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
b780: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
b790: 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
b7a0: 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
b7b0: 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
b7c0: 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
b7d0: 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
b7e0: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
b7f0: 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65  mparison..*/.#de
b800: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b810: 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64 65  TEXT     'a'.#de
b820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b830: 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65  NONE     'b'.#de
b840: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b850: 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65  NUMERIC  'c'.#de
b860: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b870: 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64 65  INTEGER  'd'.#de
b880: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b890: 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64  REAL     'e'..#d
b8a0: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
b8b0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
b8c0: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
b8d0: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
b8e0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
b8f0: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
b900: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
b910: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
b920: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
b930: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
b940: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
b950: 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a  SK     0x67../*.
b960: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
b970: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
b980: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
b990: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
b9a0: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
b9b0: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a  he affinity..*/.
b9c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
b9d0: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38  UMPIFNULL   0x08
b9e0: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
b9f0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
ba00: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
ba10: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
ba20: 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f      0x10  /* Sto
ba30: 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
ba40: 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
ba50: 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
ba60: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
ba70: 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
ba80: 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  LL=NULL */../*.*
ba90: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
baa0: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
bab0: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
bac0: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
bad0: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
bae0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a  abase schema. .*
baf0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
bb00: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
bb10: 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
bb20: 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
bb30: 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
bb40: 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
bb50: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
bb60: 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
bb70: 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
bb80: 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
bb90: 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
bba0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
bbb0: 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
bbc0: 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
bbd0: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
bbe0: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
bbf0: 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
bc00: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
bc10: 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70  al table .** imp
bc20: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
bc30: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
bc40: 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
bc50: 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a  ared between .**
bc60: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
bc70: 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
bc80: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
bc90: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
bca0: 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69  ase .** schema i
bcb0: 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
bcc0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bcd0: 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
bce0: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
bcf0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
bd00: 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
bd10: 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
bd20: 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
bd30: 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
bd40: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
bd50: 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
bd60: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
bd70: 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
bd80: 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
bd90: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
bda0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bdb0: 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
bdc0: 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e  ables .** within
bdd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
bde0: 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
bdf0: 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
be00: 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72  e callers .** tr
be10: 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
be20: 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
be30: 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
be40: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
be50: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
be60: 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
be70: 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
be80: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
be90: 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
bea0: 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
beb0: 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
bec0: 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
bed0: 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
bee0: 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
bef0: 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
bf00: 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
bf10: 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
bf20: 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
bf30: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
bf40: 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
bf50: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
bf60: 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
bf70: 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
bf80: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
bf90: 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
bfa0: 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
bfb0: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
bfc0: 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
bfd0: 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
bfe0: 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
bff0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
c000: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
c010: 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
c020: 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
c030: 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
c040: 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
c050: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
c060: 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
c070: 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
c080: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
c090: 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
c0a0: 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
c0b0: 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
c0c0: 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
c0d0: 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
c0e0: 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
c0f0: 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
c100: 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  ot .** deleted a
c110: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
c120: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
c130: 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
c140: 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61  ()ed .** immedia
c150: 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
c160: 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
c170: 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
c180: 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
c190: 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
c1a0: 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
c1b0: 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
c1c0: 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
c1d0: 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
c1e0: 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
c1f0: 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
c200: 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
c210: 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20  isconnected .** 
c220: 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
c230: 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
c240: 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
c250: 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
c260: 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
c270: 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
c280: 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
c290: 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
c2a0: 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
c2b0: 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
c2c0: 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
c2d0: 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
c2e0: 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
c2f0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
c300: 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
c310: 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
c320: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
c330: 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
c340: 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
c350: 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
c360: 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
c370: 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
c380: 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
c390: 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
c3a0: 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
c3b0: 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73  located by .** s
c3c0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
c3d0: 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
c3e0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
c3f0: 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
c400: 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72  b as .** the fir
c410: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
c420: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
c430: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
c440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c450: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
c460: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
c470: 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
c480: 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4a0: 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
c4b0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
c4c0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
c4d0: 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
c4e0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
c4f0: 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
c500: 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
c510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c520: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
c530: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
c540: 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
c550: 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
c560: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
c570: 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
c580: 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
c590: 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
c5a0: 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
c5b0: 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
c5c0: 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
c5d0: 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
c5e0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
c5f0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
c600: 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
c610: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61  *.** Each SQL ta
c620: 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
c630: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
c640: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
c650: 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  he.** following 
c660: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
c670: 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20   Table.zName is 
c680: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
c690: 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65  table.  The case
c6a0: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
c6b0: 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45  .** CREATE TABLE
c6c0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
c6d0: 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20 69  ored, but case i
c6e0: 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e  s not significan
c6f0: 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69  t for.** compari
c700: 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  sons..**.** Tabl
c710: 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75  e.nCol is the nu
c720: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
c730: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20  in this table.  
c740: 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a  Table.aCol is a.
c750: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e  ** pointer to an
c760: 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e   array of Column
c770: 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65   structures, one
c780: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
c790: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74  ..**.** If the t
c7a0: 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45  able has an INTE
c7b0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
c7c0: 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65   then Table.iPKe
c7d0: 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  y is the index o
c7e0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20  f.** the column 
c7f0: 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65 79  that is that key
c800: 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54 61  .   Otherwise Ta
c810: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67  ble.iPKey is neg
c820: 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20  ative.  Note.** 
c830: 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79 70  that the datatyp
c840: 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  e of the PRIMARY
c850: 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54   KEY must be INT
c860: 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66 69  EGER for this fi
c870: 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74  eld to.** be set
c880: 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52  .  An INTEGER PR
c890: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73 65  IMARY KEY is use
c8a0: 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 66  d as the rowid f
c8b0: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a  or each row of.*
c8c0: 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  * the table.  If
c8d0: 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20   a table has no 
c8e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c8f0: 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64  KEY, then a rand
c900: 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67  om rowid.** is g
c910: 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61 63  enerated for eac
c920: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
c930: 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61  le.  TF_HasPrima
c940: 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a  ryKey is set if.
c950: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  ** the table has
c960: 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59   any PRIMARY KEY
c970: 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68  , INTEGER or oth
c980: 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  erwise..**.** Ta
c990: 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20  ble.tnum is the 
c9a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
c9b0: 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70  the root BTree p
c9c0: 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
c9d0: 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   in the.** datab
c9e0: 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61  ase file.  If Ta
c9f0: 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20 69  ble.iDb is the i
ca00: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
ca10: 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65  base table backe
ca20: 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e  nd.** in sqlite.
ca30: 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72  aDb[].  0 is for
ca40: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
ca50: 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20  se and 1 is for 
ca60: 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a  the file that.**
ca70: 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79   holds temporary
ca80: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
ca90: 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65  ces.  If TF_Ephe
caa0: 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20  meral is set.** 
cab0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
cac0: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69  s stored in a fi
cad0: 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d  le that is autom
cae0: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
caf0: 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42  .** when the VDB
cb00: 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  E cursor to the 
cb10: 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
cb20: 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 54    In this case T
cb30: 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65  able.tnum .** re
cb40: 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f 72  fers VDBE cursor
cb50: 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c   number that hol
cb60: 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65  ds the table ope
cb70: 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f  n, not to the ro
cb80: 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65  ot.** page numbe
cb90: 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61  r.  Transient ta
cba0: 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  bles are used to
cbb0: 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74   hold the result
cbc0: 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75  s of a.** sub-qu
cbd0: 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72 73  ery that appears
cbe0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65   instead of a re
cbf0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  al table name in
cc00: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
cc10: 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54   .** of a SELECT
cc20: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
cc30: 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
cc40: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
cc50: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
cc60: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
cc70: 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
cc80: 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
cc90: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
cca0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
ccb0: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
ccc0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
ccd0: 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
cce0: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
ccf0: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
cd00: 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
cd10: 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
cd20: 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
cd30: 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
cd40: 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
cd50: 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
cd60: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
cd70: 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
cd80: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
cd90: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
cda0: 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
cdb0: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
cdc0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
cdd0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cde0: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45  E_OMIT_CHECK.  E
cdf0: 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
ce00: 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
ce10: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
ce20: 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e 74  #endif.  tRowcnt
ce30: 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a   nRowEst;     /*
ce40: 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
ce50: 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
ce60: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
ce70: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  le */.  int tnum
ce80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ce90: 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20  Root BTree node 
cea0: 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28  for this table (
ceb0: 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20  see note above) 
cec0: 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
ced0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
cee0: 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
cef0: 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
cf00: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
cf10: 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
cf20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cf30: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
cf40: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
cf50: 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
cf60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
cf70: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
cf80: 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
cf90: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
cfa0: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
cfb0: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
cfc0: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
cfd0: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
cfe0: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
cff0: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
d000: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
d010: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d020: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
d030: 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
d040: 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
d050: 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
d060: 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
d070: 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
d080: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d090: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d0a0: 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
d0b0: 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
d0c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
d0d0: 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
d0e0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
d0f0: 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78  duleArg;  /* Tex
d100: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
d110: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
d120: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54  ule name */.  VT
d130: 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
d140: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
d150: 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
d160: 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
d170: 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
d180: 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
d190: 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
d1a0: 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
d1b0: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
d1c0: 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
d1d0: 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
d1e0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
d1f0: 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
d200: 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
d210: 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
d220: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
d230: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
d240: 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a   Tabe.tabFlags..
d250: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
d260: 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
d270: 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
d280: 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
d290: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
d2a0: 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
d2b0: 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
d2c0: 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
d2d0: 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
d2e0: 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
d2f0: 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
d300: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
d310: 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
d320: 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
d330: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
d340: 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
d350: 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
d360: 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
d370: 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
d380: 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
d390: 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a   table */.../*.*
d3a0: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
d3b0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
d3c0: 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
d3d0: 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
d3e0: 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
d3f0: 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
d400: 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
d410: 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
d420: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
d430: 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
d440: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
d450: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
d460: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d470: 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
d480: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
d490: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
d4a0: 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
d4b0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
d4c0: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
d4d0: 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
d4e0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
d4f0: 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
d500: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
d510: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
d520: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
d530: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  X) 0.#endif../*.
d540: 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
d550: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
d560: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
d570: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
d580: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
d590: 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
d5a0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
d5b0: 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
d5c0: 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
d5d0: 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
d5e0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
d5f0: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
d600: 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
d610: 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
d620: 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
d630: 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
d640: 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
d650: 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
d660: 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
d670: 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
d680: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
d690: 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
d6a0: 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
d6b0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
d6c0: 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
d6d0: 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
d6e0: 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
d6f0: 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
d700: 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
d710: 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
d720: 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
d730: 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
d740: 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a  le is "ex2"..**.
d750: 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
d760: 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
d770: 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
d780: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
d790: 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
d7a0: 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
d7b0: 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
d7c0: 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
d7d0: 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
d7e0: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
d7f0: 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
d800: 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
d810: 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
d820: 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
d830: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
d840: 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
d850: 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
d860: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
d870: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
d880: 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
d890: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
d8a0: 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72  om;  /* Next for
d8b0: 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f  eign key in pFro
d8c0: 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
d8d0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
d8e0: 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
d8f0: 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
d900: 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
d910: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
d920: 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f  o;    /* Next fo
d930: 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62  reign key on tab
d940: 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a  le named zTo */.
d950: 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
d960: 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
d970: 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74  foreign key on t
d980: 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a  able named zTo *
d990: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
d9a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d9b0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
d9c0: 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
d9d0: 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
d9e0: 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
d9f0: 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  red;    /* True 
da00: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
da10: 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
da20: 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
da30: 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
da40: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ];          /* O
da50: 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
da60: 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
da70: 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
da80: 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
da90: 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69  gger[2];  /* Tri
daa0: 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
dab0: 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
dac0: 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
dad0: 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66  {  /* Mapping of
dae0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
daf0: 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
db00: 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
db10: 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  From;         /*
db20: 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
db30: 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
db40: 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
db50: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
db60: 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
db70: 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59 20  f 0 use PRIMARY 
db80: 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
db90: 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  1];        /* On
dba0: 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
dbb0: 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20   of nCol column 
dbc0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
dbd0: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
dbe0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
dbf0: 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
dc00: 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
dc10: 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
dc20: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
dc30: 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
dc40: 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
dc50: 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
dc60: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
dc70: 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
dc80: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
dc90: 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
dca0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
dcb0: 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
dcc0: 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
dcd0: 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
dce0: 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
dcf0: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
dd00: 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
dd10: 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
dd20: 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
dd30: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
dd40: 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
dd50: 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
dd60: 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
dd70: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
dd80: 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
dd90: 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
dda0: 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
ddb0: 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
ddc0: 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
ddd0: 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
dde0: 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
ddf0: 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
de00: 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
de10: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
de20: 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
de30: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
de40: 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
de50: 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
de60: 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
de70: 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
de80: 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
de90: 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
dea0: 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
deb0: 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
dec0: 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
ded0: 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
dee0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
def0: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
df00: 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
df10: 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
df20: 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
df30: 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
df40: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
df50: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
df60: 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
df70: 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
df80: 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
df90: 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
dfa0: 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
dfb0: 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
dfc0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
dfd0: 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
dfe0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
dff0: 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
e000: 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
e010: 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
e020: 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
e030: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
e040: 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
e050: 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
e060: 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
e070: 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
e080: 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
e090: 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
e0a0: 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
e0b0: 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
e0c0: 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
e0d0: 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66  ey..** .** The f
e0e0: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
e0f0: 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
e100: 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
e110: 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
e120: 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
e130: 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
e140: 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
e150: 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
e160: 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
e170: 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
e180: 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
e190: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
e1a0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
e1b0: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
e1c0: 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
e1d0: 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
e1e0: 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
e1f0: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
e200: 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
e210: 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
e220: 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
e230: 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
e240: 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
e250: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
e260: 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
e270: 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
e280: 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
e290: 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
e2a0: 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
e2b0: 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
e2c0: 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
e2d0: 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
e2e0: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
e2f0: 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
e300: 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
e310: 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
e320: 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
e330: 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
e340: 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
e350: 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
e360: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
e370: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
e380: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
e390: 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
e3a0: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
e3b0: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
e3c0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
e3d0: 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
e3e0: 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
e3f0: 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
e400: 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
e410: 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77 68 61  t  99  /* Do wha
e420: 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
e430: 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
e440: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
e450: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
e460: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
e470: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
e480: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
e490: 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
e4a0: 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
e4b0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
e4c0: 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69   the .** compari
e4d0: 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
e4e0: 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74  ndex keys..*/.st
e4f0: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
e500: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
e510: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
e520: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
e530: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
e540: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
e550: 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
e560: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
e570: 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
e580: 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
e590: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e5a0: 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c  entries in aColl
e5b0: 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  [] */.  u8 *aSor
e5c0: 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53  tOrder;     /* S
e5d0: 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61  ort order for ea
e5e0: 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20  ch column.  May 
e5f0: 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c  be NULL */.  Col
e600: 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
e610: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
e620: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
e630: 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
e640: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
e650: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e660: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
e670: 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
e680: 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a  ation about a.**
e690: 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65   single index re
e6a0: 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
e6b0: 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65  ready been parse
e6c0: 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
e6d0: 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e  idual.** values.
e6e0: 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
e6f0: 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
e700: 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
e710: 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
e720: 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
e730: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
e740: 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
e750: 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
e760: 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
e770: 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
e780: 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
e790: 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
e7a0: 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
e7b0: 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
e7c0: 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
e7d0: 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
e7e0: 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
e7f0: 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
e800: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  pcode..**.** Thi
e810: 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  s structure hold
e820: 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  s a record that 
e830: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
e840: 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a   disassembled.**
e850: 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69   into its consti
e860: 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f  tuent fields..*/
e870: 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
e880: 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
e890: 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
e8a0: 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
e8b0: 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
e8c0: 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
e8d0: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
e8e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
e8f0: 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
e900: 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20  */.  u8 flags;  
e910: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c           /* Bool
e920: 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20 55  ean settings.  U
e930: 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f  NPACKED_... belo
e940: 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64  w */.  i64 rowid
e950: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  ;          /* Us
e960: 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f 50  ed by UNPACKED_P
e970: 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a  REFIX_SEARCH */.
e980: 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
e990: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
e9a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
e9b0: 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20 55  owed values of U
e9c0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c  npackedRecord.fl
e9d0: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ags.*/.#define U
e9e0: 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
e9f0: 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 4d        0x01  /* M
ea00: 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e 20  ake this key an 
ea10: 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a  epsilon larger *
ea20: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
ea30: 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 20  ED_PREFIX_MATCH 
ea40: 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72 65 66   0x02  /* A pref
ea50: 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e 73  ix match is cons
ea60: 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65  idered OK */.#de
ea70: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52  fine UNPACKED_PR
ea80: 45 46 49 58 5f 53 45 41 52 43 48 20 30 78 30 34  EFIX_SEARCH 0x04
ea90: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61    /* Ignore fina
eaa0: 6c 20 28 72 6f 77 69 64 29 20 66 69 65 6c 64 20  l (rowid) field 
eab0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
eac0: 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
ead0: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
eae0: 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
eaf0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
eb00: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
eb10: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
eb20: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
eb30: 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
eb40: 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
eb50: 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
eb60: 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
eb70: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
eb80: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
eb90: 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
eba0: 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
ebb0: 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
ebc0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
ebd0: 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
ebe0: 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
ebf0: 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
ec00: 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
ec10: 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
ec20: 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
ec30: 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
ec40: 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
ec50: 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
ec60: 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
ec70: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
ec80: 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
ec90: 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
eca0: 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
ecb0: 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
ecc0: 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
ecd0: 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
ece0: 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
ecf0: 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
ed00: 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
ed10: 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
ed20: 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74  se the .** first
ed30: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
ed40: 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61  dexed (c3) has a
ed50: 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20  n index of 2 in 
ed60: 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54  Ex1.aCol[]..** T
ed70: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
ed80: 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
ed90: 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c1) has an index
eda0: 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e   of 0 in.** Ex1.
edb0: 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78  aCol[], hence Ex
edc0: 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30  2.aiColumn[1]==0
edd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65  ..**.** The Inde
ede0: 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20  x.onError field 
edf0: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
ee00: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e  er or not the in
ee10: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  dexed columns.**
ee20: 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20   must be unique 
ee30: 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69  and what to do i
ee40: 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20  f they are not. 
ee50: 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72   When Index.onEr
ee60: 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20  ror=OE_None,.** 
ee70: 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73  it means this is
ee80: 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e   not a unique in
ee90: 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20  dex.  Otherwise 
eea0: 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69  it is a unique i
eeb0: 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ndex.** and the 
eec0: 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f  value of Index.o
eed0: 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20  nError indicate 
eee0: 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69  the which confli
eef0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a  ct resolution .*
ef00: 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
ef10: 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
ef20: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
ef30: 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
ef40: 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
ef50: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ent..*/.struct I
ef60: 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
ef70: 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
ef80: 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
ef90: 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43 6f 6c 75  */.  int *aiColu
efa0: 6d 6e 3b 20 20 20 2f 2a 20 57 68 69 63 68 20 63  mn;   /* Which c
efb0: 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
efc0: 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
efd0: 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 74 52  1st is 0 */.  tR
efe0: 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b  owcnt *aiRowEst;
eff0: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 41 4e   /* Result of AN
f000: 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
f010: 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
f020: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
f030: 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 2f  ble *pTable;   /
f040: 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20  * The SQL table 
f050: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f  being indexed */
f060: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
f070: 3b 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65  ;   /* String de
f080: 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
f090: 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
f0a0: 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
f0b0: 4e 65 78 74 3b 20 20 20 20 2f 2a 20 54 68 65 20  Next;    /* The 
f0c0: 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63  next index assoc
f0d0: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
f0e0: 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53  ame table */.  S
f0f0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
f100: 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
f110: 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
f120: 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
f130: 64 65 72 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f  der;  /* Array o
f140: 66 20 73 69 7a 65 20 49 6e 64 65 78 2e 6e 43 6f  f size Index.nCo
f150: 6c 75 6d 6e 2e 20 54 72 75 65 3d 3d 44 45 53 43  lumn. True==DESC
f160: 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
f170: 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
f180: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
f190: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
f1a0: 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
f1b0: 78 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  x */.  int nColu
f1c0: 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
f1d0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
f1e0: 74 68 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  the table used b
f1f0: 79 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  y this index */.
f200: 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
f210: 20 20 20 2f 2a 20 50 61 67 65 20 63 6f 6e 74 61     /* Page conta
f220: 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
f230: 69 73 20 69 6e 64 65 78 20 69 6e 20 64 61 74 61  is index in data
f240: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
f250: 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
f260: 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
f270: 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
f280: 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
f290: 2f 0a 20 20 75 38 20 61 75 74 6f 49 6e 64 65 78  /.  u8 autoIndex
f2a0: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
f2b0: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
f2c0: 20 63 72 65 61 74 65 64 20 28 65 78 3a 20 62 79   created (ex: by
f2d0: 20 55 4e 49 51 55 45 29 20 2a 2f 0a 20 20 75 38   UNIQUE) */.  u8
f2e0: 20 62 55 6e 6f 72 64 65 72 65 64 3b 20 20 20 2f   bUnordered;   /
f2f0: 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
f300: 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
f310: 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 69  eries only */.#i
f320: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
f330: 4c 45 5f 53 54 41 54 33 0a 20 20 69 6e 74 20 6e  LE_STAT3.  int n
f340: 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
f350: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f360: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
f370: 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 74 52 6f 77  mple[] */.  tRow
f380: 63 6e 74 20 61 76 67 45 71 3b 20 20 20 20 20 20  cnt avgEq;      
f390: 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
f3a0: 6e 45 71 20 76 61 6c 75 65 20 66 6f 72 20 6b 65  nEq value for ke
f3b0: 79 20 76 61 6c 75 65 73 20 6e 6f 74 20 69 6e 20  y values not in 
f3c0: 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
f3d0: 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
f3e0: 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
f3f0: 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
f400: 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a  t key */.#endif.
f410: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  };../*.** Each s
f420: 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
f430: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
f440: 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
f450: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
f460: 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
f470: 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
f480: 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
f490: 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
f4a0: 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
f4b0: 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
f4c0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
f4d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
f4e0: 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
f4f0: 70 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ple {.  union {.
f500: 20 20 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20      char *z;    
f510: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20      /* Value if 
f520: 65 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f  eType is SQLITE_
f530: 54 45 58 54 20 6f 72 20 53 51 4c 49 54 45 5f 42  TEXT or SQLITE_B
f540: 4c 4f 42 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  LOB */.    doubl
f550: 65 20 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  e r;       /* Va
f560: 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20  lue if eType is 
f570: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 20 2a 2f 0a  SQLITE_FLOAT */.
f580: 20 20 20 20 69 36 34 20 69 3b 20 20 20 20 20 20      i64 i;      
f590: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20      /* Value if 
f5a0: 65 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f  eType is SQLITE_
f5b0: 49 4e 54 45 47 45 52 20 2a 2f 0a 20 20 7d 20 75  INTEGER */.  } u
f5c0: 3b 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20 20  ;.  u8 eType;   
f5d0: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
f5e0: 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 49 4e 54  NULL, SQLITE_INT
f5f0: 45 47 45 52 20 2e 2e 2e 20 65 74 63 2e 20 2a 2f  EGER ... etc. */
f600: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20  .  int nByte;   
f610: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 69 6e 20       /* Size in 
f620: 62 79 74 65 20 6f 66 20 74 65 78 74 20 6f 72 20  byte of text or 
f630: 62 6c 6f 62 2e 20 2a 2f 0a 20 20 74 52 6f 77 63  blob. */.  tRowc
f640: 6e 74 20 6e 45 71 3b 20 20 20 20 20 20 2f 2a 20  nt nEq;      /* 
f650: 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
f660: 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
f670: 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
f680: 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
f690: 74 20 6e 4c 74 3b 20 20 20 20 20 20 2f 2a 20 45  t nLt;      /* E
f6a0: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
f6b0: 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
f6c0: 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
f6d0: 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
f6e0: 6e 74 20 6e 44 4c 74 3b 20 20 20 20 20 2f 2a 20  nt nDLt;     /* 
f6f0: 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
f700: 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
f710: 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
f720: 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
f730: 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
f740: 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
f750: 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
f760: 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
f770: 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
f780: 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
f790: 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
f7a0: 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
f7b0: 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
f7c0: 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
f7d0: 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
f7e0: 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
f7f0: 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
f800: 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
f810: 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
f820: 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
f830: 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
f840: 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
f850: 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
f860: 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
f870: 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
f880: 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
f890: 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
f8a0: 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
f8b0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
f8c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f8d0: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
f8e0: 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
f8f0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
f900: 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
f910: 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
f920: 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
f930: 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
f940: 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
f950: 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
f960: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
f970: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
f980: 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
f990: 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
f9a0: 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
f9b0: 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
f9c0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
f9d0: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
f9e0: 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
f9f0: 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
fa00: 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
fa10: 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
fa20: 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
fa30: 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
fa40: 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
fa50: 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
fa60: 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
fa70: 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
fa80: 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
fa90: 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
faa0: 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
fab0: 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
fac0: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
fad0: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
fae0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
faf0: 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
fb00: 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
fb10: 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
fb20: 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
fb30: 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
fb40: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
fb50: 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
fb60: 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
fb70: 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
fb80: 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
fb90: 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
fba0: 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
fbc0: 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
fbd0: 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
fbe0: 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
fbf0: 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
fc00: 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
fc10: 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
fc20: 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
fc30: 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
fc40: 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
fc60: 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
fc70: 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
fc80: 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
fc90: 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
fca0: 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
fcb0: 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
fcc0: 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
fcd0: 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
fce0: 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
fcf0: 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
fd00: 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
fd10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
fd20: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
fd30: 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
fd40: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
fd50: 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
fd60: 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
fd70: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
fd80: 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
fd90: 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
fda0: 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
fdb0: 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
fdc0: 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
fdd0: 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
fde0: 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
fdf0: 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
fe00: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
fe10: 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
fe20: 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
fe30: 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fe50: 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
fe60: 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
fe70: 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
fe80: 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
fe90: 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
fea0: 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
feb0: 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
fec0: 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
fee0: 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
fef0: 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
ff00: 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
ff10: 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
ff20: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
ff30: 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
ff40: 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
ff50: 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
ff60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ff70: 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
ff80: 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
ff90: 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
ffa0: 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
ffb0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
ffc0: 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
ffd0: 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
ffe0: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
10000 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
10010 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
10020 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
10030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10040 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
10050 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10060 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
10070 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
10080 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
10090 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
100a0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
100b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
100c0 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
100d0 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
100e0 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
100f0 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
10100 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
10110 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
10120 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
10130 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
10140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
10150 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
10160 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
10170 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
10180 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
10190 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
101a0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
101b0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
101c0 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
101d0 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
101e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
101f0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
10200 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
10210 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
10220 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
10230 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
10240 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
10250 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
10260 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
10270 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
10280 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
10290 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
102a0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
102b0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
102c0 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
102d0 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
102e0 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
102f0 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
10300 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
10310 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
10320 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
10330 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
10340 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
10350 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
10360 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
10370 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
10380 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
10390 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
103a0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
103b0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
103c0 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
103d0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
103e0 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
103f0 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
10400 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
10410 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
10420 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
10430 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
10440 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
10450 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
10460 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
10470 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
10480 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
10490 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
104a0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
104b0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
104c0 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
104d0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
104e0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
104f0 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
10500 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
10510 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
10520 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
10530 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
10540 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
10550 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
10560 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
10570 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
10580 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
10590 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
105a0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
105b0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
105c0 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
105d0 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
105e0 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
105f0 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
10600 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
10610 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
10620 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
10630 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
10640 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
10650 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a  AT, TK_BLOB, .**
10660 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
10670 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
10680 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
10690 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
106a0 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
106b0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
106c0 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
106d0 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
106e0 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
106f0 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c   the .** variabl
10700 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c  e name. Finally,
10710 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
10720 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
10730 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49  ction (TK_FUNCTI
10740 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70  ON),.** then Exp
10750 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
10760 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
10770 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
10780 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
10790 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
107a0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
107b0 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e  ht subexpression
107c0 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79  s of a.** binary
107d0 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65   operator. Eithe
107e0 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65  r or both may be
107f0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70   NULL..**.** Exp
10800 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c  r.x.pList is a l
10810 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
10820 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
10830 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
10840 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45  ction,.** a CASE
10850 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61   expression or a
10860 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  n IN expression 
10870 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  of the form "<lh
10880 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e  s> IN (<y>, <z>.
10890 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e  ..)"..** Expr.x.
108a0 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20  pSelect is used 
108b0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
108c0 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63  n is a sub-selec
108d0 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  t or an expressi
108e0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72  on of.** the for
108f0 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c  m "<lhs> IN (SEL
10900 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68  ECT ...)". If th
10910 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62  e EP_xIsSelect b
10920 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
10930 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  .** Expr.flags m
10940 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78  ask, then Expr.x
10950 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
10960 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78  d. Otherwise, Ex
10970 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a  pr.x.pList is .*
10980 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41  * valid..**.** A
10990 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
109a0 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
109b0 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
109c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
109d0 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
109e0 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
109f0 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
10a00 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
10a10 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
10a20 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
10a30 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
10a40 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
10a50 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
10a60 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
10a70 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
10a80 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
10a90 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
10aa0 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
10ab0 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
10ac0 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
10ad0 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
10ae0 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
10af0 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
10b00 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
10b10 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
10b20 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
10b30 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
10b40 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
10b50 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
10b60 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
10b70 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
10b80 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
10b90 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d  bound variable m
10ba0 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f  arker (a questio
10bb0 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61  n mark .** chara
10bc0 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
10bd0 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
10be0 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
10bf0 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
10c00 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f  ex .** number fo
10c10 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e  r that variable.
10c20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
10c30 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
10c40 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72  bquery then Expr
10c50 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61  .iColumn holds a
10c60 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67  n integer.** reg
10c70 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e  ister number con
10c80 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75  taining the resu
10c90 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65  lt of the subque
10ca0 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73  ry.  If the.** s
10cb0 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20  ubquery gives a 
10cc0 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c  constant result,
10cd0 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
10ce0 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71  -1.  If the subq
10cf0 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20  uery.** gives a 
10d00 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72  different answer
10d10 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69   at different ti
10d20 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65  mes during state
10d30 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a  ment processing.
10d40 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  ** then iTable i
10d50 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
10d60 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68   a subroutine th
10d70 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
10d80 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  subquery..**.** 
10d90 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f  If the Expr is o
10da0 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e  f type OP_Column
10db0 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  , and the table 
10dc0 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20  it is selecting 
10dd0 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73  from.** is a dis
10de0 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22  k table or the "
10df0 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61  old.*" pseudo-ta
10e00 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70  ble, then pTab p
10e10 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
10e20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
10e30 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a  ble definition..
10e40 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e  **.** ALLOCATION
10e50 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78   NOTES:.**.** Ex
10e60 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75  pr objects can u
10e70 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f  se a lot of memo
10e80 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61  ry space in data
10e90 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f  base schema.  To
10ea0 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20  .** help reduce 
10eb0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65  memory requireme
10ec0 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61  nts, sometimes a
10ed0 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69  n Expr object wi
10ee0 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74  ll be.** truncat
10ef0 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75  ed.  And to redu
10f00 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ce the number of
10f10 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
10f20 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a  ons, sometimes.*
10f30 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78  * two or more Ex
10f40 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20  pr objects will 
10f50 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  be stored in a s
10f60 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  ingle memory all
10f70 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65  ocation,.** toge
10f80 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a  ther with Expr.z
10f90 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a  Token strings..*
10fa0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52  *.** If the EP_R
10fb0 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f  educed and EP_To
10fc0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72  kenOnly flags ar
10fd0 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e  e set when.** an
10fe0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20   Expr object is 
10ff0 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e  truncated.  When
11000 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
11010 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20  et, then all.** 
11020 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f  the child Expr o
11030 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78  bjects in the Ex
11040 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70  pr.pLeft and Exp
11050 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65  r.pRight subtree
11060 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e  s.** are contain
11070 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ed within the sa
11080 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  me memory alloca
11090 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77  tion.  Note, how
110a0 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68  ever, that.** th
110b0 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78  e subtrees in Ex
110c0 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78  pr.x.pList or Ex
110d0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65  pr.x.pSelect are
110e0 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65   always separate
110f0 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
11100 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
11110 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50  hether or not EP
11120 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e  _Reduced is set.
11130 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20  .*/.struct Expr 
11140 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
11150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
11160 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65  eration performe
11170 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
11180 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
11190 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
111a0 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68  e affinity of th
111b0 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66  e column or 0 if
111c0 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f   not a column */
111d0 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20  .  u16 flags;   
111e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
111f0 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f  ious flags.  EP_
11200 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  * See below */. 
11210 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61   union {.    cha
11220 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20  r *zToken;      
11230 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c      /* Token val
11240 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61  ue. Zero termina
11250 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64  ted and dequoted
11260 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c   */.    int iVal
11270 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ue;            /
11280 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69  * Non-negative i
11290 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20  nteger value if 
112a0 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20  EP_IntValue */. 
112b0 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } u;..  /* If t
112c0 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
112d0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
112e0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
112f0 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
11300 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
11310 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
11320 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
11330 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
11340 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
11350 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
11360 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
11370 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20   malfunction. . 
11380 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
11390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
113a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
113b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
113c0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
113d0 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
113e0 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
113f0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
11400 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
11410 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
11420 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
11430 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
11440 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
11450 20 61 72 67 75 6d 65 6e 74 73 20 6f 72 20 69 6e   arguments or in
11460 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65 78   "<expr> IN (<ex
11470 70 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20 20  pr-list)" */.   
11480 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
11490 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f  ;     /* Used fo
114a0 72 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e  r sub-selects an
114b0 64 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73  d "<expr> IN (<s
114c0 65 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 7d 20  elect>)" */.  } 
114d0 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
114e0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
114f0 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
11500 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
11510 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
11520 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
11530 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
11540 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
11550 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
11560 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
11570 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
11580 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
11590 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
115a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115e0 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
115f0 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
11600 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
11610 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
11620 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
11630 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
11640 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
11650 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
11660 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
11670 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
11680 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
11690 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
116c0 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
116d0 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
116e0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
116f0 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
11700 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f 0a  ew, 0 -> old */.
11710 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
11720 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
11730 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
11740 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
11750 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
11770 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
11780 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
11790 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20  ways >= 1). */. 
117a0 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
117b0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
117c0 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
117d0 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
117e0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
117f0 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
11800 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
11810 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
11820 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
11830 69 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73  in */.  u8 flags
11840 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  2;             /
11850 2a 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66 20  * Second set of 
11860 66 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e 2e 20  flags.  EP2_... 
11870 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
11880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
11890 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
118a0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
118b0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
118d0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
118e0 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
118f0 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11910 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
11920 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
11930 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
11940 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
11950 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
11960 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
11970 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
11980 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
11990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
119a0 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
119b0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a  N expressions. *
119c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
119d0 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
119e0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
119f0 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
11a00 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
11a10 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
11a20 69 6e 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  in   0x0001  /* 
11a30 4f 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e  Originated in ON
11a40 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
11a50 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64   of a join */.#d
11a60 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
11a70 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43      0x0002  /* C
11a80 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
11a90 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
11aa0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
11ab0 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20  ne EP_Resolved  
11ac0 20 30 78 30 30 30 34 20 20 2f 2a 20 49 44 73 20   0x0004  /* IDs 
11ad0 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
11ae0 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f  ed to COLUMNs */
11af0 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f  .#define EP_Erro
11b00 72 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  r      0x0008  /
11b10 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e  * Expression con
11b20 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
11b30 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  e errors */.#def
11b40 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20  ine EP_Distinct 
11b50 20 20 30 78 30 30 31 30 20 20 2f 2a 20 41 67 67    0x0010  /* Agg
11b60 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
11b70 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65  with DISTINCT ke
11b80 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
11b90 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30   EP_VarSelect  0
11ba0 78 30 30 32 30 20 20 2f 2a 20 70 53 65 6c 65 63  x0020  /* pSelec
11bb0 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c  t is correlated,
11bc0 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f   not constant */
11bd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51  .#define EP_DblQ
11be0 75 6f 74 65 64 20 20 30 78 30 30 34 30 20 20 2f  uoted  0x0040  /
11bf0 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72  * token.z was or
11c00 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e  iginally in "...
11c10 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  " */.#define EP_
11c20 49 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 38  InfixFunc  0x008
11c30 30 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61  0  /* True for a
11c40 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e  n infix function
11c50 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74  : LIKE, GLOB, et
11c60 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  c */.#define EP_
11c70 43 6f 6c 6c 61 74 65 20 20 20 20 30 78 30 31 30  Collate    0x010
11c80 30 20 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  0  /* Tree conta
11c90 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45  ins a TK_COLLATE
11ca0 20 6f 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64 65   opeartor */.#de
11cb0 66 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73  fine EP_FixedDes
11cc0 74 20 20 30 78 30 32 30 30 20 20 2f 2a 20 52 65  t  0x0200  /* Re
11cd0 73 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61  sult needed in a
11ce0 20 73 70 65 63 69 66 69 63 20 72 65 67 69 73 74   specific regist
11cf0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  er */.#define EP
11d00 5f 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 34  _IntValue   0x04
11d10 30 30 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  00  /* Integer v
11d20 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
11d30 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
11d40 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
11d50 63 74 20 20 30 78 30 38 30 30 20 20 2f 2a 20 78  ct  0x0800  /* x
11d60 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
11d70 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
11d80 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
11d90 69 6e 65 20 45 50 5f 48 69 6e 74 20 20 20 20 20  ine EP_Hint     
11da0 20 20 30 78 31 30 30 30 20 20 2f 2a 20 4e 6f 74    0x1000  /* Not
11db0 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
11dc0 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 20 30   EP_Reduced    0
11dd0 78 32 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73  x2000  /* Expr s
11de0 74 72 75 63 74 20 69 73 20 45 58 50 52 5f 52 45  truct is EXPR_RE
11df0 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20  DUCEDSIZE bytes 
11e00 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
11e10 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78  EP_TokenOnly  0x
11e20 34 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74  4000  /* Expr st
11e30 72 75 63 74 20 69 73 20 45 58 50 52 5f 54 4f 4b  ruct is EXPR_TOK
11e40 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73  ENONLYSIZE bytes
11e50 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
11e60 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 20 30   EP_Static     0
11e70 78 38 30 30 30 20 20 2f 2a 20 48 65 6c 64 20 69  x8000  /* Held i
11e80 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74  n memory not obt
11e90 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
11ea0 63 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  c() */../*.** Th
11eb0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
11ec0 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
11ed0 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
11ee0 2e 66 6c 61 67 73 32 20 66 69 65 6c 64 2e 0a 2a  .flags2 field..*
11ef0 2f 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 4d 61  /.#define EP2_Ma
11f00 6c 6c 6f 63 65 64 54 6f 6b 65 6e 20 20 30 78 30  llocedToken  0x0
11f10 30 30 31 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20  001  /* Need to 
11f20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
11f30 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23  Expr.zToken */.#
11f40 64 65 66 69 6e 65 20 45 50 32 5f 49 72 72 65 64  define EP2_Irred
11f50 75 63 69 62 6c 65 20 20 20 20 30 78 30 30 30 32  ucible    0x0002
11f60 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52    /* Cannot EXPR
11f70 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
11f80 45 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  Expr */../*.** T
11f90 68 65 20 70 73 65 75 64 6f 2d 72 6f 75 74 69 6e  he pseudo-routin
11fa0 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  e sqlite3ExprSet
11fb0 49 72 72 65 64 75 63 69 62 6c 65 20 73 65 74 73  Irreducible sets
11fc0 20 74 68 65 20 45 50 32 5f 49 72 72 65 64 75 63   the EP2_Irreduc
11fd0 69 62 6c 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20  ible.** flag on 
11fe0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 73 74  an expression st
11ff0 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 66  ructure.  This f
12000 6c 61 67 20 69 73 20 75 73 65 64 20 66 6f 72 20  lag is used for 
12010 56 56 26 41 20 6f 6e 6c 79 2e 20 20 54 68 65 0a  VV&A only.  The.
12020 2a 2a 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6d  ** routine is im
12030 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 6d  plemented as a m
12040 61 63 72 6f 20 74 68 61 74 20 6f 6e 6c 79 20 77  acro that only w
12050 6f 72 6b 73 20 77 68 65 6e 20 69 6e 20 64 65 62  orks when in deb
12060 75 67 67 69 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20  ugging mode,.** 
12070 73 6f 20 61 73 20 6e 6f 74 20 74 6f 20 62 75 72  so as not to bur
12080 64 65 6e 20 70 72 6f 64 75 63 74 69 6f 6e 20 63  den production c
12090 6f 64 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ode..*/.#ifdef S
120a0 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
120b0 66 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65  fine ExprSetIrre
120c0 64 75 63 69 62 6c 65 28 58 29 20 20 28 58 29 2d  ducible(X)  (X)-
120d0 3e 66 6c 61 67 73 32 20 7c 3d 20 45 50 32 5f 49  >flags2 |= EP2_I
120e0 72 72 65 64 75 63 69 62 6c 65 0a 23 65 6c 73 65  rreducible.#else
120f0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
12100 74 49 72 72 65 64 75 63 69 62 6c 65 28 58 29 0a  tIrreducible(X).
12110 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
12120 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
12130 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
12140 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
12150 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78  ts in the .** Ex
12160 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
12170 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
12180 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
12190 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
121a0 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
121b0 69 6e 65 20 45 78 70 72 48 61 73 41 6e 79 50 72  ine ExprHasAnyPr
121c0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
121d0 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
121e0 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  0).#define ExprS
121f0 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
12200 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
12210 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
12220 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
12230 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
12240 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  =~(P)../*.** Mac
12250 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
12260 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
12270 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
12280 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a   a normal Expr .
12290 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
122a0 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
122b0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
122c0 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
122d0 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20  lags .** and an 
122e0 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
122f0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
12300 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23  y flag set..*/.#
12310 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c  define EXPR_FULL
12320 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73  SIZE           s
12330 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20  izeof(Expr)     
12340 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69        /* Full si
12350 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  ze */.#define EX
12360 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20  PR_REDUCEDSIZE  
12370 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
12380 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20  xpr,iTable)  /* 
12390 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20  Common features 
123a0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
123b0 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20  TOKENONLYSIZE   
123c0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
123d0 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77  ,pLeft)   /* Few
123e0 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a  er features */..
123f0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73  /*.** Flags pass
12400 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ed to the sqlite
12410 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74  3ExprDup() funct
12420 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61  ion. See the hea
12430 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20  der comment .** 
12440 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
12450 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
12460 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
12470 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
12480 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
12490 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
124a0 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
124b0 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
124c0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
124d0 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
124e0 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
124f0 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
12500 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
12510 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
12520 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
12530 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
12540 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
12550 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
12560 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
12570 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
12580 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
12590 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
125a0 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
125b0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
125c0 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
125d0 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
125e0 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
125f0 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
12600 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
12610 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
12620 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  sed..*/.struct E
12630 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
12640 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
12650 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12660 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
12670 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74  he list */.  int
12680 20 69 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20   iECursor;      
12690 20 20 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73      /* VDBE Curs
126a0 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  or associated wi
126b0 74 68 20 74 68 69 73 20 45 78 70 72 4c 69 73 74  th this ExprList
126c0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
126d0 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
126e0 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
126f0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
12700 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
12710 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr;           /*
12720 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70   The list of exp
12730 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  ressions */.    
12740 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
12750 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
12760 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12770 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
12780 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
12790 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  an;           /*
127a0 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
127b0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
127c0 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
127d0 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
127e0 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
127f0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
12800 20 75 38 20 64 6f 6e 65 3b 20 20 20 20 20 20 20   u8 done;       
12810 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61          /* A fla
12820 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68  g to indicate wh
12830 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  en processing is
12840 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20   finished */.   
12850 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
12860 3b 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f  ;       /* For O
12870 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
12880 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
12890 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31 36 20   set */.    u16 
128a0 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
128b0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
128c0 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20   Parse.aAlias[] 
128d0 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  for zName */.  }
128e0 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20   *a;            
128f0 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61        /* Alloc a
12900 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72   power of two gr
12910 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74  eater or equal t
12920 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f  o nExpr */.};../
12930 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
12940 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
12950 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68  re is used by th
12960 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f  e parser to reco
12970 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70  rd both.** the p
12980 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e  arse tree for an
12990 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
129a0 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75  the span of inpu
129b0 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a  t text for an.**
129c0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a   expression..*/.
129d0 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
129e0 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b  {.  Expr *pExpr;
129f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
12a00 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73   expression pars
12a10 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73  e tree */.  cons
12a20 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20  t char *zStart; 
12a30 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61    /* First chara
12a40 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65  cter of input te
12a50 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
12a60 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a  ar *zEnd;     /*
12a70 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70   One character p
12a80 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69  ast the end of i
12a90 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a  nput text */.};.
12aa0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
12ab0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
12ac0 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
12ad0 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
12ae0 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
12af0 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
12b00 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
12b10 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
12b20 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
12b30 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
12b40 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
12b50 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
12b60 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
12b70 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
12b80 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
12b90 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
12ba0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
12bb0 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
12bc0 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
12bd0 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
12be0 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
12bf0 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
12c00 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
12c10 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
12c20 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
12c30 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
12c40 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
12c50 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
12c60 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
12c70 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
12c80 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
12c90 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
12ca0 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
12cb0 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
12cc0 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
12cd0 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
12ce0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
12cf0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
12d00 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
12d10 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
12d20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
12d30 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
12d40 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
12d50 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
12d60 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
12d70 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
12d80 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
12d90 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
12da0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
12db0 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79  e bitmask dataty
12dc0 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  pe defined below
12dd0 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72   is used for var
12de0 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
12df0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69  ns..**.** Changi
12e00 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36  ng this from a 6
12e10 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69  4-bit to a 32-bi
12e20 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68  t type limits th
12e30 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  e number of.** t
12e40 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20  ables in a join 
12e50 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66  to 32 instead of
12e60 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73   64.  But it als
12e70 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69  o reduces the si
12e80 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62  ze.** of the lib
12e90 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65  rary by 738 byte
12ea0 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79  s on ix86..*/.ty
12eb0 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73  pedef u64 Bitmas
12ec0 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  k;../*.** The nu
12ed0 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
12ee0 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
12ef0 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
12f00 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
12f10 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
12f20 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
12f30 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  ))../*.** The fo
12f40 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
12f50 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
12f60 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
12f70 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
12f80 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
12f90 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
12fa0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
12fb0 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
12fc0 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
12fd0 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
12fe0 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
12ff0 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
13000 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
13010 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
13020 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13030 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
13040 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
13050 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
13060 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
13070 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
13080 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
13090 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
130a0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
130b0 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
130c0 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
130d0 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
130e0 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
130f0 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
13100 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
13110 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
13120 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
13130 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
13140 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
13150 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
13160 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
13170 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
13180 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
13190 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
131a0 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
131b0 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
131c0 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
131d0 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
131e0 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
131f0 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
13200 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
13210 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
13220 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
13230 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
13240 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
13250 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
13260 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
13270 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
13280 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
13290 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
132a0 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
132b0 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
132c0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
132d0 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
132e0 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
132f0 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
13300 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
13310 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
13320 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
13330 0a 20 20 69 31 36 20 6e 53 72 63 3b 20 20 20 20  .  i16 nSrc;    
13340 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13350 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
13360 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
13370 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 31  M clause */.  i1
13380 36 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  6 nAlloc;      /
13390 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
133a0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
133b0 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
133c0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
133d0 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
133e0 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
133f0 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
13400 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
13410 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
13420 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
13430 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
13440 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
13450 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
13460 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
13470 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
13480 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
13490 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
134a0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
134b0 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
134c0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
134d0 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
134e0 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
134f0 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
13500 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
13510 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
13520 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
13530 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
13540 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
13550 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
13560 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
13570 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
13580 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
13590 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
135a0 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
135b0 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
135c0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
135d0 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
135e0 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
135f0 62 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e  b */.    u8 join
13600 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
13610 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
13620 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
13630 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
13640 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  .    unsigned no
13650 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
13660 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
13670 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
13680 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
13690 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
136a0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
136b0 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
136c0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
136d0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69  .    unsigned vi
136e0 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
136f0 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
13700 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
13710 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
13720 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
13730 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20    u8 iSelectId; 
13740 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63      /* If pSelec
13750 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20  t!=0, the id of 
13760 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69  the sub-select i
13770 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a  n EQP */.#endif.
13780 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
13790 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
137a0 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
137b0 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
137c0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
137d0 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
137e0 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
137f0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
13800 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
13810 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
13820 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
13830 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
13840 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
13850 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
13860 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
13870 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
13880 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65  .    char *zInde
13890 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  x;     /* Identi
138a0 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
138b0 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
138c0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e  clause */.    In
138d0 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
138e0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
138f0 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
13900 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61   to zIndex, if a
13910 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  ny */.  } a[1]; 
13920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
13930 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
13940 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
13950 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
13960 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
13970 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
13980 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
13990 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
139a0 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
139b0 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
139c0 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
139d0 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
139e0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
139f0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
13a00 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
13a10 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
13a20 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
13a30 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
13a40 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
13a50 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
13a60 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
13a70 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
13a80 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
13a90 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
13aa0 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
13ab0 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
13ac0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
13ad0 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
13ae0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
13af0 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
13b00 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
13b10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
13b20 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
13b30 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
13b40 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
13b50 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
13b60 2a 20 41 20 57 68 65 72 65 50 6c 61 6e 20 6f 62  * A WherePlan ob
13b70 6a 65 63 74 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ject holds infor
13b80 6d 61 74 69 6f 6e 20 74 68 61 74 20 64 65 73 63  mation that desc
13b90 72 69 62 65 73 20 61 20 6c 6f 6f 6b 75 70 0a 2a  ribes a lookup.*
13ba0 2a 20 73 74 72 61 74 65 67 79 2e 0a 2a 2a 0a 2a  * strategy..**.*
13bb0 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73  * This object is
13bc0 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20   intended to be 
13bd0 6f 70 61 71 75 65 20 6f 75 74 73 69 64 65 20 6f  opaque outside o
13be0 66 20 74 68 65 20 77 68 65 72 65 2e 63 20 6d 6f  f the where.c mo
13bf0 64 75 6c 65 2e 0a 2a 2a 20 49 74 20 69 73 20 69  dule..** It is i
13c00 6e 63 6c 75 64 65 64 20 68 65 72 65 20 6f 6e 6c  ncluded here onl
13c10 79 20 73 6f 20 74 68 61 74 20 74 68 61 74 20 63  y so that that c
13c20 6f 6d 70 69 6c 65 72 20 77 69 6c 6c 20 6b 6e 6f  ompiler will kno
13c30 77 20 68 6f 77 20 62 69 67 20 69 74 0a 2a 2a 20  w how big it.** 
13c40 69 73 2e 20 20 4e 6f 6e 65 20 6f 66 20 74 68 65  is.  None of the
13c50 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73 20   fields in this 
13c60 6f 62 6a 65 63 74 20 73 68 6f 75 6c 64 20 62 65  object should be
13c70 20 75 73 65 64 20 6f 75 74 73 69 64 65 20 6f 66   used outside of
13c80 0a 2a 2a 20 74 68 65 20 77 68 65 72 65 2e 63 20  .** the where.c 
13c90 6d 6f 64 75 6c 65 2e 0a 2a 2a 0a 2a 2a 20 57 69  module..**.** Wi
13ca0 74 68 69 6e 20 74 68 65 20 75 6e 69 6f 6e 2c 20  thin the union, 
13cb0 70 49 64 78 20 69 73 20 6f 6e 6c 79 20 75 73 65  pIdx is only use
13cc0 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26 57  d when wsFlags&W
13cd0 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20  HERE_INDEXED is 
13ce0 74 72 75 65 2e 0a 2a 2a 20 70 54 65 72 6d 20 69  true..** pTerm i
13cf0 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
13d00 20 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 4d   wsFlags&WHERE_M
13d10 55 4c 54 49 5f 4f 52 20 69 73 20 74 72 75 65 2e  ULTI_OR is true.
13d20 20 20 41 6e 64 20 70 56 74 61 62 49 64 78 0a 2a    And pVtabIdx.*
13d30 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  * is only used w
13d40 68 65 6e 20 77 73 46 6c 61 67 73 26 57 48 45 52  hen wsFlags&WHER
13d50 45 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 69  E_VIRTUALTABLE i
13d60 73 20 74 72 75 65 2e 20 20 49 74 20 69 73 20 6e  s true.  It is n
13d70 65 76 65 72 20 74 68 65 0a 2a 2a 20 63 61 73 65  ever the.** case
13d80 20 74 68 61 74 20 6d 6f 72 65 20 74 68 61 6e 20   that more than 
13d90 6f 6e 65 20 6f 66 20 74 68 65 73 65 20 63 6f 6e  one of these con
13da0 64 69 74 69 6f 6e 73 20 69 73 20 74 72 75 65 2e  ditions is true.
13db0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72 65  .*/.struct Where
13dc0 50 6c 61 6e 20 7b 0a 20 20 75 33 32 20 77 73 46  Plan {.  u32 wsF
13dd0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
13de0 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45          /* WHERE
13df0 5f 2a 20 66 6c 61 67 73 20 74 68 61 74 20 64 65  _* flags that de
13e00 73 63 72 69 62 65 20 74 68 65 20 73 74 72 61 74  scribe the strat
13e10 65 67 79 20 2a 2f 0a 20 20 75 31 36 20 6e 45 71  egy */.  u16 nEq
13e20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13e30 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13e40 72 20 6f 66 20 3d 3d 20 63 6f 6e 73 74 72 61 69  r of == constrai
13e50 6e 74 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4f 42  nts */.  u16 nOB
13e60 53 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Sat;            
13e70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13e80 72 20 6f 66 20 4f 52 44 45 52 20 42 59 20 74 65  r of ORDER BY te
13e90 72 6d 73 20 73 61 74 69 73 66 69 65 64 20 2a 2f  rms satisfied */
13ea0 0a 20 20 64 6f 75 62 6c 65 20 6e 52 6f 77 3b 20  .  double nRow; 
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
13ed0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 28 66  umber of rows (f
13ee0 6f 72 20 45 51 50 29 20 2a 2f 0a 20 20 75 6e 69  or EQP) */.  uni
13ef0 6f 6e 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  on {.    Index *
13f00 70 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 20  pIdx;           
13f10 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
13f20 20 77 68 65 6e 20 57 48 45 52 45 5f 49 4e 44 45   when WHERE_INDE
13f30 58 45 44 20 69 73 20 74 72 75 65 20 2a 2f 0a 20  XED is true */. 
13f40 20 20 20 73 74 72 75 63 74 20 57 68 65 72 65 54     struct WhereT
13f50 65 72 6d 20 2a 70 54 65 72 6d 3b 20 20 20 20 20  erm *pTerm;     
13f60 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
13f70 65 20 74 65 72 6d 20 66 6f 72 20 4f 52 2d 73 65  e term for OR-se
13f80 61 72 63 68 20 2a 2f 0a 20 20 20 20 73 71 6c 69  arch */.    sqli
13f90 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a  te3_index_info *
13fa0 70 56 74 61 62 49 64 78 3b 20 20 2f 2a 20 56 69  pVtabIdx;  /* Vi
13fb0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 64 65  rtual table inde
13fc0 78 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20 7d 20  x to use */.  } 
13fd0 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  u;.};../*.** For
13fe0 20 65 61 63 68 20 6e 65 73 74 65 64 20 6c 6f 6f   each nested loo
13ff0 70 20 69 6e 20 61 20 57 48 45 52 45 20 63 6c 61  p in a WHERE cla
14000 75 73 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  use implementati
14010 6f 6e 2c 20 74 68 65 20 57 68 65 72 65 49 6e 66  on, the WhereInf
14020 6f 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 63  o.** structure c
14030 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
14040 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
14050 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
14060 69 73 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  is structure.** 
14070 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62  is intended to b
14080 65 20 70 72 69 76 61 74 65 20 74 6f 20 74 68 65  e private to the
14090 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20   where.c module 
140a0 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  and should not b
140b0 65 0a 2a 2a 20 61 63 63 65 73 73 20 6f 72 20 6d  e.** access or m
140c0 6f 64 69 66 69 65 64 20 62 79 20 6f 74 68 65 72  odified by other
140d0 20 6d 6f 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20   modules..**.** 
140e0 54 68 65 20 70 49 64 78 49 6e 66 6f 20 66 69 65  The pIdxInfo fie
140f0 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  ld is used to he
14100 6c 70 20 70 69 63 6b 20 74 68 65 20 62 65 73 74  lp pick the best
14110 20 69 6e 64 65 78 20 6f 6e 20 61 0a 2a 2a 20 76   index on a.** v
14120 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
14130 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e  he pIdxInfo poin
14140 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 69 6e 64  ter contains ind
14150 65 78 69 6e 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61  exing.** informa
14160 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 69 2d 74  tion for the i-t
14170 68 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 46  h table in the F
14180 52 4f 4d 20 63 6c 61 75 73 65 20 62 65 66 6f 72  ROM clause befor
14190 65 20 72 65 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a  e reordering..**
141a0 20 41 6c 6c 20 74 68 65 20 70 49 64 78 49 6e 66   All the pIdxInf
141b0 6f 20 70 6f 69 6e 74 65 72 73 20 61 72 65 20 66  o pointers are f
141c0 72 65 65 64 20 62 79 20 77 68 65 72 65 49 6e 66  reed by whereInf
141d0 6f 46 72 65 65 28 29 20 69 6e 20 77 68 65 72 65  oFree() in where
141e0 2e 63 2e 0a 2a 2a 20 41 6c 6c 20 6f 74 68 65 72  .c..** All other
141f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
14200 74 68 65 20 69 2d 74 68 20 57 68 65 72 65 4c 65  the i-th WhereLe
14210 76 65 6c 20 6f 62 6a 65 63 74 20 66 6f 72 20 74  vel object for t
14220 68 65 20 69 2d 74 68 20 74 61 62 6c 65 0a 2a 2a  he i-th table.**
14230 20 61 66 74 65 72 20 46 52 4f 4d 20 63 6c 61 75   after FROM clau
14240 73 65 20 6f 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a  se ordering..*/.
14250 73 74 72 75 63 74 20 57 68 65 72 65 4c 65 76 65  struct WhereLeve
14260 6c 20 7b 0a 20 20 57 68 65 72 65 50 6c 61 6e 20  l {.  WherePlan 
14270 70 6c 61 6e 3b 20 20 20 20 20 20 20 2f 2a 20 71  plan;       /* q
14280 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 74 68  uery plan for th
14290 69 73 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  is element of th
142a0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
142b0 0a 20 20 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e  .  int iLeftJoin
142c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f  ;        /* Memo
142d0 72 79 20 63 65 6c 6c 20 75 73 65 64 20 74 6f 20  ry cell used to 
142e0 69 6d 70 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f  implement LEFT O
142f0 55 54 45 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69  UTER JOIN */.  i
14300 6e 74 20 69 54 61 62 43 75 72 3b 20 20 20 20 20  nt iTabCur;     
14310 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
14320 20 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20   cursor used to 
14330 61 63 63 65 73 73 20 74 68 65 20 74 61 62 6c 65  access the table
14340 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75   */.  int iIdxCu
14350 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
14360 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 75  he VDBE cursor u
14370 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 70 49  sed to access pI
14380 64 78 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  dx */.  int addr
14390 42 72 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Brk;          /*
143a0 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72   Jump here to br
143b0 65 61 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  eak out of the l
143c0 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  oop */.  int add
143d0 72 4e 78 74 3b 20 20 20 20 20 20 20 20 20 20 2f  rNxt;          /
143e0 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 73  * Jump here to s
143f0 74 61 72 74 20 74 68 65 20 6e 65 78 74 20 49 4e  tart the next IN
14400 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a   combination */.
14410 20 20 69 6e 74 20 61 64 64 72 43 6f 6e 74 3b 20    int addrCont; 
14420 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
14430 68 65 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65  here to continue
14440 20 77 69 74 68 20 74 68 65 20 6e 65 78 74 20 6c   with the next l
14450 6f 6f 70 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69  oop cycle */.  i
14460 6e 74 20 61 64 64 72 46 69 72 73 74 3b 20 20 20  nt addrFirst;   
14470 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e       /* First in
14480 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 69 6e 74  struction of int
14490 65 72 69 6f 72 20 6f 66 20 74 68 65 20 6c 6f 6f  erior of the loo
144a0 70 20 2a 2f 0a 20 20 75 38 20 69 46 72 6f 6d 3b  p */.  u8 iFrom;
144b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
144c0 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 74  Which entry in t
144d0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
144e0 2f 0a 20 20 75 38 20 6f 70 2c 20 70 35 3b 20 20  /.  u8 op, p5;  
144f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
14500 6f 64 65 20 61 6e 64 20 50 35 20 6f 66 20 74 68  ode and P5 of th
14510 65 20 6f 70 63 6f 64 65 20 74 68 61 74 20 65 6e  e opcode that en
14520 64 73 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  ds the loop */. 
14530 20 69 6e 74 20 70 31 2c 20 70 32 3b 20 20 20 20   int p1, p2;    
14540 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e         /* Operan
14550 64 73 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ds of the opcode
14560 20 75 73 65 64 20 74 6f 20 65 6e 64 73 20 74 68   used to ends th
14570 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f  e loop */.  unio
14580 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
14590 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
145a0 20 74 68 61 74 20 64 65 70 65 6e 64 73 20 6f 6e   that depends on
145b0 20 70 6c 61 6e 2e 77 73 46 6c 61 67 73 20 2a 2f   plan.wsFlags */
145c0 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20  .    struct {.  
145d0 20 20 20 20 69 6e 74 20 6e 49 6e 3b 20 20 20 20      int nIn;    
145e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
145f0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
14600 6e 20 61 49 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20  n aInLoop[] */. 
14610 20 20 20 20 20 73 74 72 75 63 74 20 49 6e 4c 6f       struct InLo
14620 6f 70 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  op {.        int
14630 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
14640 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
14650 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
14660 68 69 73 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  his IN operator 
14670 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61  */.        int a
14680 64 64 72 49 6e 54 6f 70 3b 20 20 20 20 20 20 20  ddrInTop;       
14690 20 20 2f 2a 20 54 6f 70 20 6f 66 20 74 68 65 20    /* Top of the 
146a0 49 4e 20 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 20  IN loop */.     
146b0 20 7d 20 2a 61 49 6e 4c 6f 6f 70 3b 20 20 20 20   } *aInLoop;    
146c0 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
146d0 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
146e0 20 6e 65 73 74 65 64 20 49 4e 20 6f 70 65 72 61   nested IN opera
146f0 74 6f 72 20 2a 2f 0a 20 20 20 20 7d 20 69 6e 3b  tor */.    } in;
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 2f 2a 20 55 73 65 64 20 77 68 65 6e 20 70 6c   /* Used when pl
14720 61 6e 2e 77 73 46 6c 61 67 73 26 57 48 45 52 45  an.wsFlags&WHERE
14730 5f 49 4e 5f 41 42 4c 45 20 2a 2f 0a 20 20 20 20  _IN_ABLE */.    
14740 49 6e 64 65 78 20 2a 70 43 6f 76 69 64 78 3b 20  Index *pCovidx; 
14750 20 20 20 20 20 20 2f 2a 20 50 6f 73 73 69 62 6c        /* Possibl
14760 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  e covering index
14770 20 66 6f 72 20 57 48 45 52 45 5f 4d 55 4c 54 49   for WHERE_MULTI
14780 5f 4f 52 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20  _OR */.  } u;.  
14790 64 6f 75 62 6c 65 20 72 4f 70 74 43 6f 73 74 3b  double rOptCost;
147a0 20 20 20 20 20 20 2f 2a 20 22 4f 70 74 69 6d 61        /* "Optima
147b0 6c 22 20 63 6f 73 74 20 66 6f 72 20 74 68 69 73  l" cost for this
147c0 20 6c 65 76 65 6c 20 2a 2f 0a 0a 20 20 2f 2a 20   level */..  /* 
147d0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69  The following fi
147e0 65 6c 64 20 69 73 20 72 65 61 6c 6c 79 20 6e 6f  eld is really no
147f0 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 75  t part of the cu
14800 72 72 65 6e 74 20 6c 65 76 65 6c 2e 20 20 42 75  rrent level.  Bu
14810 74 0a 20 20 2a 2a 20 77 65 20 6e 65 65 64 20 61  t.  ** we need a
14820 20 70 6c 61 63 65 20 74 6f 20 63 61 63 68 65 20   place to cache 
14830 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
14840 64 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  dex information 
14850 66 6f 72 20 65 61 63 68 0a 20 20 2a 2a 20 76 69  for each.  ** vi
14860 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 74  rtual table in t
14870 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 61  he FROM clause a
14880 6e 64 20 74 68 65 20 57 68 65 72 65 4c 65 76 65  nd the WhereLeve
14890 6c 20 73 74 72 75 63 74 75 72 65 20 69 73 0a 20  l structure is. 
148a0 20 2a 2a 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74   ** a convenient
148b0 20 70 6c 61 63 65 20 73 69 6e 63 65 20 74 68 65   place since the
148c0 72 65 20 69 73 20 6f 6e 65 20 57 68 65 72 65 4c  re is one WhereL
148d0 65 76 65 6c 20 66 6f 72 20 65 61 63 68 20 46 52  evel for each FR
148e0 4f 4d 20 63 6c 61 75 73 65 0a 20 20 2a 2a 20 65  OM clause.  ** e
148f0 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 73  lement..  */.  s
14900 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
14910 6f 20 2a 70 49 64 78 49 6e 66 6f 3b 20 20 2f 2a  o *pIdxInfo;  /*
14920 20 49 6e 64 65 78 20 69 6e 66 6f 20 66 6f 72 20   Index info for 
14930 6e 2d 74 68 20 73 6f 75 72 63 65 20 74 61 62 6c  n-th source tabl
14940 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 46  e */.};../*.** F
14950 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
14960 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
14970 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
14980 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
14990 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
149a0 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
149b0 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a  lags member..*/.
149c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
149d0 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
149e0 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
149f0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14a00 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
14a10 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
14a20 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
14a30 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
14a40 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
14a50 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
14a60 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
14a70 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
14a80 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
14a90 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
14aa0 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
14ab0 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
14ac0 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
14ad0 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
14ae0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
14af0 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
14b00 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  008 /* Ok to ret
14b10 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
14b20 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
14b30 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f  ine WHERE_OMIT_O
14b40 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31  PEN_CLOSE  0x001
14b50 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f  0 /* Table curso
14b60 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f  rs are already o
14b70 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  pen */.#define W
14b80 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45  HERE_FORCE_TABLE
14b90 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20        0x0020 /* 
14ba0 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e  Do not use an in
14bb0 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20  dex-only search 
14bc0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14bd0 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20  _ONETABLE_ONLY  
14be0 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79    0x0040 /* Only
14bf0 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61   code the 1st ta
14c00 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20  ble in pTabList 
14c10 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14c20 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20  _AND_ONLY       
14c30 20 20 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27    0x0080 /* Don'
14c40 74 20 75 73 65 20 69 6e 64 69 63 65 73 20 66 6f  t use indices fo
14c50 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 0a 2f  r OR terms */../
14c60 2a 0a 2a 2a 20 54 68 65 20 57 48 45 52 45 20 63  *.** The WHERE c
14c70 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
14c80 20 72 6f 75 74 69 6e 65 20 68 61 73 20 74 77 6f   routine has two
14c90 20 68 61 6c 76 65 73 2e 20 20 54 68 65 0a 2a 2a   halves.  The.**
14ca0 20 66 69 72 73 74 20 70 61 72 74 20 64 6f 65 73   first part does
14cb0 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
14cc0 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 61 6e 64  e WHERE loop and
14cd0 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a 20 68   the second.** h
14ce0 61 6c 66 20 64 6f 65 73 20 74 68 65 20 74 61 69  alf does the tai
14cf0 6c 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c  l of the WHERE l
14d00 6f 6f 70 2e 20 20 41 6e 20 69 6e 73 74 61 6e 63  oop.  An instanc
14d10 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
14d20 75 63 74 75 72 65 20 69 73 20 72 65 74 75 72 6e  ucture is return
14d30 65 64 20 62 79 20 74 68 65 20 66 69 72 73 74 20  ed by the first 
14d40 68 61 6c 66 20 61 6e 64 20 70 61 73 73 65 64 0a  half and passed.
14d50 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 65 63 6f  ** into the seco
14d60 6e 64 20 68 61 6c 66 20 74 6f 20 67 69 76 65 20  nd half to give 
14d70 73 6f 6d 65 20 63 6f 6e 74 69 6e 75 69 74 79 2e  some continuity.
14d80 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72 65  .*/.struct Where
14d90 49 6e 66 6f 20 7b 0a 20 20 50 61 72 73 65 20 2a  Info {.  Parse *
14da0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
14db0 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20 61 6e     /* Parsing an
14dc0 64 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6e  d code generatin
14dd0 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 53  g context */.  S
14de0 72 63 4c 69 73 74 20 2a 70 54 61 62 4c 69 73 74  rcList *pTabList
14df0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
14e00 20 6f 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68   of tables in th
14e10 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 31 36 20  e join */.  u16 
14e20 6e 4f 42 53 61 74 3b 20 20 20 20 20 20 20 20 20  nOBSat;         
14e30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14e40 6f 66 20 4f 52 44 45 52 20 42 59 20 74 65 72 6d  of ORDER BY term
14e50 73 20 73 61 74 69 73 66 69 65 64 20 62 79 20 69  s satisfied by i
14e60 6e 64 69 63 65 73 20 2a 2f 0a 20 20 75 31 36 20  ndices */.  u16 
14e70 77 63 74 72 6c 46 6c 61 67 73 3b 20 20 20 20 20  wctrlFlags;     
14e80 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 6f        /* Flags o
14e90 72 69 67 69 6e 61 6c 6c 79 20 70 61 73 73 65 64  riginally passed
14ea0 20 74 6f 20 73 71 6c 69 74 65 33 57 68 65 72 65   to sqlite3Where
14eb0 42 65 67 69 6e 28 29 20 2a 2f 0a 20 20 75 38 20  Begin() */.  u8 
14ec0 6f 6b 4f 6e 65 50 61 73 73 3b 20 20 20 20 20 20  okOnePass;      
14ed0 20 20 20 20 20 20 20 2f 2a 20 4f 6b 20 74 6f 20         /* Ok to 
14ee0 75 73 65 20 6f 6e 65 2d 70 61 73 73 20 61 6c 67  use one-pass alg
14ef0 6f 72 69 74 68 6d 20 66 6f 72 20 55 50 44 41 54  orithm for UPDAT
14f00 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38  E/DELETE */.  u8
14f10 20 75 6e 74 65 73 74 65 64 54 65 72 6d 73 3b 20   untestedTerms; 
14f20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 74 20 61          /* Not a
14f30 6c 6c 20 57 48 45 52 45 20 74 65 72 6d 73 20 72  ll WHERE terms r
14f40 65 73 6f 6c 76 65 64 20 62 79 20 6f 75 74 65 72  esolved by outer
14f50 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75 38 20 65 44   loop */.  u8 eD
14f60 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
14f70 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
14f80 68 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  he WHERE_DISTINC
14f90 54 5f 2a 20 76 61 6c 75 65 73 20 62 65 6c 6f 77  T_* values below
14fa0 20 2a 2f 0a 20 20 69 6e 74 20 69 54 6f 70 3b 20   */.  int iTop; 
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 2f 2a 20 54 68 65 20 76 65 72 79 20 62 65 67 69  /* The very begi
14fd0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 57 48 45  nning of the WHE
14fe0 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74  RE loop */.  int
14ff0 20 69 43 6f 6e 74 69 6e 75 65 3b 20 20 20 20 20   iContinue;     
15000 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
15010 65 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20  ere to continue 
15020 77 69 74 68 20 6e 65 78 74 20 72 65 63 6f 72 64  with next record
15030 20 2a 2f 0a 20 20 69 6e 74 20 69 42 72 65 61 6b   */.  int iBreak
15040 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15050 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
15060 62 72 65 61 6b 20 6f 75 74 20 6f 66 20 74 68 65  break out of the
15070 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   loop */.  int n
15080 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
15090 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
150a0 66 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 2a 2f  f nested loop */
150b0 0a 20 20 73 74 72 75 63 74 20 57 68 65 72 65 43  .  struct WhereC
150c0 6c 61 75 73 65 20 2a 70 57 43 3b 20 20 2f 2a 20  lause *pWC;  /* 
150d0 44 65 63 6f 6d 70 6f 73 69 74 69 6f 6e 20 6f 66  Decomposition of
150e0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
150f0 65 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 73 61  e */.  double sa
15100 76 65 64 4e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  vedNQueryLoop;  
15110 20 2f 2a 20 70 50 61 72 73 65 2d 3e 6e 51 75 65   /* pParse->nQue
15120 72 79 4c 6f 6f 70 20 6f 75 74 73 69 64 65 20 74  ryLoop outside t
15130 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f  he WHERE loop */
15140 0a 20 20 64 6f 75 62 6c 65 20 6e 52 6f 77 4f 75  .  double nRowOu
15150 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
15160 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
15170 20 6f 66 20 6f 75 74 70 75 74 20 72 6f 77 73 20   of output rows 
15180 2a 2f 0a 20 20 57 68 65 72 65 4c 65 76 65 6c 20  */.  WhereLevel 
15190 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  a[1];          /
151a0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
151b0 6f 75 74 20 65 61 63 68 20 6e 65 73 74 20 6c 6f  out each nest lo
151c0 6f 70 20 69 6e 20 57 48 45 52 45 20 2a 2f 0a 7d  op in WHERE */.}
151d0 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
151e0 6c 75 65 73 20 66 6f 72 20 57 68 65 72 65 49 6e  lues for WhereIn
151f0 66 6f 2e 65 44 69 73 74 69 6e 63 74 20 61 6e 64  fo.eDistinct and
15200 20 44 69 73 74 69 6e 63 74 43 74 78 2e 65 54 6e   DistinctCtx.eTn
15210 63 74 54 79 70 65 20 2a 2f 0a 23 64 65 66 69 6e  ctType */.#defin
15220 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
15230 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
15240 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
15250 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
15260 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
15270 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
15280 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
15290 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
152a0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
152b0 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
152c0 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
152d0 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
152e0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
152f0 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
15300 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
15310 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
15320 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
15330 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
15340 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
15350 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
15360 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
15370 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
15380 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
15390 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
153a0 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
153b0 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
153c0 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
153d0 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
153e0 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
153f0 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
15400 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
15410 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
15420 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
15430 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
15440 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
15450 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
15460 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
15470 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
15480 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
15490 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
154a0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
154b0 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
154c0 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
154d0 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
154e0 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
154f0 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
15500 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
15510 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
15520 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
15530 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
15540 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
15550 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
15560 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
15570 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
15580 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
15590 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
155a0 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
155b0 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
155c0 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
155d0 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
155e0 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
155f0 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
15600 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
15610 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
15620 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
15630 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
15640 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
15650 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
15660 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
15670 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
15680 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
15690 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
156a0 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
156b0 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
156c0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
156d0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
156e0 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
156f0 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
15700 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
15710 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
15720 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
15730 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
15740 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
15750 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
15760 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
15770 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
15780 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
15790 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
157a0 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
157b0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
157c0 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
157d0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
157e0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
157f0 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
15800 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
15810 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
15820 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
15830 69 6f 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  ions */.  AggInf
15840 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
15850 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
15860 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
15870 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
15880 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
15890 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
158a0 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
158b0 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
158c0 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
158d0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
158e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
158f0 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
15900 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
15910 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
15920 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15930 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
15940 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
15950 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
15960 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20    u8 ncFlags;   
15970 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
15980 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
15990 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
159a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
159b0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
159c0 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
159d0 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
159e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
159f0 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20 20 20  lowAgg  0x01    
15a00 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
15a10 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
15a20 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
15a30 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
15a40 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f  0x02    /* One o
15a50 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
15a60 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
15a70 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
15a80 43 68 65 63 6b 20 20 20 30 78 30 34 20 20 20 20  Check   0x04    
15a90 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
15aa0 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
15ab0 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
15ac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
15ad0 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20 20 20  nAggFunc 0x08   
15ae0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
15af0 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
15b00 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
15b10 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
15b20 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
15b30 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
15b40 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
15b50 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
15b60 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
15b70 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
15b80 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
15b90 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
15ba0 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
15bb0 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
15bc0 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
15bd0 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
15be0 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
15bf0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
15c00 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
15c10 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
15c20 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
15c30 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
15c40 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
15c50 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
15c60 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
15c70 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
15c80 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
15c90 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
15ca0 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
15cb0 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
15cc0 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
15cd0 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
15ce0 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
15cf0 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
15d00 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
15d10 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
15d20 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
15d30 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
15d40 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
15d50 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
15d60 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
15d70 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
15d80 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
15d90 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
15da0 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
15db0 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
15dc0 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
15dd0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
15de0 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
15df0 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
15e00 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
15e10 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
15e20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
15e30 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
15e40 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
15e50 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
15e60 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
15e70 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
15e80 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
15e90 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
15ea0 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
15eb0 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
15ec0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
15ed0 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
15ee0 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
15ef0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
15f00 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
15f10 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
15f20 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
15f30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
15f40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
15f50 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
15f60 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
15f70 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
15f80 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
15f90 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
15fa0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
15fb0 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
15fc0 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
15fd0 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36  _EXCEPT */.  u16
15fe0 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
15ff0 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
16000 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
16010 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
16020 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
16030 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
16040 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
16050 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
16060 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
16070 5b 33 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [3];   /* OP_Ope
16080 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
16090 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
160a0 65 6c 65 63 74 20 2a 2f 0a 20 20 64 6f 75 62 6c  elect */.  doubl
160b0 65 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20  e nSelectRow;   
160c0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
160d0 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
160e0 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rows */.  SrcLis
160f0 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20  t *pSrc;        
16100 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61   /* The FROM cla
16110 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
16120 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20  Where;          
16130 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
16140 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
16150 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
16160 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20  /* The GROUP BY 
16170 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
16180 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20   *pHaving;      
16190 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47     /* The HAVING
161a0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
161b0 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
161c0 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52      /* The ORDER
161d0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
161e0 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20  Select *pPrior; 
161f0 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20         /* Prior 
16200 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
16210 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
16220 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63  ement */.  Selec
16230 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
16240 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74    /* Next select
16250 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20   to the left in 
16260 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20  a compound */.  
16270 53 65 6c 65 63 74 20 2a 70 52 69 67 68 74 6d 6f  Select *pRightmo
16280 73 74 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 2d  st;    /* Right-
16290 6d 6f 73 74 20 73 65 6c 65 63 74 20 69 6e 20 61  most select in a
162a0 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
162b0 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
162c0 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20  Expr *pLimit;   
162d0 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20         /* LIMIT 
162e0 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
162f0 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
16300 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66   */.  Expr *pOff
16310 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  set;         /* 
16320 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f  OFFSET expressio
16330 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
16340 74 20 75 73 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  t used. */.};../
16350 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
16360 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ues for Select.s
16370 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53  elFlags.  The "S
16380 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73  F" prefix stands
16390 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20   for.** "Select 
163a0 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Flag"..*/.#defin
163b0 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20  e SF_Distinct   
163c0 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
163d0 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65  Output should be
163e0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65   DISTINCT */.#de
163f0 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
16400 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20          0x0002  
16410 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
16420 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
16430 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
16440 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 20  Aggregate       
16450 30 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61  0x0004  /* Conta
16460 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
16470 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
16480 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65  ne SF_UsesEpheme
16490 72 61 6c 20 20 20 30 78 30 30 30 38 20 20 2f 2a  ral   0x0008  /*
164a0 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70   Uses the OpenEp
164b0 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a  hemeral opcode *
164c0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70  /.#define SF_Exp
164d0 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78 30  anded        0x0
164e0 30 31 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53  010  /* sqlite3S
164f0 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61  electExpand() ca
16500 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a  lled on this */.
16510 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79  #define SF_HasTy
16520 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30 32  peInfo     0x002
16530 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75  0  /* FROM subqu
16540 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65  eries have Table
16550 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65   metadata */.#de
16560 66 69 6e 65 20 53 46 5f 55 73 65 53 6f 72 74 65  fine SF_UseSorte
16570 72 20 20 20 20 20 20 20 30 78 30 30 34 30 20 20  r       0x0040  
16580 2f 2a 20 53 6f 72 74 20 75 73 69 6e 67 20 61 20  /* Sort using a 
16590 73 6f 72 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e  sorter */.#defin
165a0 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
165b0 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20       0x0080  /* 
165c0 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
165d0 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
165e0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 74  /.#define SF_Mat
165f0 65 72 69 61 6c 69 7a 65 20 20 20 20 20 30 78 30  erialize     0x0
16600 31 30 30 20 20 2f 2a 20 46 6f 72 63 65 20 6d 61  100  /* Force ma
16610 74 65 72 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  terialization of
16620 20 76 69 65 77 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a   views */.../*.*
16630 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
16640 20 61 20 73 65 6c 65 63 74 20 63 61 6e 20 62 65   a select can be
16650 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
16660 73 65 76 65 72 61 6c 20 77 61 79 73 2e 20 20 54  several ways.  T
16670 68 65 0a 2a 2a 20 22 53 52 54 22 20 70 72 65 66  he.** "SRT" pref
16680 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
16690 20 52 65 73 75 6c 74 20 54 79 70 65 22 2e 0a 2a   Result Type"..*
166a0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e  /.#define SRT_Un
166b0 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a  ion        1  /*
166c0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
166d0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
166e0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
166f0 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20  _Except       2 
16700 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c   /* Remove resul
16710 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69  t from a UNION i
16720 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
16730 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
16740 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69   3  /* Store 1 i
16750 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
16760 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65  not empty */.#de
16770 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64  fine SRT_Discard
16780 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e        4  /* Do n
16790 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75  ot save the resu
167a0 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a  lts anywhere */.
167b0 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
167c0 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
167d0 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
167e0 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
167f0 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
16800 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73  rby(X) ((X->eDes
16810 74 29 3c 3d 53 52 54 5f 44 69 73 63 61 72 64 29  t)<=SRT_Discard)
16820 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
16830 74 70 75 74 20 20 20 20 20 20 20 35 20 20 2f 2a  tput       5  /*
16840 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
16850 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
16860 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
16870 20 20 20 20 20 20 20 36 20 20 2f 2a 20 53 74 6f         6  /* Sto
16880 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
16890 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
168a0 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
168b0 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f         7  /* Sto
168c0 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
168d0 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
168e0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
168f0 62 6c 65 20 20 20 20 20 20 20 20 38 20 20 2f 2a  ble        8  /*
16900 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
16910 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
16920 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
16930 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68  .#define SRT_Eph
16940 65 6d 54 61 62 20 20 20 20 20 39 20 20 2f 2a 20  emTab     9  /* 
16950 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74  Create transient
16960 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c   tab and store l
16970 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f  ike SRT_Table */
16980 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72  .#define SRT_Cor
16990 6f 75 74 69 6e 65 20 20 20 31 30 20 20 2f 2a 20  outine   10  /* 
169a0 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c  Generate a singl
169b0 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  e row of result 
169c0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
169d0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
169e0 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
169f0 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
16a00 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
16a10 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
16a20 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
16a30 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
16a40 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
16a50 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
16a60 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
16a70 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
16a80 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20  bove. */.  char 
16a90 61 66 66 53 64 73 74 3b 20 20 20 20 20 2f 2a 20  affSdst;     /* 
16aa0 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
16ab0 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
16ac0 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  t */.  int iSDPa
16ad0 72 6d 3b 20 20 20 20 20 20 2f 2a 20 41 20 70 61  rm;      /* A pa
16ae0 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
16af0 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
16b00 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
16b10 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
16b20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
16b30 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
16b40 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
16b50 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
16b60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16b70 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
16b80 74 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ted */.};../*.**
16b90 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
16ba0 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
16bb0 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
16bc0 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
16bd0 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62  NCREMENT .** tab
16be0 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
16bf0 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
16c00 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
16c10 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
16c20 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
16c30 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
16c40 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
16c50 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
16c60 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
16c70 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
16c80 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
16c90 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
16ca0 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
16cb0 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
16cc0 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
16cd0 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69  erts are down wi
16ce0 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
16cf0 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
16d00 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
16d10 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
16d20 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
16d30 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
16d40 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
16d50 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
16d60 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
16d70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
16d80 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
16d90 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
16da0 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
16db0 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
16dc0 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
16dd0 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
16de0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
16df0 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
16e00 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
16e10 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
16e20 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
16e30 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
16e40 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
16e50 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
16e60 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
16e70 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
16e80 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
16e90 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
16ea0 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
16eb0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
16ec0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
16ed0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
16ee0 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
16ef0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
16f00 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
16f10 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
16f20 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
16f30 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
16f40 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
16f50 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a  eated for each .
16f60 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
16f70 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
16f80 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
16f90 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
16fa0 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
16fb0 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
16fc0 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
16fd0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
16fe0 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
16ff0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
17000 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
17010 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
17020 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
17030 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
17040 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
17050 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
17060 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
17070 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
17080 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
17090 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
170a0 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
170b0 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
170c0 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
170d0 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
170e0 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
170f0 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
17100 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
17110 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
17120 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
17130 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
17140 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
17150 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
17160 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
17170 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
17180 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
17190 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
171a0 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
171b0 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
171c0 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
171d0 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
171e0 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
171f0 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
17200 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
17210 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29   .** statements)
17220 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
17230 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
17240 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
17250 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
17260 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
17270 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
17280 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
17290 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
172a0 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
172b0 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
172c0 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
172d0 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
172e0 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
172f0 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
17300 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
17310 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
17320 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
17330 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
17340 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
17350 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
17360 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
17370 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
17380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
17390 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
173a0 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
173b0 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
173c0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
173d0 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
173e0 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
173f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
17400 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
17410 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
17420 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
17430 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
17440 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
17450 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
17460 64 65 66 20 73 71 6c 69 74 65 33 5f 75 69 6e 74  def sqlite3_uint
17470 36 34 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73  64 yDbMask;.#els
17480 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
17490 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
174a0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
174b0 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
174c0 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
174d0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
174e0 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
174f0 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
17500 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
17510 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
17520 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
17530 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
17540 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
17550 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
17560 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
17570 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
17580 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
17590 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
175a0 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
175b0 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
175c0 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
175d0 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
175e0 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
175f0 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
17600 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
17610 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
17620 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
17630 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
17640 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
17650 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
17660 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
17670 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
17680 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
17690 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
176a0 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
176b0 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
176c0 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
176d0 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
176e0 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
176f0 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
17700 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
17710 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
17720 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
17730 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
17740 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
17750 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
17760 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
17770 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
17780 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
17790 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
177a0 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
177b0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
177c0 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
177d0 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
177e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
177f0 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
17800 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
17810 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
17820 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
17830 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
17840 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
17850 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
17860 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
17870 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
17880 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
17890 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
178a0 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
178b0 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
178c0 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
178d0 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
178e0 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
178f0 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
17900 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
17910 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
17920 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
17930 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
17940 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
17950 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
17960 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
17970 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
17980 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
17990 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
179a0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
179b0 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
179c0 20 20 75 38 20 6e 54 65 6d 70 49 6e 55 73 65 3b    u8 nTempInUse;
179d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
179e0 20 6f 66 20 61 54 65 6d 70 52 65 67 5b 5d 20 63   of aTempReg[] c
179f0 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
17a00 20 6f 75 74 20 2a 2f 0a 20 20 75 38 20 6e 43 6f   out */.  u8 nCo
17a10 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f  lCache;        /
17a20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
17a30 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  ies in aColCache
17a40 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 43 6f 6c 43  [] */.  u8 iColC
17a50 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  ache;        /* 
17a60 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 61 43  Next entry in aC
17a70 6f 6c 43 61 63 68 65 5b 5d 20 74 6f 20 72 65 70  olCache[] to rep
17a80 6c 61 63 65 20 2a 2f 0a 20 20 75 38 20 69 73 4d  lace */.  u8 isM
17a90 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
17aa0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
17ab0 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
17ac0 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
17ad0 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
17ae0 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
17af0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
17b00 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
17b10 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
17b20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  */.  int aTempRe
17b30 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c  g[8];     /* Hol
17b40 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
17b50 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
17b60 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67  s */.  int nRang
17b70 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53  eReg;       /* S
17b80 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  ize of the tempo
17b90 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
17ba0 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61  ock */.  int iRa
17bb0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
17bc0 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
17bd0 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  in temporary reg
17be0 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
17bf0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
17c00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17c10 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
17c20 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20  /.  int nTab;   
17c30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17c40 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79  er of previously
17c50 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20   allocated VDBE 
17c60 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
17c70 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
17c80 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
17c90 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
17ca0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
17cb0 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20   nSet;          
17cc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
17cd0 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  ets used so far 
17ce0 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20  */.  int nOnce; 
17cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17d00 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69  ber of OP_Once i
17d10 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66  nstructions so f
17d20 61 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61  ar */.  int ckBa
17d30 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  se;          /* 
17d40 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66  Base register of
17d50 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65   data during che
17d60 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
17d70 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65  /.  int iCacheLe
17d80 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43  vel;     /* ColC
17d90 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20  ache valid when 
17da0 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76  aColCache[].iLev
17db0 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20  el<=iCacheLevel 
17dc0 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43  */.  int iCacheC
17dd0 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75  nt;       /* Cou
17de0 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e  nter used to gen
17df0 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b  erate aColCache[
17e00 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a  ].lru values */.
17e10 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63    struct yColCac
17e20 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61  he {.    int iTa
17e30 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
17e40 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e  * Table cursor n
17e50 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  umber */.    int
17e60 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
17e70 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75     /* Table colu
17e80 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  mn number */.   
17e90 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20   u8 tempReg;    
17ea0 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69         /* iReg i
17eb0 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65  s a temp registe
17ec0 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20  r that needs to 
17ed0 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20  be freed */.    
17ee0 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
17ef0 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67        /* Nesting
17f00 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e   level */.    in
17f10 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20  t iReg;         
17f20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20      /* Reg with 
17f30 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
17f40 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f  lumn. 0 means no
17f50 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c  ne. */.    int l
17f60 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ru;             
17f70 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74   /* Least recent
17f80 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61  ly used entry ha
17f90 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  s the smallest v
17fa0 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c  alue */.  } aCol
17fb0 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43  Cache[SQLITE_N_C
17fc0 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e  OLCACHE];  /* On
17fd0 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
17fe0 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f  n cache entry */
17ff0 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65  .  yDbMask write
18000 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74  Mask;   /* Start
18010 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
18020 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61  tion on these da
18030 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62  tabases */.  yDb
18040 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b  Mask cookieMask;
18050 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20    /* Bitmask of 
18060 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20  schema verified 
18070 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69  databases */.  i
18080 6e 74 20 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20  nt cookieGoto;  
18090 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
180a0 66 20 4f 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f  f OP_Goto to coo
180b0 6b 69 65 20 76 65 72 69 66 69 65 72 20 73 75 62  kie verifier sub
180c0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  routine */.  int
180d0 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c   cookieValue[SQL
180e0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
180f0 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20  +2];  /* Values 
18100 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65  of cookies to ve
18110 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  rify */.  int re
18120 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
18130 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
18140 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
18150 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
18160 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
18170 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
18180 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
18190 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
181a0 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
181b0 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
181c0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
181d0 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
181e0 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
181f0 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  ub-program */.  
18200 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
18210 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
18220 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
18230 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
18240 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66  arsed */.#ifndef
18250 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
18260 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
18270 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
18280 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18290 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
182a0 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
182b0 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
182c0 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
182d0 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
182e0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
182f0 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
18300 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
18310 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
18320 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
18330 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
18340 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
18350 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
18360 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
18370 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
18380 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
18390 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
183a0 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
183b0 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
183c0 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
183d0 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
183e0 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
183f0 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
18400 20 64 6f 75 62 6c 65 20 6e 51 75 65 72 79 4c 6f   double nQueryLo
18410 6f 70 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  op;   /* Estimat
18420 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  ed number of ite
18430 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
18440 72 79 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  ry */.  u32 oldm
18450 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
18460 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
18470 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
18480 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
18490 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
184a0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
184b0 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
184c0 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
184d0 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
184e0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
184f0 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
18500 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
18510 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
18520 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
18530 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
18540 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
18550 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
18560 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
18570 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
18580 0a 0a 20 20 2f 2a 20 41 62 6f 76 65 20 69 73 20  ..  /* Above is 
18590 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
185a0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
185b0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
185c0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
185d0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
185e0 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72  n */..  int nVar
185f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18600 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
18610 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
18620 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
18630 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56  far */.  int nzV
18640 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
18650 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18660 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20  available slots 
18670 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20  in azVar[] */.  
18680 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
18690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
186a0 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
186b0 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
186c0 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
186d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
186e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
186f0 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
18700 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
18710 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
18720 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
18730 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
18740 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
18750 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18760 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
18770 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
18780 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
187a0 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
187b0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
187c0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
187d0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
187e0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
187f0 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
18800 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
18810 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
18820 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
18830 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
18840 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
18850 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
18860 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
18870 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
18880 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
18890 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
188a0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
188b0 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
188c0 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
188d0 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
188e0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
188f0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
18900 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
18910 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
18920 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
18930 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
18940 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
18950 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
18960 20 20 69 6e 74 20 2a 61 41 6c 69 61 73 3b 20 20    int *aAlias;  
18970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
18980 65 67 69 73 74 65 72 20 75 73 65 64 20 74 6f 20  egister used to 
18990 68 6f 6c 64 20 61 6c 69 61 73 65 64 20 72 65 73  hold aliased res
189a0 75 6c 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ult */.  const c
189b0 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
189c0 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
189d0 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
189e0 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
189f0 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
18a00 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
18a10 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
18a20 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
18a30 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
18a40 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
18a50 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
18a60 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
18a70 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
18a80 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
18a90 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
18aa0 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
18ab0 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
18ac0 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
18ad0 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65  lbacks */.  Toke
18ae0 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20  n sNameToken;   
18af0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77        /* Token w
18b00 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20  ith unqualified 
18b10 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61  schema object na
18b20 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c  me */.  Token sL
18b30 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  astToken;       
18b40 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f    /* The last to
18b50 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69  ken parsed */.#i
18b60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
18b70 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
18b80 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20   Token sArg;    
18b90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
18ba0 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61  mplete text of a
18bb0 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74   module argument
18bc0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70   */.  Table **ap
18bd0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
18be0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69  /* Pointer to vi
18bf0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65  rtual tables nee
18c00 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a  ding locking */.
18c10 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a  #endif.  Table *
18c20 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20  pZombieTab;     
18c30 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61     /* List of Ta
18c40 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64  ble objects to d
18c50 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65  elete after code
18c60 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65   gen */.  Trigge
18c70 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72  rPrg *pTriggerPr
18c80 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69  g;  /* Linked li
18c90 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67  st of coded trig
18ca0 67 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  gers */.};../*.*
18cb0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
18cc0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
18cd0 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
18ce0 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
18cf0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
18d00 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
18d10 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
18d20 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
18d30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
18d40 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
18d50 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
18d60 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
18d70 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
18d80 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
18d90 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
18da0 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
18db0 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
18dc0 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
18dd0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
18de0 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
18df0 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
18e00 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
18e10 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
18e20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
18e30 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
18e40 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
18e50 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
18e60 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
18e70 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
18e80 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
18e90 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
18ea0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
18eb0 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
18ec0 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
18ed0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65   opcodes..*/.#de
18ee0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
18ef0 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
18f00 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
18f10 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
18f20 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
18f30 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30  _LASTROWID     0
18f40 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f  x02    /* Set to
18f50 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74   update db->last
18f60 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  Rowid */.#define
18f70 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
18f80 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a        0x04    /*
18f90 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20   This OP_Insert 
18fa0 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45  is an sql UPDATE
18fb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
18fc0 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20  AG_APPEND       
18fd0 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73   0x08    /* This
18fe0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
18ff0 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64   an append */.#d
19000 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45  efine OPFLAG_USE
19010 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20  SEEKRESULT 0x10 
19020 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f     /* Try to avo
19030 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72  id a seek in Btr
19040 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64  eeInsert() */.#d
19050 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45  efine OPFLAG_CLE
19060 41 52 43 41 43 48 45 20 20 20 20 30 78 32 30 20  ARCACHE    0x20 
19070 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73 65 75     /* Clear pseu
19080 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65 20 69  do-table cache i
19090 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23  n OP_Column */.#
190a0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
190b0 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
190c0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
190d0 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
190e0 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
190f0 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
19100 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
19110 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
19120 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
19130 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
19140 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
19150 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
19160 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
19170 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
19180 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
19190 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
191a0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32 20    0x02    /* P2 
191b0 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
191c0 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
191d0 72 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  r */../*. * Each
191e0 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
191f0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
19200 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
19210 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
19220 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
19230 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f  igger. . *. * Po
19240 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
19250 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
19260 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
19270 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
19280 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
19290 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
192a0 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
192b0 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
192c0 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20  esents the . *  
192d0 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
192e0 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
192f0 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
19300 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
19310 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
19320 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
19330 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
19340 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
19350 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
19360 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
19370 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
19380 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
19390 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
193a0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
193b0 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
193c0 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
193d0 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
193e0 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
193f0 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
19400 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
19410 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
19420 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
19430 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
19440 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
19450 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
19460 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
19470 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
19480 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
19490 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
194a0 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
194b0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
194c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
194d0 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
194e0 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
194f0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
19500 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
19510 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
19520 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
19530 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
19540 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
19550 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
19560 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
19570 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
19580 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
19590 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
195a0 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
195b0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
195c0 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
195d0 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
195e0 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
195f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19600 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
19610 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
19620 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
19630 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
19640 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
19650 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
19660 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
19670 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19690 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
196a0 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
196b0 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
196c0 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
196d0 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
196e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
196f0 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
19700 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
19710 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
19720 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
19730 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
19740 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
19750 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
19760 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
19770 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
19780 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
19790 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
197a0 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
197b0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
197c0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
197d0 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
197e0 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
197f0 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
19800 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
19810 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
19820 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
19830 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hich. .**.** If 
19840 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
19850 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
19860 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
19870 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
19880 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
19890 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
198a0 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
198b0 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
198c0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
198d0 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
198e0 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
198f0 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
19900 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
19910 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
19920 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
19930 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
19940 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
19950 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
19960 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
19970 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
19980 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
19990 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
199a0 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
199b0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
199c0 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
199d0 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
199e0 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
199f0 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
19a00 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
19a10 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
19a20 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
19a30 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
19a40 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
19a50 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
19a60 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
19a70 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
19a80 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
19a90 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
19aa0 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
19ab0 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
19ac0 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
19ad0 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
19ae0 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
19af0 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
19b00 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
19b10 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
19b20 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
19b30 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
19b40 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
19b50 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
19b60 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
19b70 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
19b80 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
19b90 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
19ba0 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
19bb0 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
19bc0 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
19bd0 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
19be0 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
19bf0 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
19c00 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
19c10 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
19c20 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74   NULL.. * target
19c30 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
19c40 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
19c50 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
19c60 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
19c70 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
19c80 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
19c90 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
19ca0 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
19cb0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
19cd0 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
19ce0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
19cf0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
19d00 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
19d10 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
19d20 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
19d30 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
19d40 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20  ALUES ... . *   
19d50 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
19d60 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
19d70 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
19d80 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
19da0 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
19db0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
19dc0 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ETE). * target  
19dd0 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
19de0 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
19df0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
19e00 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
19e10 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
19e20 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
19e30 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
19e40 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
19e50 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
19e60 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19e70 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
19e80 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b   * . * (op == TK
19e90 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67  _UPDATE). * targ
19ea0 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
19eb0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
19ec0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
19ed0 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20  table to update 
19ee0 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65  rows of.. * pWhe
19ef0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
19f00 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
19f10 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
19f20 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
19f30 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
19f40 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
19f50 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
19f60 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
19f70 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
19f80 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
19f90 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
19fa0 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
19fb0 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
19fc0 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
19fd0 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
19fe0 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1a000 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a  gument.. * . */.
1a010 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1a020 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
1a030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1a040 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1a050 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1a060 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
1a070 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
1a080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
1a090 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
1a0a0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
1a0b0 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
1a0c0 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
1a0d0 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
1a0e0 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
1a0f0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
1a100 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74   SELECT statment
1a110 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
1a120 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54  T INTO .. SELECT
1a130 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20   ... */.  Token 
1a140 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f  target;        /
1a150 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
1a160 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
1a170 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
1a180 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1a190 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1a1a0 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
1a1b0 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
1a1c0 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
1a1d0 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
1a1e0 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
1a1f0 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20 63  PDATE.  VALUES c
1a200 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52 54  lause for INSERT
1a210 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49   */.  IdList *pI
1a220 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f  dList;     /* Co
1a230 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49  lumn names for I
1a240 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67  NSERT */.  Trigg
1a250 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
1a260 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
1a270 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
1a280 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
1a290 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
1a2a0 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
1a2b0 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
1a2c0 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
1a2d0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1a2e0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
1a2f0 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
1a300 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
1a310 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
1a320 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
1a330 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
1a340 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
1a350 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
1a360 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a  ** explicit.  .*
1a370 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1a380 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
1a390 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
1a3a0 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
1a3b0 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
1a3c0 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
1a3d0 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
1a3e0 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
1a3f0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
1a400 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
1a410 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
1a420 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ma */.  const ch
1a430 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
1a440 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
1a450 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
1a460 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
1a470 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
1a480 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
1a490 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
1a4a0 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1a4b0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1a4c0 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
1a4d0 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
1a4e0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1a4f0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1a500 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
1a510 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
1a520 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
1a530 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
1a540 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
1a550 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
1a560 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
1a570 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
1a580 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
1a590 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
1a5a0 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
1a5b0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1a5c0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1a5d0 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
1a5e0 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
1a5f0 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
1a600 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
1a610 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
1a620 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
1a630 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
1a640 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
1a650 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
1a660 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
1a670 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
1a680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
1a690 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
1a6a0 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
1a6b0 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
1a6c0 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
1a6d0 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1a6e0 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
1a6f0 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
1a700 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
1a710 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e  lowed string len
1a720 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d 61  gth */.  u8   ma
1a730 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f 2a  llocFailed;   /*
1a740 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69 66   Becomes true if
1a750 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   any memory allo
1a760 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f 0a  cation fails */.
1a770 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63    u8   useMalloc
1a780 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e  ;      /* 0: non
1a790 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62  e,  1: sqlite3Db
1a7a0 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69  Malloc,  2: sqli
1a7b0 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20  te3_malloc */.  
1a7c0 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20 20  u8   tooBig;    
1a7d0 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20       /* Becomes 
1a7e0 74 72 75 65 20 69 66 20 73 74 72 69 6e 67 20 73  true if string s
1a7f0 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d 69  ize exceeds limi
1a800 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ts */.};../*.** 
1a810 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1a820 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1a830 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1a840 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1a850 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1a860 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1a870 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1a880 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1a890 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1a8a0 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1a8b0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1a8c0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1a8d0 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1a8e0 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1a8f0 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1a900 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1a910 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1a920 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1a930 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1a940 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1a950 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1a960 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1a970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1a980 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1a990 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1a9a0 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1a9b0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1a9c0 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1a9d0 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1a9e0 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1a9f0 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1aa00 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1aa10 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1aa20 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1aa30 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1aa40 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1aa50 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1aa70 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1aa80 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1aa90 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1aaa0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1aab0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1aac0 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1aad0 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1aae0 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ab00 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1ab10 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1ab20 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab40 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1ab50 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1ab60 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1ab70 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1aba0 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1abb0 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1abc0 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abe0 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1abf0 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1ac00 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1ac30 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
1ac40 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
1ac50 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1ac60 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1ac70 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1ac80 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73  fer count */.  s
1ac90 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1aca0 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
1acb0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
1acc0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1acd0 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1ace0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1acf0 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
1ad00 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
1ad10 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
1ad20 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
1ad30 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
1ad40 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
1ad50 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
1ad60 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
1ad70 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ad90 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
1ada0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
1adb0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1adc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1add0 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
1ade0 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
1adf0 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
1ae00 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
1ae10 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
1ae20 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 76 6f 69  s sizes */.  voi
1ae30 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20  d *pScratch;    
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ae50 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79  * Scratch memory
1ae60 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61   */.  int szScra
1ae70 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1ae80 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1ae90 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20  of each scratch 
1aea0 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
1aeb0 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  nScratch;       
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aed0 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74   Number of scrat
1aee0 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  ch buffers */.  
1aef0 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
1af20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
1af30 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1af50 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
1af60 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
1af70 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1afa0 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
1afb0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
1afc0 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
1afd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
1afe0 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
1aff0 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
1b000 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
1b010 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
1b020 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
1b030 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
1b040 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
1b050 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67  /* The above mig
1b060 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  ht be initialize
1b070 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20  d to non-zero.  
1b080 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65  The following ne
1b090 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a  ed to always.  *
1b0a0 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a  * initially be z
1b0b0 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f  ero, however. */
1b0c0 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20  .  int isInit;  
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0e0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1b0f0 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  er initializatio
1b100 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a  n has finished *
1b110 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65  /.  int inProgre
1b120 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
1b130 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68        /* True wh
1b140 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ile initializati
1b150 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a  on in progress *
1b160 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49  /.  int isMutexI
1b170 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1b180 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1b190 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20  ter mutexes are 
1b1a0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1b1b0 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69   int isMallocIni
1b1c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1b1d0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1b1e0 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
1b1f0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
1b200 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20  isPCacheInit;   
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b220 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
1b230 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
1b240 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  d */.  sqlite3_m
1b250 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78  utex *pInitMutex
1b260 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65  ;        /* Mute
1b270 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  x used by sqlite
1b280 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a  3_initialize() *
1b290 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
1b2a0 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1b2b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b2c0 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
1b2d0 74 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64  tMutex */.  void
1b2e0 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69   (*xLog)(void*,i
1b2f0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1b300 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72   /* Function for
1b310 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f   logging */.  vo
1b320 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20  id *pLogArg;    
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b340 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
1b350 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a  ment to xLog() *
1b360 2f 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69  /.  int bLocalti
1b370 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20  meFault;        
1b380 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1b390 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28   fail localtime(
1b3a0 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 64 65  ) calls */.#ifde
1b3b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1b3c0 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
1b3d0 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
1b3e0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1b3f0 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
1b400 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
1b410 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43  ndif.};../*.** C
1b420 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
1b430 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
1b440 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
1b450 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
1b460 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78  er {.  int (*xEx
1b470 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
1b480 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
1b490 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1b4a0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
1b4b0 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
1b4c0 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1b4d0 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
1b4e0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
1b4f0 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  CTs */.  Parse *
1b500 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b520 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e     /* Parser con
1b530 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20  text.  */.  int 
1b540 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20  walkerDepth;    
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b560 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b570 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f  of subqueries */
1b580 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b5b0 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
1b5c0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
1b5d0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
1b600 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
1b610 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20     int i;       
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b640 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a   Integer value *
1b650 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
1b660 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
1b690 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
1b6a0 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
1b6b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1b6c0 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f    /* Counting co
1b6d0 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20  lumn references 
1b6e0 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
1b6f0 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
1b700 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
1b710 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
1b720 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
1b730 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
1b740 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
1b750 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
1b760 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1b770 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1b780 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1b790 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
1b7a0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1b7b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1b7c0 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
1b7d0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f  r*, Select*);../
1b7e0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65  *.** Return code
1b7f0 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d   from the parse-
1b800 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69  tree walking pri
1b810 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69  mitives and thei
1b820 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  r.** callbacks..
1b830 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43  */.#define WRC_C
1b840 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f  ontinue    0   /
1b850 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20  * Continue down 
1b860 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f  into children */
1b870 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75  .#define WRC_Pru
1b880 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  ne       1   /* 
1b890 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75  Omit children bu
1b8a0 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69  t continue walki
1b8b0 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23  ng siblings */.#
1b8c0 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74  define WRC_Abort
1b8d0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62         2   /* Ab
1b8e0 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77  andon the tree w
1b8f0 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73  alk */../*.** As
1b900 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
1b910 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
1b920 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
1b930 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
1b940 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
1b950 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
1b960 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
1b970 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
1b980 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
1b990 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
1b9a0 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
1b9b0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
1b9c0 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
1b9d0 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9f0 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
1ba00 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
1ba10 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1ba30 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba60 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
1ba70 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
1ba80 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
1ba90 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
1baa0 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
1bab0 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
1bac0 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
1bad0 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
1bae0 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
1baf0 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
1bb00 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
1bb10 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
1bb20 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
1bb30 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
1bb40 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
1bb50 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
1bb60 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
1bb70 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
1bb80 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
1bb90 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
1bba0 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
1bbb0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
1bbc0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1bbd0 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
1bbe0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
1bbf0 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
1bc00 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
1bc10 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
1bc20 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1bc30 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
1bc40 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
1bc50 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
1bc60 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
1bc70 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
1bc80 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
1bc90 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
1bca0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a  rror(__LINE__)..
1bcb0 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72  ./*.** FTS4 is r
1bcc0 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69  eally an extensi
1bcd0 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74  on for FTS3.  It
1bce0 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e   is enabled usin
1bcf0 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  g the.** SQLITE_
1bd00 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72  ENABLE_FTS3 macr
1bd10 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64  o.  But to avoid
1bd20 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c   confusion we al
1bd30 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  so all.** the SQ
1bd40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1bd50 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
1bd60 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72  as an alisse for
1bd70 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1bd80 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  TS3..*/.#if defi
1bd90 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1bda0 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69  E_FTS4) && !defi
1bdb0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1bdc0 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65  E_FTS3).# define
1bdd0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1bde0 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS3.#endif../*.*
1bdf0 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
1be00 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
1be10 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
1be20 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
1be30 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
1be40 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
1be50 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
1be60 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
1be70 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
1be80 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
1be90 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
1bea0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1beb0 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
1bec0 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
1bed0 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
1bee0 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
1bef0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1bf00 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
1bf10 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
1bf20 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
1bf30 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
1bf40 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
1bf50 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
1bf60 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
1bf70 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
1bf80 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
1bf90 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
1bfa0 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
1bfb0 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
1bfc0 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
1bfd0 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
1bfe0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bff0 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
1c000 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
1c010 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1c020 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
1c030 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1c040 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
1c050 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1c060 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1c070 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
1c080 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1c090 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1c0a0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1c0b0 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
1c0c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1c0d0 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
1c0e0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1c0f0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1c100 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
1c110 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1c120 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1c130 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1c140 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
1c150 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1c160 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
1c170 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1c180 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1c190 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
1c1a0 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
1c1b0 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
1c1c0 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
1c1d0 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c  d char)(x)]).#el
1c1e0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1c1f0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
1c200 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
1c210 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1c220 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
1c230 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
1c240 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1c250 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1c260 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1c270 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
1c280 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1c290 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1c2a0 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
1c2b0 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
1c2c0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1c2d0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1c2e0 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
1c2f0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1c300 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c310 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
1c320 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
1c330 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1c340 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
1c350 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
1c360 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1c370 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1c380 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
1c390 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
1c3a0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
1c3b0 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  StrICmp sqlite3_
1c3c0 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69  stricmp.int sqli
1c3d0 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
1c3e0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
1c3f0 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
1c400 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
1c410 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
1c420 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
1c430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
1c440 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
1c450 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
1c460 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  c(int);.void *sq
1c470 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
1c480 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1c490 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
1c4a0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
1c4b0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
1c4c0 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
1c4d0 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  *, int);.char *s
1c4e0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
1c4f0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1c500 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
1c510 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
1c520 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1c530 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1c540 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
1c550 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  id*, int);.void 
1c560 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
1c570 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
1c580 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b  *, void *, int);
1c590 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1c5a0 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
1c5b0 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b  *, void *, int);
1c5c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
1c5d0 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
1c5e0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
1c5f0 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
1c600 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
1c610 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
1c620 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
1c630 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
1c640 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
1c650 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
1c660 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
1c670 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
1c680 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1c690 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
1c6a0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
1c6b0 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
1c6c0 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ult(void);.void 
1c6d0 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
1c6e0 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
1c6f0 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
1c700 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71  )(void));.int sq
1c710 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
1c720 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
1c730 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
1c740 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
1c750 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
1c760 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
1c770 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
1c780 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
1c790 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
1c7a0 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
1c7b0 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
1c7c0 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
1c7d0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
1c7e0 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
1c7f0 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
1c800 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
1c810 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
1c820 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
1c830 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
1c840 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
1c850 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
1c860 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
1c870 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
1c880 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
1c890 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1c8a0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
1c8b0 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
1c8c0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1c8d0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
1c8e0 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
1c8f0 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
1c900 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
1c910 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65  ,P)       .#else
1c920 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c930 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
1c940 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
1c950 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
1c960 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1c970 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
1c980 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
1c990 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
1c9a0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1c9b0 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
1c9c0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
1c9d0 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,P).#endif..#ifd
1c9e0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1c9f0 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
1ca00 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1ca10 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
1ca20 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
1ca30 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1ca40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
1ca50 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
1ca60 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
1ca70 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
1ca80 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys5(void);.#endi
1ca90 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
1caa0 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
1cab0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1cac0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
1cad0 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
1cae0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
1caf0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
1cb00 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
1cb10 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
1cb20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
1cb30 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
1cb40 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
1cb50 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
1cb60 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
1cb70 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
1cb80 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
1cb90 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75  qlite3StatusValu
1cba0 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  e(int);.void sql
1cbb0 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e  ite3StatusAdd(in
1cbc0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1cbd0 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69  lite3StatusSet(i
1cbe0 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64  nt, int);..#ifnd
1cbf0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1cc00 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
1cc10 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
1cc20 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
1cc30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cc40 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
1cc50 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
1cc60 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
1cc70 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  m*, int, const c
1cc80 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
1cc90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1cca0 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20 73  MIT_TRACE.void s
1ccb0 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74  qlite3XPrintf(St
1ccc0 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63  rAccum*, const c
1ccd0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
1cce0 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  if.char *sqlite3
1ccf0 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
1cd00 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
1cd10 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
1cd20 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
1cd30 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1cd40 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a  va_list);.char *
1cd50 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28  sqlite3MAppendf(
1cd60 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63  sqlite3*,char*,c
1cd70 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
1cd80 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1cd90 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66  ITE_TEST) || def
1cda0 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
1cdb0 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
1cdc0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
1cdd0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1cde0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
1cdf0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
1ce00 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
1ce10 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
1ce20 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
1ce30 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72  f../* Output for
1ce40 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49  matting for SQLI
1ce50 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c  TE_TESTCTRL_EXPL
1ce60 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  AIN */.#if defin
1ce70 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1ce80 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20  _TREE_EXPLAIN). 
1ce90 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1cea0 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29  lainBegin(Vdbe*)
1ceb0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1cec0 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64  ExplainPrintf(Vd
1ced0 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
1cee0 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73  , ...);.  void s
1cef0 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28  qlite3ExplainNL(
1cf00 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
1cf10 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73  qlite3ExplainPus
1cf20 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  h(Vdbe*);.  void
1cf30 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
1cf40 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  op(Vdbe*);.  voi
1cf50 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1cf60 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20  Finish(Vdbe*);. 
1cf70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1cf80 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a  lainSelect(Vdbe*
1cf90 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  , Select*);.  vo
1cfa0 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1cfb0 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70  nExpr(Vdbe*, Exp
1cfc0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1cfd0 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69  te3ExplainExprLi
1cfe0 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69  st(Vdbe*, ExprLi
1cff0 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68  st*);.  const ch
1d000 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45  ar *sqlite3VdbeE
1d010 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a  xplanation(Vdbe*
1d020 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1d030 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
1d040 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
1d050 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
1d060 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65  Select(A,B).# de
1d070 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1d080 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64  ainExpr(A,B).# d
1d090 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1d0a0 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42  lainExprList(A,B
1d0b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1d0c0 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28  e3ExplainFinish(
1d0d0 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
1d0e0 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69  te3VdbeExplanati
1d0f0 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  on(X) 0.#endif..
1d100 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
1d110 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
1d120 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
1d130 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
1d140 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
1d150 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
1d160 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74  char*, ...);.int
1d170 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
1d180 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
1d190 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
1d1a0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
1d1b0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
1d1c0 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
1d1d0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1d1e0 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
1d1f0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
1d200 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
1d210 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
1d220 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
1d230 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
1d240 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
1d250 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
1d260 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
1d270 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
1d280 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
1d290 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
1d2a0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
1d2b0 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
1d2c0 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
1d2d0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1d2e0 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
1d2f0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
1d300 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
1d310 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
1d320 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
1d330 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1d340 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
1d350 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
1d360 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
1d370 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
1d380 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
1d390 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
1d3a0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
1d3b0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1d3c0 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
1d3d0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
1d3e0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
1d3f0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
1d400 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rList*, Token*);
1d410 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1d420 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
1d430 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1d440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1d450 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  rDelete(sqlite3*
1d460 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
1d470 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
1d480 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
1d490 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
1d4a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1d4b0 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
1d4c0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1d4d0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
1d4e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
1d4f0 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
1d500 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70  ExprList*,ExprSp
1d510 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
1d520 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
1d530 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
1d540 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1d550 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
1d560 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
1d570 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
1d580 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
1d590 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76  ar**, char**);.v
1d5a0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
1d5b0 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
1d5c0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
1d5d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d5e0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
1d5f0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
1d600 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1d610 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
1d620 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
1d630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
1d640 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
1d650 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
1d660 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50  id sqlite3BeginP
1d670 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  arse(Parse*,int)
1d680 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1d690 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
1d6a0 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54  ges(sqlite3*);.T
1d6b0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
1d6c0 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
1d6d0 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
1d6e0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
1d6f0 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
1d700 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  e *, int);.void 
1d710 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c  sqlite3StartTabl
1d720 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
1d730 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Token*,int,int,i
1d740 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
1d750 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
1d760 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
1d770 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
1d780 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
1d790 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d7a0 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
1d7b0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
1d7c0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1d7d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1d7e0 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
1d7f0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1d800 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1d810 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a  olumnType(Parse*
1d820 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
1d830 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
1d840 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
1d850 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
1d860 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
1d870 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
1d880 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1d890 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
1d8a0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
1d8b0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
1d8c0 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
1d8d0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
1d8e0 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
1d8f0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
1d900 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1d910 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
1d920 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
1d930 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
1d940 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
1d950 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
1d960 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61  lite3CodeOnce(Pa
1d970 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63 20  rse *);..Bitvec 
1d980 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
1d990 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
1d9a0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
1d9b0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
1d9c0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
1d9d0 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
1d9e0 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
1d9f0 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
1da00 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
1da10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
1da20 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
1da30 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
1da40 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
1da50 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ec*);.int sqlite
1da60 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
1da70 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52  st(int,int*);..R
1da80 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
1da90 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
1daa0 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
1dab0 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
1dac0 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
1dad0 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
1dae0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
1daf0 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
1db00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
1db10 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
1db20 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69 36 34  , u8 iBatch, i64
1db30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
1db40 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
1db50 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
1db60 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
1db70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1db80 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c  oken*,Token*,Sel
1db90 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
1dba0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1dbb0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
1dbc0 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
1dbd0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1dbe0 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
1dbf0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
1dc00 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
1dc10 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
1dc20 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
1dc30 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
1dc40 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  B) 0.#endif..voi
1dc50 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
1dc60 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
1dc70 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
1dc80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
1dc90 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
1dca0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1dcb0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1dcc0 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
1dcd0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
1dce0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1dcf0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
1dd00 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
1dd10 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
1dd20 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
1dd30 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1dd40 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
1dd50 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
1dd60 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1dd70 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
1dd80 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
1dd90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1dda0 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
1ddb0 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
1ddc0 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69 6e  ite3CodeCoroutin
1ddd0 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  e(Parse*, Select
1dde0 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
1ddf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
1de00 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
1de10 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
1de20 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
1de30 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1de40 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
1de50 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
1de60 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
1de70 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
1de80 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
1de90 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
1dea0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
1deb0 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
1dec0 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
1ded0 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
1dee0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
1def0 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
1df00 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
1df10 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
1df20 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
1df30 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
1df40 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
1df50 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
1df60 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1df70 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
1df80 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1df90 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
1dfa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
1dfd0 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
1dfe0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
1dff0 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
1e000 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
1e010 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
1e020 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
1e030 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
1e040 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
1e050 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
1e060 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
1e070 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
1e080 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
1e090 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
1e0a0 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
1e0b0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
1e0c0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
1e0d0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1e0e0 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
1e0f0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
1e100 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1e110 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
1e120 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  x *sqlite3Create
1e130 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
1e140 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
1e150 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
1e160 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69    Token*, int, i
1e190 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e1a0 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
1e1b0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1e1c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
1e1d0 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
1e1e0 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
1e1f0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
1e200 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
1e210 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
1e220 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
1e230 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e250 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
1e260 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ,int,Expr*,Expr*
1e270 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1e280 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
1e290 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
1e2a0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
1e2b0 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
1e2c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
1e2d0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
1e2e0 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
1e2f0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
1e300 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
1e310 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
1e320 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
1e330 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
1e340 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1e350 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
1e360 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
1e370 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1e380 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
1e390 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
1e3a0 72 65 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  re(Parse *, SrcL
1e3b0 69 73 74 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45  ist *, Expr *, E
1e3c0 78 70 72 4c 69 73 74 20 2a 2c 20 45 78 70 72 20  xprList *, Expr 
1e3d0 2a 2c 20 45 78 70 72 20 2a 2c 20 63 68 61 72 20  *, Expr *, char 
1e3e0 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
1e3f0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
1e400 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
1e410 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
1e420 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
1e430 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1e440 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72   ExprList*, Expr
1e450 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e  *, int);.WhereIn
1e460 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65  fo *sqlite3Where
1e470 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63  Begin(Parse*,Src
1e480 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1e490 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
1e4a0 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  u16,int);.void s
1e4b0 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
1e4c0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1e4d0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
1e4e0 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  etColumn(Parse*,
1e4f0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1e500 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
1e510 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1e520 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
1e530 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
1e540 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1e550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1e560 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
1e570 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1e580 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e590 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
1e5a0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
1e5b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e5c0 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
1e5d0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1e5e0 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
1e5f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
1e600 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1e610 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
1e620 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
1e630 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
1e640 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
1e650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e660 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
1e670 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
1e680 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1e690 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
1e6a0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1e6b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e6c0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
1e6d0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
1e6e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1e6f0 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
1e700 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
1e710 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1e720 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65  deAndCache(Parse
1e730 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1e740 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e750 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50 61  CodeConstants(Pa
1e760 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  rse*, Expr*);.in
1e770 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1e780 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
1e790 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1e7a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e7b0 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
1e7c0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1e7d0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1e7e0 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
1e7f0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1e800 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
1e810 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
1e820 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
1e830 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
1e840 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
1e850 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
1e860 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
1e870 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ew,const char*, 
1e880 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
1e890 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
1e8a0 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
1e8b0 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74  e*,int isView,st
1e8c0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
1e8d0 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
1e8e0 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
1e8f0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1e900 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
1e910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
1e920 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
1e930 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
1e940 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1e950 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1e960 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
1e970 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
1e980 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
1e990 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
1e9a0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
1e9b0 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
1e9c0 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
1e9d0 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
1e9e0 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
1e9f0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
1ea00 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
1ea10 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  re(Expr*, Expr*)
1ea20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1ea30 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
1ea40 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
1ea50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ea60 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
1ea70 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
1ea80 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
1ea90 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
1eaa0 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
1eab0 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
1eac0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1ead0 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
1eae0 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
1eaf0 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
1eb00 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
1eb10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1eb20 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
1eb30 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1eb40 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
1eb50 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1eb60 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74 61  ite3PrngResetSta
1eb70 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1eb80 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
1eb90 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
1eba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1ebb0 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
1ebc0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1ebd0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
1ebe0 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
1ebf0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1ec00 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
1ec10 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
1ec20 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
1ec30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1ec40 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
1ec50 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1ec60 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
1ec70 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
1ec80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1ec90 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
1eca0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
1ecb0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
1ecc0 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
1ecd0 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
1ece0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
1ecf0 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
1ed00 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
1ed10 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
1ed20 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1ed30 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1ed40 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
1ed50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1ed60 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
1ed70 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  ction(Expr*);.in
1ed80 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
1ed90 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
1eda0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1edb0 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
1edc0 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  nst Expr*);.void
1edd0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1ede0 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a  IsNullJump(Vdbe*
1edf0 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69  , const Expr*, i
1ee00 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1ee10 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
1ee20 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
1ee30 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
1ee40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
1ee50 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
1ee60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ee70 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
1ee80 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
1ee90 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
1eea0 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 29   Trigger *, int)
1eeb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
1eec0 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
1eed0 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
1eee0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b  le*, int, int*);
1eef0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
1ef00 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
1ef10 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
1ef20 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1ef30 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
1ef40 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
1ef50 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
1ef60 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20  int,int,.       
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1ef90 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
1efa0 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  nt,int*);.void s
1efb0 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
1efc0 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  sertion(Parse*, 
1efd0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1efe0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  , int*, int, int
1eff0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1f000 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
1f010 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
1f020 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
1f030 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
1f040 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
1f050 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
1f060 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f070 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
1f080 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f090 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
1f0a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
1f0b0 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
1f0c0 72 73 65 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  rse*, int, char*
1f0d0 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
1f0e0 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
1f0f0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
1f100 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
1f110 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
1f120 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
1f130 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
1f140 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
1f150 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
1f160 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
1f170 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
1f180 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
1f190 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
1f1a0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
1f1b0 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
1f1c0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1f1d0 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74  te3FuncDefInsert
1f1e0 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46  (FuncDefHash*, F
1f1f0 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65  uncDef*);.FuncDe
1f200 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
1f210 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
1f220 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
1f230 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
1f240 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1f250 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
1f260 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1f270 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1f280 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
1f290 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
1f2a0 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f  lite3RegisterGlo
1f2b0 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  balFunctions(voi
1f2c0 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
1f2d0 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
1f2e0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1f2f0 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
1f300 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
1f310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
1f320 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
1f330 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
1f340 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1f350 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
1f360 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1f370 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
1f380 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
1f390 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
1f3a0 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
1f3b0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
1f3c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
1f3d0 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
1f3e0 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
1f3f0 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
1f400 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
1f410 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
1f420 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
1f440 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
1f450 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1f460 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
1f470 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
1f480 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
1f490 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
1f4a0 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
1f4b0 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
1f4c0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
1f4d0 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
1f4e0 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
1f4f0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
1f500 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
1f510 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
1f520 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
1f530 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
1f540 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
1f550 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
1f560 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
1f570 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1f580 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
1f590 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
1f5a0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
1f5b0 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
1f5e0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1f5f0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
1f600 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
1f610 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
1f620 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
1f630 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1f640 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
1f650 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
1f660 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
1f670 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
1f680 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
1f690 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
1f6a0 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
1f6b0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1f6c0 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
1f6d0 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
1f6e0 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
1f6f0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1f700 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
1f710 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
1f720 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 20 20 20 45 78 70 72 4c 69 73 74 2a 2c 53 65      ExprList*,Se
1f760 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
1f770 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1f780 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
1f790 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1f7a0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
1f7b0 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
1f7c0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1f7d0 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
1f7e0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
1f7f0 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
1f800 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1f810 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
1f820 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
1f830 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1f840 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
1f850 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1f860 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
1f870 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
1f880 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
1f890 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
1f8a0 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
1f8b0 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
1f8c0 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
1f8d0 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
1f8e0 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
1f8f0 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
1f900 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1f910 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
1f920 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
1f930 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f940 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
1f950 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1f960 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
1f970 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
1f980 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
1f990 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
1f9a0 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
1f9b0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
1f9c0 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
1f9d0 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
1f9e0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1f9f0 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
1fa00 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
1fa10 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
1fa20 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
1fa30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
1fa40 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
1fa50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fa60 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
1fa70 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
1fa80 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
1fa90 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
1faa0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
1fab0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
1fac0 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
1fad0 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
1fae0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
1faf0 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
1fb00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1fb10 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
1fb20 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
1fb30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1fb40 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
1fb50 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
1fb60 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
1fb70 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
1fb80 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
1fb90 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
1fba0 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
1fbb0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1fbc0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1fbd0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1fbe0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
1fbf0 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
1fc00 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
1fc10 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
1fc20 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1fc30 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
1fc40 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
1fc50 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
1fc60 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
1fc70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
1fc80 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
1fc90 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
1fca0 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
1fcb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1fcc0 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
1fcd0 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
1fce0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fcf0 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
1fd00 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
1fd10 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
1fd20 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
1fd30 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
1fd40 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
1fd50 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
1fd60 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
1fd70 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
1fd80 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1fd90 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 49  .int sqlite3FixI
1fda0 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
1fdb0 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
1fdc0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
1fdd0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
1fde0 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
1fdf0 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
1fe00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
1fe10 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
1fe20 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1fe30 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
1fe40 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
1fe50 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
1fe60 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
1fe70 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1fe80 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
1fe90 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
1fea0 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
1feb0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
1fec0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
1fed0 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
1fee0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1fef0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
1ff00 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
1ff10 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
1ff20 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
1ff30 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
1ff40 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
1ff50 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
1ff60 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
1ff70 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
1ff80 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
1ff90 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
1ffa0 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
1ffb0 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  u8**);../*.** Ro
1ffc0 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
1ffd0 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
1ffe0 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
1fff0 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
20000 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
20010 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
20020 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
20030 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
20040 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
20050 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c 64 20  e.  Code should 
20060 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20 66 6f  use the MACRO fo
20070 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20 74 68  rms below, as th
20080 65 20 56 61 72 69 6e 74 33 32 20 76 65 72 73 69  e Varint32 versi
20090 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64  ons.** are coded
200a0 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65 20 73   to assume the s
200b0 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73 65 20  ingle byte case 
200c0 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e 64 6c  is already handl
200d0 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20 74 68  ed (which .** th
200e0 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65  e MACRO form doe
200f0 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  s)..*/.int sqlit
20100 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
20110 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
20120 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74  ;.int sqlite3Put
20130 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67 6e 65  Varint32(unsigne
20140 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a 75  d char*, u32);.u
20150 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
20160 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
20170 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
20180 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
20190 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
201a0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
201b0 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
201c0 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
201d0 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68  v);../*.** The h
201e0 65 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72  eader of a recor
201f0 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  d consists of a 
20200 73 65 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c  sequence variabl
20210 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
20220 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65  s..** These inte
20230 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20  gers are almost 
20240 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64  always small and
20250 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20   are encoded as 
20260 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a  a single byte..*
20270 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
20280 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61  macros take adva
20290 6e 74 61 67 65 20 74 68 69 73 20 66 61 63 74 20  ntage this fact 
202a0 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61 73  to provide a fas
202b0 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20  t encode.** and 
202c0 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e  decode of the in
202d0 74 65 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f  tegers in a reco
202e0 72 64 20 68 65 61 64 65 72 2e 20 20 49 74 20 69  rd header.  It i
202f0 73 20 66 61 73 74 65 72 20 66 6f 72 20 74 68 65  s faster for the
20300 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20   common.** case 
20310 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 67 65  where the intege
20320 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79  r is a single by
20330 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74  te.  It is a lit
20340 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20  tle slower when 
20350 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
20360 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79  s two or more by
20370 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c  tes.  But overal
20380 6c 20 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a  l it is faster..
20390 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
203a0 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ing expressions 
203b0 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a  are equivalent:.
203c0 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71  **.**     x = sq
203d0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
203e0 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20  ( A, &B );.**   
203f0 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74    x = sqlite3Put
20400 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29  Varint32( A, B )
20410 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20  ;.**.**     x = 
20420 67 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  getVarint32( A, 
20430 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20  B );.**     x = 
20440 70 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20  putVarint32( A, 
20450 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69  B );.**.*/.#defi
20460 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
20470 2c 42 29 20 20 28 75 38 29 28 28 2a 28 41 29 3c  ,B)  (u8)((*(A)<
20480 28 75 38 29 30 78 38 30 29 20 3f 20 28 28 42 29  (u8)0x80) ? ((B)
20490 20 3d 20 28 75 33 32 29 2a 28 41 29 29 2c 31 20   = (u32)*(A)),1 
204a0 3a 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  : sqlite3GetVari
204b0 6e 74 33 32 28 28 41 29 2c 20 28 75 33 32 20 2a  nt32((A), (u32 *
204c0 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
204d0 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
204e0 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
204f0 3c 28 75 33 32 29 30 78 38 30 29 20 3f 20 28 2a  <(u32)0x80) ? (*
20500 28 41 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20  (A) = (unsigned 
20510 63 68 61 72 29 28 42 29 29 2c 31 20 3a 20 73 71  char)(B)),1 : sq
20520 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
20530 28 28 41 29 2c 20 28 42 29 29 29 0a 23 64 65 66  ((A), (B))).#def
20540 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20  ine getVarint   
20550 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
20560 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72  t.#define putVar
20570 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75  int    sqlite3Pu
20580 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20  tVarint...const 
20590 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64  char *sqlite3Ind
205a0 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  exAffinityStr(Vd
205b0 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a  be *, Index *);.
205c0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
205d0 65 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  eAffinityStr(Vdb
205e0 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63  e *, Table *);.c
205f0 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
20600 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
20610 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
20620 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
20630 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
20640 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
20650 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
20660 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
20670 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
20680 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
20690 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
206a0 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
206b0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
206c0 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
206d0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
206e0 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73  r*,...);.void *s
206f0 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
20700 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
20710 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
20720 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
20730 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
20740 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
20750 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
20760 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
20770 6b 65 6e 20 2a 2a 29 3b 0a 63 6f 6e 73 74 20 63  ken **);.const c
20780 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
20790 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  tr(int);.int sql
207a0 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
207b0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43  arse *pParse);.C
207c0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46  ollSeq *sqlite3F
207d0 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74  indCollSeq(sqlit
207e0 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73  e3*,u8 enc, cons
207f0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f  t char*,int);.Co
20800 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
20810 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
20820 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
20830 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
20840 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
20850 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
20860 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
20870 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
20880 69 74 65 33 45 78 70 72 53 65 74 43 6f 6c 6c 42  ite3ExprSetCollB
20890 79 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50  yToken(Parse *pP
208a0 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 54 6f 6b  arse, Expr*, Tok
208b0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
208c0 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
208d0 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
208e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
208f0 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
20900 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
20910 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
20920 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
20930 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
20940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64  ;.int sqlite3Add
20950 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
20960 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49  .int sqlite3SubI
20970 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
20980 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  int sqlite3MulIn
20990 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
209a0 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  nt sqlite3AbsInt
209b0 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  32(int);.#ifdef 
209c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
209d0 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c  3_NAMES.void sql
209e0 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
209f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
20a00 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
20a10 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53  ine sqlite3FileS
20a20 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64  uffix3(X,Y).#end
20a30 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  if.u8 sqlite3Get
20a40 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68  Boolean(const ch
20a50 61 72 20 2a 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e  ar *z,int);..con
20a60 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
20a70 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
20a80 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
20a90 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
20aa0 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
20ab0 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
20ac0 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
20ad0 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
20ae0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
20af0 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20  d *,u8, .       
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b10 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
20b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
20b30 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
20b40 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
20b50 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
20b60 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
20b70 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
20b80 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
20b90 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
20ba0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 69 66 64  , int, u8);.#ifd
20bb0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
20bc0 5f 53 54 41 54 33 0a 63 68 61 72 20 2a 73 71 6c  _STAT3.char *sql
20bd0 69 74 65 33 55 74 66 38 74 6f 31 36 28 73 71 6c  ite3Utf8to16(sql
20be0 69 74 65 33 20 2a 2c 20 75 38 2c 20 63 68 61 72  ite3 *, u8, char
20bf0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b   *, int, int *);
20c00 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
20c10 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
20c20 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
20c30 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
20c40 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
20c50 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
20c60 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
20c70 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
20c80 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
20c90 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
20ca0 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
20cb0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
20cc0 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
20cd0 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
20ce0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
20cf0 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
20d00 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
20d10 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
20d20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
20d30 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
20d40 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
20d50 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
20d60 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
20d70 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
20d80 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
20d90 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  fig;.extern SQLI
20da0 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61  TE_WSD FuncDefHa
20db0 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  sh sqlite3Global
20dc0 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
20dd0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
20de0 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
20df0 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
20e00 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
20e10 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
20e20 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
20e30 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
20e40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20e50 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
20e60 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
20e70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
20e80 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
20e90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20ea0 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
20eb0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
20ec0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
20ed0 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
20ee0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
20ef0 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
20f00 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
20f10 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
20f20 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
20f30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
20f40 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
20f50 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
20f60 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
20f70 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
20f80 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
20f90 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20fa0 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
20fb0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
20fc0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  meContext*);.int
20fd0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
20fe0 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
20ff0 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
21000 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
21010 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
21020 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
21030 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  ameContext*);.in
21040 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
21050 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
21060 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
21070 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
21080 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
21090 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
210a0 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
210b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
210c0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
210d0 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
210e0 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
210f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
21100 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
21110 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
21120 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  t *);.CollSeq *s
21130 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
21140 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
21150 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
21160 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
21170 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
21180 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
21190 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
211a0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
211b0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
211c0 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
211d0 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
211e0 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  er*);.int sqlite
211f0 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
21200 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
21210 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
21220 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
21230 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
21240 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
21250 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
21260 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
21270 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
21280 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
21290 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
212a0 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
212b0 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
212c0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
212d0 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
212e0 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
212f0 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
21300 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
21310 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
21320 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69  ;.void sqlite3Mi
21330 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28  nimumFileFormat(
21340 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
21350 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
21360 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20  chemaClear(void 
21370 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  *);.Schema *sqli
21380 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c  te3SchemaGet(sql
21390 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29  ite3 *, Btree *)
213a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68  ;.int sqlite3Sch
213b0 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74  emaToIndex(sqlit
213c0 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a  e3 *db, Schema *
213d0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
213e0 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28  te3IndexKeyinfo(
213f0 50 61 72 73 65 20 2a 2c 20 49 6e 64 65 78 20 2a  Parse *, Index *
21400 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  );.int sqlite3Cr
21410 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
21420 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
21430 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
21440 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28   *, .  void (*)(
21450 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
21460 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
21470 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  ue **),.  void (
21480 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
21490 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
214a0 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20  value **), void 
214b0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
214c0 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73  ext*),.  FuncDes
214d0 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
214e0 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69  ctor.);.int sqli
214f0 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74  te3ApiExit(sqlit
21500 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e  e3 *db, int);.in
21510 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  t sqlite3OpenTem
21520 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20  pDatabase(Parse 
21530 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
21540 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74  3StrAccumInit(St
21550 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20  rAccum*, char*, 
21560 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
21570 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
21580 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
21590 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
215a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70  ;.void sqlite3Ap
215b0 70 65 6e 64 53 70 61 63 65 28 53 74 72 41 63 63  pendSpace(StrAcc
215c0 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a  um*,int);.char *
215d0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
215e0 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
215f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
21600 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
21610 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
21620 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
21630 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
21640 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
21650 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
21660 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
21670 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
21680 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
21690 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
216a0 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
216b0 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
216c0 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
216d0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
216e0 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
216f0 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  *);../*.** The i
21700 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
21710 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
21720 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
21730 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
21740 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65  oc(void*(*)(size
21750 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  _t));.void sqlit
21760 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69  e3ParserFree(voi
21770 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64  d*, void(*)(void
21780 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
21790 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69  3Parser(void*, i
217a0 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65  nt, Token, Parse
217b0 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41  *);.#ifdef YYTRA
217c0 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a  CKMAXSTACKDEPTH.
217d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72    int sqlite3Par
217e0 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69  serStackPeak(voi
217f0 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69  d*);.#endif..voi
21800 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61  d sqlite3AutoLoa
21810 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  dExtensions(sqli
21820 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  te3*);.#ifndef S
21830 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
21840 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64  EXTENSION.  void
21850 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
21860 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
21870 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
21880 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  e sqlite3CloseEx
21890 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64  tensions(X).#end
218a0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
218b0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
218c0 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACHE.  void sqli
218d0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72  te3TableLock(Par
218e0 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  se *, int, int, 
218f0 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  u8, const char *
21900 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
21910 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  ne sqlite3TableL
21920 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23  ock(v,w,x,y,z).#
21930 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
21940 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20  LITE_TEST.  int 
21950 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75  sqlite3Utf8To8(u
21960 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a  nsigned char*);.
21970 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
21980 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
21990 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
219a0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  e sqlite3VtabCle
219b0 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20  ar(Y).#  define 
219c0 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
219d0 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  X,Y) SQLITE_OK.#
219e0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
219f0 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a  VtabRollback(X).
21a00 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21a10 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23  3VtabCommit(X).#
21a20 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
21a30 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30  VtabInSync(db) 0
21a40 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21a50 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23  e3VtabLock(X) .#
21a60 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
21a70 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20  VtabUnlock(X).# 
21a80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
21a90 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29  tabUnlockList(X)
21aa0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21ab0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
21ac0 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f  X, Y, Z) SQLITE_
21ad0 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
21ae0 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c  ite3GetVTable(X,
21af0 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29  Y)  ((VTable*)0)
21b00 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73  .#else.   void s
21b10 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
21b20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
21b30 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  le*);.   void sq
21b40 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e  lite3VtabDisconn
21b50 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ect(sqlite3 *db,
21b60 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69   Table *p);.   i
21b70 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  nt sqlite3VtabSy
21b80 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  nc(sqlite3 *db, 
21b90 63 68 61 72 20 2a 2a 29 3b 0a 20 20 20 69 6e 74  char **);.   int
21ba0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
21bb0 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
21bc0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
21bd0 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
21be0 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
21bf0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
21c00 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
21c10 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
21c20 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
21c30 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
21c40 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
21c50 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
21c60 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
21c70 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
21c80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
21c90 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47  VTable *sqlite3G
21ca0 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33  etVTable(sqlite3
21cb0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64  *, Table*);.#  d
21cc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
21cd0 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
21ce0 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
21cf0 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
21d00 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
21d10 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69  lite3VtabMakeWri
21d20 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62  table(Parse*,Tab
21d30 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
21d40 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65  e3VtabBeginParse
21d50 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
21d60 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
21d70 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21d80 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72  te3VtabFinishPar
21d90 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
21da0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21db0 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73  VtabArgInit(Pars
21dc0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
21dd0 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50  3VtabArgExtend(P
21de0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
21df0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
21e00 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  allCreate(sqlite
21e10 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
21e20 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  har *, char **);
21e30 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
21e40 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73  CallConnect(Pars
21e50 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74  e*, Table*);.int
21e60 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
21e70 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a  Destroy(sqlite3*
21e80 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
21e90 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
21ea0 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74  3VtabBegin(sqlit
21eb0 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b  e3 *, VTable *);
21ec0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
21ed0 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e  3VtabOverloadFun
21ee0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c  ction(sqlite3 *,
21ef0 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41  FuncDef*, int nA
21f00 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  rg, Expr*);.void
21f10 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46   sqlite3InvalidF
21f20 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  unction(sqlite3_
21f30 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
21f40 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69  ite3_value**);.i
21f50 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
21f60 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
21f70 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
21f80 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
21f90 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
21fa0 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
21fb0 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
21fc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
21fd0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
21fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21ff0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
22000 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
22010 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
22020 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
22030 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
22040 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
22050 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
22060 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
22070 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
22080 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
22090 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
220a0 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
220b0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
220c0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
220d0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
220e0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
220f0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
22100 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
22110 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
22120 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
22130 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
22140 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c  .#endif../* Decl
22150 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e  arations for fun
22160 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63  ctions in fkey.c
22170 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61  . All of these a
22180 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a  re replaced by.*
22190 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69  * no-op macros i
221a0 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  f OMIT_FOREIGN_K
221b0 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49  EY is defined. I
221c0 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66  n this case no f
221d0 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75  oreign.** key fu
221e0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61  nctionality is a
221f0 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49  vailable. If OMI
22200 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66  T_TRIGGER is def
22210 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54  ined but.** OMIT
22220 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
22230 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f  not, only some o
22240 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20  f the functions 
22250 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a  are no-oped. In.
22260 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72  ** this case for
22270 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61  eign keys are pa
22280 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68  rsed, but no oth
22290 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  er functionality
222a0 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64   is .** provided
222b0 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66   (enforcement of
222c0 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
222d0 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69  requires the tri
222e0 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d  ggers sub-system
222f0 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  )..*/.#if !defin
22300 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
22310 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
22320 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22330 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76  MIT_TRIGGER).  v
22340 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65  oid sqlite3FkChe
22350 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ck(Parse*, Table
22360 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
22370 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72  void sqlite3FkDr
22380 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
22390 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65  SrcList *, Table
223a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
223b0 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73  e3FkActions(Pars
223c0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
223d0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69  List*, int);.  i
223e0 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
223f0 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
22400 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
22410 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
22420 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
22430 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
22440 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
22450 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
22460 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
22470 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
22480 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69  a,b,c,d).  #defi
22490 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  ne sqlite3FkChec
224a0 6b 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65  k(a,b,c,d).  #de
224b0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
224c0 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
224d0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
224e0 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
224f0 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
22500 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
22510 64 28 61 2c 62 2c 63 2c 64 29 20 30 0a 23 65 6e  d(a,b,c,d) 0.#en
22520 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
22530 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
22540 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
22550 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
22560 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  e3 *, Table*);.#
22570 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
22580 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
22590 2c 62 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,b).#endif.../*.
225a0 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
225b0 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
225c0 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
225d0 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
225e0 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
225f0 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
22600 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
22610 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
22620 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
22630 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
22640 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
22650 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
22660 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
22670 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
22680 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
22690 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
226a0 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
226b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
226c0 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20  LTIN_TEST.** is 
226d0 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
226e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
226f0 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
22700 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
22710 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
22720 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73  (void);.  void s
22730 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
22740 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c  alloc(void);.#el
22750 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
22760 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
22770 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e  alloc().  #defin
22780 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  e sqlite3EndBeni
22790 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69  gnMalloc().#endi
227a0 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  f..#define IN_IN
227b0 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20  DEX_ROWID       
227c0 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49 4e      1.#define IN
227d0 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
227e0 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65         2.#define
227f0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 20   IN_INDEX_INDEX 
22800 20 20 20 20 20 20 20 20 20 20 33 0a 69 6e 74 20            3.int 
22810 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
22820 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ex(Parse *, Expr
22830 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64   *, int*);..#ifd
22840 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
22850 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
22860 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
22870 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
22880 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
22890 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
228a0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
228b0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
228c0 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
228d0 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  vfs *);.  int sq
228e0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
228f0 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
22900 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
22910 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73  3JournalExists(s
22920 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
22930 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22940 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
22950 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73  ize(pVfs) ((pVfs
22960 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23  )->szOsFile).  #
22970 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
22980 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31  urnalExists(p) 1
22990 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
229a0 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
229b0 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
229c0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
229d0 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76  MemJournalSize(v
229e0 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
229f0 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71  3IsMemJournal(sq
22a00 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
22a10 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
22a20 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f  XPR_DEPTH>0.  vo
22a30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
22a40 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a 70  tHeight(Parse *p
22a50 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
22a60 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
22a70 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
22a80 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
22a90 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
22aa0 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
22ab0 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
22ac0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
22ad0 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20  SetHeight(x,y). 
22ae0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22af0 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
22b00 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
22b10 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
22b20 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
22b30 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
22b40 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
22b50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22b60 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
22b70 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
22b80 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
22b90 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
22ba0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
22bb0 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
22bc0 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
22bd0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
22be0 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
22bf0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
22c00 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
22c10 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
22c20 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
22c30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22c40 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
22c50 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
22c60 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
22c70 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
22c80 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22c90 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
22ca0 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
22cb0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
22cc0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
22cd0 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
22ce0 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
22cf0 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
22d00 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
22d10 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
22d20 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
22d30 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
22d40 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
22d50 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
22d60 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
22d70 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
22d80 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
22d90 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
22da0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
22db0 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
22dc0 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
22dd0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
22de0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
22df0 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
22e00 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
22e10 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
22e20 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73  _EXTERN void (*s
22e30 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
22e40 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
22e50 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22e60 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
22e70 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
22e80 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
22e90 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
22ea0 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
22eb0 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
22ec0 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
22ed0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
22ee0 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
22ef0 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
22f00 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
22f10 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
22f20 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
22f30 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
22f40 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
22f50 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
22f60 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
22f70 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
22f80 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
22f90 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
22fa0 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
22fb0 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
22fc0 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
22fd0 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
22fe0 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
22ff0 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
23000 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
23010 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
23020 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
23030 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
23040 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
23050 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
23060 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
23070 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
23080 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
23090 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
230a0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
230b0 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
230c0 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
230d0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
230e0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
230f0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
23100 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
23110 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
23120 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
23130 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
23140 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
23150 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
23160 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
23170 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
23180 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
23190 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
231a0 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
231b0 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
231c0 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
231d0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
231e0 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
231f0 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
23200 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
23210 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
23220 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
23230 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
23240 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
23250 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
23260 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
23270 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
23280 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
23290 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
232a0 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
232b0 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
232c0 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
232d0 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
232e0 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
232f0 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
23300 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
23310 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
23320 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
23330 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
23340 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
23350 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
23360 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
23370 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
23380 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
23390 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
233a0 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
233b0 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
233c0 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
233d0 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
233e0 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
233f0 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
23400 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
23410 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
23420 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
23430 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
23440 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
23450 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
23460 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
23470 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
23480 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
23490 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
234a0 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
234b0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
234c0 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
234d0 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
234e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
234f0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
23500 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
23510 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
23520 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
23530 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
23540 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
23550 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
23560 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
23570 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
23580 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
23590 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68  0x02  /* Might h
235a0 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
235b0 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65  de memory */.#de
235c0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
235d0 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
235e0 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
235f0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
23600 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
23610 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
23620 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
23630 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
23640 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20 20  MTYPE_DB        
23650 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73   0x10  /* Uses s
23660 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
23670 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  not sqlite_mallo
23680 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  c */..#endif /* 
23690 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
236a0 0a                                               .