/ Hex Artifact Content
Login

Artifact 3a67c14ba5f17c33f2f9c551bb03c4c341de0bd4:


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 50 72 65  pedef struct Pre
5720: 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65  Update PreUpdate
5730: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5740: 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a   RowSet RowSet;.
5750: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
5760: 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69  avepoint Savepoi
5770: 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  nt;.typedef stru
5780: 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74  ct Select Select
5790: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
57a0: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
57b0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
57c0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
57d0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
57e0: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
57f0: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
5800: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
5810: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
5820: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
5830: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
5840: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
5850: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
5860: 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69  ruct Trigger Tri
5870: 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  gger;.typedef st
5880: 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
5890: 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65  TriggerPrg;.type
58a0: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
58b0: 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74  erStep TriggerSt
58c0: 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ep;.typedef stru
58d0: 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
58e0: 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  d UnpackedRecord
58f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5900: 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a   VTable VTable;.
5910: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
5920: 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a  tabCtx VtabCtx;.
5930: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
5940: 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79  alker Walker;.ty
5950: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
5960: 72 65 50 6c 61 6e 20 57 68 65 72 65 50 6c 61 6e  rePlan WherePlan
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 49 6e 66 6f 20 57 68 65 72 65   WhereInfo Where
5990: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
59a0: 72 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20  ruct WhereLevel 
59b0: 57 68 65 72 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a  WhereLevel;../*.
59c0: 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e  ** Defer sourcin
59d0: 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72  g vdbe.h and btr
59e0: 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72  ee.h until after
59f0: 20 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a   the "u8" and .*
5a00: 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20  * "BusyHandler" 
5a10: 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68  typedefs. vdbe.h
5a20: 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61   also requires a
5a30: 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71   few of the opaq
5a40: 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79  ue.** pointer ty
5a50: 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65  pes (i.e. FuncDe
5a60: 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  f) defined above
5a70: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62  ..*/.#include "b
5a80: 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  tree.h".#include
5a90: 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75   "vdbe.h".#inclu
5aa0: 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e  de "pager.h".#in
5ab0: 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22  clude "pcache.h"
5ac0: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68  ..#include "os.h
5ad0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65  ".#include "mute
5ae0: 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  x.h".../*.** Eac
5af0: 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  h database file 
5b00: 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62  to be accessed b
5b10: 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20  y the system is 
5b20: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
5b30: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
5b40: 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72  structure.  Ther
5b50: 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74  e are normally t
5b60: 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  wo of these stru
5b70: 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65  ctures.** in the
5b80: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72   sqlite.aDb[] ar
5b90: 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20  ray.  aDb[0] is 
5ba0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
5bb0: 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44  e file and.** aD
5bc0: 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61  b[1] is the data
5bd0: 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
5be0: 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79  o hold temporary
5bf0: 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69   tables.  Additi
5c00: 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65  onal.** database
5c10: 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65  s may be attache
5c20: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20  d..*/.struct Db 
5c30: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
5c40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
5c50: 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73   of this databas
5c60: 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
5c70: 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  t;          /* T
5c80: 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74  he B*Tree struct
5c90: 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74  ure for this dat
5ca0: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
5cb0: 75 38 20 69 6e 54 72 61 6e 73 3b 20 20 20 20 20  u8 inTrans;     
5cc0: 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 74 20 77       /* 0: not w
5cd0: 72 69 74 61 62 6c 65 2e 20 20 31 3a 20 54 72 61  ritable.  1: Tra
5ce0: 6e 73 61 63 74 69 6f 6e 2e 20 20 32 3a 20 43 68  nsaction.  2: Ch
5cf0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 20 20 75 38  eckpoint */.  u8
5d00: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20   safety_level;  
5d10: 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73     /* How aggres
5d20: 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20  sive at syncing 
5d30: 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a  data to disk */.
5d40: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
5d50: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
5d60: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
5d70: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
5d80: 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  hared) */.};../*
5d90: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
5da0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
5db0: 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65   structure store
5dc0: 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68  s a database sch
5dd0: 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  ema..**.** Most 
5de0: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
5df0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
5e00: 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65  th a Btree.  The
5e10: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a   exception is.**
5e20: 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20   the Schema for 
5e30: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65  the TEMP databae
5e40: 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31  s (sqlite3.aDb[1
5e50: 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65  ]) which is free
5e60: 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e  -standing..** In
5e70: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
5e80: 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68  de, a single Sch
5e90: 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62  ema object can b
5ea0: 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  e shared by mult
5eb0: 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74  iple.** Btrees t
5ec0: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
5ed0: 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67   same underlying
5ee0: 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
5ef0: 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20  ..** .** Schema 
5f00: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
5f10: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
5f20: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
5f30: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
5f40: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
5f50: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
5f60: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
5f70: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
5f80: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
5f90: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
5fa0: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
5fb0: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
5fc0: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
5fd0: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
5fe0: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
5ff0: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
6000: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
6010: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
6020: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
6030: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
6040: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
6050: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
6060: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
6070: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
6080: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
6090: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
60a0: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
60b0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
60c0: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
60d0: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
60e0: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
60f0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
6100: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
6110: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
6120: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
6130: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
6140: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
6150: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
6160: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
6170: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
6180: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
6190: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
61a0: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
61b0: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
61c0: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
61d0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
61e0: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
61f0: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
6200: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
6210: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
6220: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
6230: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
6240: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
6250: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
6260: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
6270: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
6280: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
6290: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
62a0: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
62b0: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
62c0: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
62d0: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
62e0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
62f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
6300: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
6310: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
6320: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66  abase */.  u16 f
6330: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
6340: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
6350: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
6360: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
6370: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
6380: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
6390: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
63a0: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
63b0: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
63c0: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
63d0: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
63e0: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
63f0: 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66  ** Db.pSchema->f
6400: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
6410: 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70  define DbHasProp
6420: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
6430: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
6440: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29  chema->flags&(P)
6450: 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
6460: 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  DbHasAnyProperty
6470: 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e  (D,I,P)  (((D)->
6480: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
6490: 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
64a0: 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70  define DbSetProp
64b0: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
64c0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
64d0: 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  ema->flags|=(P).
64e0: 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50  #define DbClearP
64f0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
6500: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
6510: 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50  hema->flags&=~(P
6520: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
6530: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
6540: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
6550: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
6560: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
6570: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
6580: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
6590: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
65a0: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
65b0: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
65c0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
65d0: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
65e0: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
65f0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
6600: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
6610: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
6620: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
6630: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
6640: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
6650: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
6660: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
6670: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
6680: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
6690: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
66a0: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
66b0: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
66c0: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
66d0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
66e0: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
66f0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
6700: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
6710: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
6720: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
6730: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
6740: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
6750: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
6760: 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a  0 bytes) */../*.
6770: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
6780: 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73   different kinds
6790: 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20   of things that 
67a0: 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a  can be limited.*
67b0: 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69  * using the sqli
67c0: 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65  te3_limit() inte
67d0: 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rface..*/.#defin
67e0: 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  e SQLITE_N_LIMIT
67f0: 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54   (SQLITE_LIMIT_T
6800: 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a  RIGGER_DEPTH+1).
6810: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
6820: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
6830: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
6840: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
6850: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
6860: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
6870: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
6880: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
6890: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
68a0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
68b0: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
68c0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
68d0: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
68e0: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
68f0: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
6900: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
6910: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
6920: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
6930: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
6940: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
6950: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
6960: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
6970: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
6980: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
6990: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
69a0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
69b0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
69c0: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
69d0: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
69e0: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
69f0: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
6a00: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
6a10: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
6a20: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
6a30: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
6a40: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
6a50: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
6a60: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
6a70: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
6a80: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
6a90: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
6aa0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
6ab0: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
6ac0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
6ad0: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
6ae0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
6af0: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
6b00: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
6b10: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
6b20: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
6b30: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
6b40: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
6b50: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
6b60: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
6b70: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
6b80: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
6b90: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
6ba0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
6bb0: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
6bc0: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
6bd0: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
6be0: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
6bf0: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
6c00: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
6c10: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
6c20: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
6c30: 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20  u16 sz;         
6c40: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
6c50: 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20 69  of each buffer i
6c60: 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20  n bytes */.  u8 
6c70: 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  bEnabled;       
6c80: 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f       /* False to
6c90: 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f   disable new loo
6ca0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
6cb0: 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c  ns */.  u8 bMall
6cc0: 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  oced;           
6cd0: 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72  /* True if pStar
6ce0: 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
6cf0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
6d00: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20   */.  int nOut; 
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6d20: 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65   Number of buffe
6d30: 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65  rs currently che
6d40: 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e  cked out */.  in
6d50: 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20  t mxOut;        
6d60: 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74        /* Highwat
6d70: 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74  er mark for nOut
6d80: 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74   */.  int anStat
6d90: 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  [3];          /*
6da0: 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69   0: hits.  1: si
6db0: 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66  ze misses.  2: f
6dc0: 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20  ull misses */.  
6dd0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70  LookasideSlot *p
6de0: 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20  Free;   /* List 
6df0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66  of available buf
6e00: 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
6e10: 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20  pStart;         
6e20: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
6e30: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  of available mem
6e40: 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76  ory space */.  v
6e50: 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20  oid *pEnd;      
6e60: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
6e70: 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66  byte past end of
6e80: 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65   available space
6e90: 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f   */.};.struct Lo
6ea0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20  okasideSlot {.  
6eb0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70  LookasideSlot *p
6ec0: 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74  Next;    /* Next
6ed0: 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c   buffer in the l
6ee0: 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66  ist of free buff
6ef0: 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ers */.};../*.**
6f00: 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f   A hash table fo
6f10: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
6f20: 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61  itions..**.** Ha
6f30: 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20  sh each FuncDef 
6f40: 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f  structure into o
6f50: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
6f60: 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e  fHash.a[] slots.
6f70: 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61  .** Collisions a
6f80: 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65  re on the FuncDe
6f90: 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a  f.pHash chain..*
6fa0: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  /.struct FuncDef
6fb0: 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66  Hash {.  FuncDef
6fc0: 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f   *a[23];       /
6fd0: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72  * Hash table for
6fe0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
6ff0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
7000: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
7010: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
7020: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
7030: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
7040: 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a  truct sqlite3 {.
7050: 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70    sqlite3_vfs *p
7060: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Vfs;            
7070: 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20  /* OS Interface 
7080: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
7090: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
70a0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
70b0: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
70c0: 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53  hines */.  CollS
70d0: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
70e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
70f0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
7100: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
7110: 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  RY) */.  sqlite3
7120: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
7130: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
7140: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
7150: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
7160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7170: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
7180: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71a0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
71b0: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
71c0: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74   in use */.  int
71d0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
71e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
71f0: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67  scellaneous flag
7200: 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  s. See below */.
7210: 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b    i64 lastRowid;
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7230: 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74  /* ROWID of most
7240: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28   recent insert (
7250: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  see above) */.  
7260: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
7270: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
7280: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
7290: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
72a0: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
72b0: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
72c0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
72d0: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
72e0: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
72f0: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
7300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7310: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
7320: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
7330: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
7340: 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73    u16 dbOptFlags
7350: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7360: 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62  /* Flags to enab
7370: 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d  le/disable optim
7380: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  izations */.  u8
7390: 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20   autoCommit;    
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
73b0: 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  he auto-commit f
73c0: 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d  lag. */.  u8 tem
73d0: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
73e0: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
73f0: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
7400: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
7410: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
7420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
7430: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
7440: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
7450: 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74  ure */.  u8 dflt
7460: 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20  LockMode;       
7470: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
7480: 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66  t locking-mode f
7490: 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20  or attached dbs 
74a0: 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72  */.  signed char
74b0: 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20   nextAutovac;   
74c0: 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65     /* Autovac se
74d0: 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55  tting after VACU
74e0: 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75  UM if >=0 */.  u
74f0: 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20  8 suppressErr;  
7500: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7510: 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72  Do not issue err
7520: 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74  or messages if t
7530: 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62  rue */.  u8 vtab
7540: 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20  OnConflict;     
7550: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
7560: 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33  to return for s3
7570: 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63  _vtab_on_conflic
7580: 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72  t() */.  u8 isTr
7590: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
75a0: 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  nt;    /* True i
75b0: 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  f the outermost 
75c0: 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54  savepoint is a T
75d0: 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  S */.  int nextP
75e0: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
75f0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
7600: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
7610: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
7620: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
7630: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
7640: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
7650: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
7660: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
7670: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
7680: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
7690: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
76a0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
76b0: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
76c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
76d0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
76e0: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
76f0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
7700: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
7710: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
7720: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72   Limits */.  str
7730: 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49  uct sqlite3InitI
7740: 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e  nfo {      /* In
7750: 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64  formation used d
7760: 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61  uring initializa
7770: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
7780: 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20  newTnum;        
7790: 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70          /* Rootp
77a0: 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69  age of table bei
77b0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
77c0: 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20  /.    u8 iDb;   
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77e0: 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69    /* Which db fi
77f0: 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74  le is being init
7800: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
7810: 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20  8 busy;         
7820: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52             /* TR
7830: 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  UE if currently 
7840: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a  initializing */.
7850: 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69      u8 orphanTri
7860: 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  gger;           
7870: 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e  /* Last statemen
7880: 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45  t is orphaned TE
7890: 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  MP trigger */.  
78a0: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 61 63  } init;.  int ac
78b0: 74 69 76 65 56 64 62 65 43 6e 74 3b 20 20 20 20  tiveVdbeCnt;    
78c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
78d0: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
78e0: 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 2a  ntly executing *
78f0: 2f 0a 20 20 69 6e 74 20 77 72 69 74 65 56 64 62  /.  int writeVdb
7900: 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  eCnt;           
7910: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
7920: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
7930: 20 61 72 65 20 77 72 69 74 69 6e 67 20 2a 2f 0a   are writing */.
7940: 20 20 69 6e 74 20 76 64 62 65 45 78 65 63 43 6e    int vdbeExecCn
7950: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
7960: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
7970: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
7980: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
7990: 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20   nExtension;    
79a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
79b0: 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65  mber of loaded e
79c0: 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76  xtensions */.  v
79d0: 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e  oid **aExtension
79e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
79f0: 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20  Array of shared 
7a00: 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20  library handles 
7a10: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61  */.  void (*xTra
7a20: 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  ce)(void*,const 
7a30: 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f  char*);        /
7a40: 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  * Trace function
7a50: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61   */.  void *pTra
7a60: 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ceArg;          
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
7a90: 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  he trace functio
7aa0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50  n */.  void (*xP
7ab0: 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f  rofile)(void*,co
7ac0: 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20  nst char*,u64); 
7ad0: 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75   /* Profiling fu
7ae0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
7af0: 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20   *pProfileArg;  
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b10: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
7b20: 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e  t to profile fun
7b30: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
7b40: 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20  *pCommitArg;    
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7b60: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d  Argument to xCom
7b70: 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  mitCallback() */
7b80: 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d     .  int (*xCom
7b90: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
7ba0: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
7bb0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
7bc0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
7bd0: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
7be0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7bf0: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
7c00: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
7c10: 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f     .  void (*xRo
7c20: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
7c30: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
7c40: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
7c50: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
7c60: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
7c70: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
7c80: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
7c90: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
7ca0: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
7cb0: 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51  nt64);.#ifdef SQ
7cc0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
7cd0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69  PDATE_HOOK.  voi
7ce0: 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72 67  d *pPreUpdateArg
7cf0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
7d00: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
7d10: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
7d20: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ck */.  void (*x
7d30: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
7d40: 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65  k)(   /* Registe
7d50: 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  red using sqlite
7d60: 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b  3_preupdate_hook
7d70: 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c  () */.    void*,
7d80: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61  sqlite3*,int,cha
7d90: 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f  r const*,char co
7da0: 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nst*,sqlite3_int
7db0: 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  64,sqlite3_int64
7dc0: 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74  .  );.  PreUpdat
7dd0: 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20  e *pPreUpdate;  
7de0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
7df0: 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d   for active pre-
7e00: 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20  update callback 
7e10: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
7e20: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
7e30: 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66  DATE_HOOK */.#if
7e40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7e50: 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61  _WAL.  int (*xWa
7e60: 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20  lCallback)(void 
7e70: 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  *, sqlite3 *, co
7e80: 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
7e90: 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72  ;.  void *pWalAr
7ea0: 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64  g;.#endif.  void
7eb0: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76  (*xCollNeeded)(v
7ec0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
7ed0: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
7ee0: 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28   char*);.  void(
7ef0: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28  *xCollNeeded16)(
7f00: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
7f10: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
7f20: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
7f30: 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67   *pCollNeededArg
7f40: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
7f50: 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20  e *pErr;        
7f60: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
7f70: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
7f80: 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
7f90: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7fa0: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
7fb0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 28   error message (
7fc0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 29 20 2a  UTF-8 encoded) *
7fd0: 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
7fe0: 67 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20  g16;            
7ff0: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
8000: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 28   error message (
8010: 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 29 20  UTF-16 encoded) 
8020: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
8030: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
8040: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
8050: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
8060: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
8070: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
8080: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
8090: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
80a0: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
80b0: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
80c0: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
80d0: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
80e0: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
80f0: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
8100: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
8110: 52 49 5a 41 54 49 4f 4e 0a 20 20 69 6e 74 20 28  RIZATION.  int (
8120: 2a 78 41 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  *xAuth)(void*,in
8130: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
8140: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
8150: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8160: 2a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  *);.            
8170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8180: 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75      /* Access au
8190: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63  thorization func
81a0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
81b0: 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20  pAuthArg;       
81c0: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
81d0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61  rgument to the a
81e0: 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74  ccess auth funct
81f0: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ion */.#endif.#i
8200: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8210: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
8220: 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f  ACK.  int (*xPro
8230: 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20  gress)(void *); 
8240: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
8250: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
8260: 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73    void *pProgres
8270: 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
8280: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
8290: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
82a0: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  back */.  int nP
82b0: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
82c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
82d0: 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72  r of opcodes for
82e0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
82f0: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ck */.#endif.#if
8300: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8310: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
8320: 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20  int nVTrans;    
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8340: 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20   Allocated size 
8350: 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20  of aVTrans */.  
8360: 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20  Hash aModule;   
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8380: 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71   populated by sq
8390: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
83a0: 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43  ule() */.  VtabC
83b0: 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20  tx *pVtabCtx;   
83c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
83d0: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76  ext for active v
83e0: 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61  tab connect/crea
83f0: 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  te */.  VTable *
8400: 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20  *aVTrans;       
8410: 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c        /* Virtual
8420: 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65   tables with ope
8430: 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a  n transactions *
8440: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73  /.  VTable *pDis
8450: 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44  connect;    /* D
8460: 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20  isconnect these 
8470: 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f  in next sqlite3_
8480: 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e  prepare() */.#en
8490: 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73  dif.  FuncDefHas
84a0: 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20  h aFunc;        
84b0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
84c0: 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e of connection 
84d0: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48  functions */.  H
84e0: 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20  ash aCollSeq;   
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8500: 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  All collating se
8510: 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73  quences */.  Bus
8520: 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e  yHandler busyHan
8530: 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75  dler;      /* Bu
8540: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
8550: 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d   Db aDbStatic[2]
8560: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
8570: 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66  * Static space f
8580: 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74  or the 2 default
8590: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53   backends */.  S
85a0: 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
85b0: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  oint;        /* 
85c0: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73  List of active s
85d0: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
85e0: 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20  nt busyTimeout; 
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8600: 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d  Busy handler tim
8610: 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f  eout, in msec */
8620: 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e  .  int nSavepoin
8630: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
8640: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f   /* Number of no
8650: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
8660: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
8670: 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20  t nStatement;   
8680: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8690: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
86a0: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
86b0: 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34  ctions  */.  i64
86c0: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
86d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
86e0: 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  t deferred const
86f0: 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e  raints this tran
8700: 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 6e  saction. */.  in
8710: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
8720: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
8730: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
8740: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
8750: 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65  Free() */..#ifde
8760: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
8770: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
8780: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
8790: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
87a0: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
87b0: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
87c0: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
87d0: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
87e0: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
87f0: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
8800: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
8810: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
8820: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
8830: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
8840: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
8850: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
8860: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
8870: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
8880: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
8890: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
88a0: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
88b0: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
88c0: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
88d0: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
88e0: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
88f0: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
8900: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
8910: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
8920: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
8930: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
8940: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
8950: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
8960: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
8970: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
8980: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
8990: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
89a0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
89b0: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
89c0: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
89d0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
89e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
89f0: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
8a00: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
8a10: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
8a20: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
8a30: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
8a40: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
8a50: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
8a60: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
8a70: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
8a80: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
8a90: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
8aa0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
8ab0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
8ac0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
8ad0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
8ae0: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
8af0: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
8b00: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
8b10: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
8b20: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
8b30: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
8b40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
8b50: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
8b60: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
8b70: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
8b80: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
8b90: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
8ba0: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
8bb0: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
8bc0: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
8bd0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
8be0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
8bf0: 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30  ames   0x0000000
8c00: 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20  4  /* Show full 
8c10: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20  column names on 
8c20: 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e  SELECT */.#defin
8c30: 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  e SQLITE_ShortCo
8c40: 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30  lNames  0x000000
8c50: 30 38 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72  08  /* Show shor
8c60: 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20  t columns names 
8c70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8c80: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20  E_CountRows     
8c90: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
8ca0: 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67  Count rows chang
8cb0: 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f  ed by INSERT, */
8cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ce0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
8cf0: 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
8d00: 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a  E and return */.
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74            /*   t
8d40: 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61  he count using a
8d50: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64   callback. */.#d
8d60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c  efine SQLITE_Nul
8d70: 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30  lCallback   0x00
8d80: 30 30 30 30 32 30 20 20 2f 2a 20 49 6e 76 6f 6b  000020  /* Invok
8d90: 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f  e the callback o
8da0: 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20  nce if the */.  
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dd0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73          /*   res
8de0: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
8df0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8e00: 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20  TE_SqlTrace     
8e10: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
8e20: 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c   Debug print SQL
8e30: 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20   as it executes 
8e40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8e50: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20  E_VdbeListing   
8e60: 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20   0x00000080  /* 
8e70: 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f  Debug listings o
8e80: 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20  f VDBE programs 
8e90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8ea0: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
8eb0: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
8ec0: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
8ed0: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 20 20  ITE_MASTER */.  
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ef0: 20 20 20 20 20 20 20 2f 2a 20 20 20 30 78 30 30         /*   0x00
8f00: 30 30 30 32 30 30 20 20 55 6e 75 73 65 64 20 2a  000200  Unused *
8f10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8f20: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
8f30: 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44  0x00000400  /* D
8f40: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
8f50: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
8f60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8f70: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
8f80: 64 20 30 78 30 30 30 30 38 30 30 20 20 2f 2a 20  d 0x0000800  /* 
8f90: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
8fa0: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
8fb0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
8fc0: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 31 30 30  leFmt  0x0000100
8fd0: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
8fe0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
8ff0: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
9000: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
9010: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 32 30  nc      0x000020
9020: 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  00  /* Use full 
9030: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
9040: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
9050: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
9060: 53 79 6e 63 20 20 30 78 30 30 30 30 34 30 30 30  Sync  0x00004000
9070: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
9080: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
9090: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
90a0: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
90b0: 65 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20  e   0x00008000  
90c0: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
90d0: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
90e0: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
90f0: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 31 30  eOrder   0x00010
9100: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
9110: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
9120: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9130: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
9140: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
9150: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
9160: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
9170: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
9180: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
9190: 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0040000  /* Enfo
91a0: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
91b0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
91c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
91d0: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
91e0: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 61  00080000  /* Ena
91f0: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
9200: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
9210: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
9220: 69 6c 74 69 6e 20 20 30 78 30 30 31 30 30 30 30  iltin  0x0010000
9230: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
9240: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
9250: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
9260: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
9270: 6f 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  on  0x00200000  
9280: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
9290: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
92a0: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
92b0: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 34 30  eTrigger  0x0040
92c0: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
92d0: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
92e0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20   */../*.** Bits 
92f0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  of the sqlite3.d
9300: 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20  bOptFlags field 
9310: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79  that are used by
9320: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
9330: 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
9340: 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
9350: 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20  IMIZATIONS,...) 
9360: 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20  interface to.** 
9370: 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61  selectively disa
9380: 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69  ble various opti
9390: 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  mizations..*/.#d
93a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
93b0: 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30  ryFlattener 0x00
93c0: 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c  01   /* Query fl
93d0: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
93e0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
93f0: 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32  nCache    0x0002
9400: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63     /* Column cac
9410: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
9420: 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65  LITE_GroupByOrde
9430: 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20  r   0x0004   /* 
9440: 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66  GROUPBY cover of
9450: 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66   ORDERBY */.#def
9460: 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f  ine SQLITE_Facto
9470: 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38  rOutConst 0x0008
9480: 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66     /* Constant f
9490: 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66  actoring */.#def
94a0: 69 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65  ine SQLITE_IdxRe
94b0: 61 6c 41 73 49 6e 74 20 20 20 30 78 30 30 31 30  alAsInt   0x0010
94c0: 20 20 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c     /* Store REAL
94d0: 20 61 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63   as INT in indic
94e0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
94f0: 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74  LITE_DistinctOpt
9500: 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20      0x0020   /* 
9510: 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69  DISTINCT using i
9520: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
9530: 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64  e SQLITE_CoverId
9540: 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20  xScan   0x0040  
9550: 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64   /* Covering ind
9560: 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66  ex scans */.#def
9570: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72  ine SQLITE_Order
9580: 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30  ByIdxJoin 0x0080
9590: 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f     /* ORDER BY o
95a0: 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65  f joins via inde
95b0: 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  x */.#define SQL
95c0: 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e  ITE_SubqCoroutin
95d0: 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45  e  0x0100   /* E
95e0: 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69  valuate subqueri
95f0: 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73  es as coroutines
9600: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9610: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
9620: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
9630: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
9640: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
9650: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
9660: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
9670: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
9680: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
9690: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
96a0: 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
96b0: 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f  N_TEST.#define O
96c0: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
96d0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28  led(db, mask)  (
96e0: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
96f0: 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64  s&(mask))!=0).#d
9700: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
9710: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
9720: 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62  sk)   (((db)->db
9730: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
9740: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69  ==0).#else.#defi
9750: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
9760: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
9770: 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74  )  0.#define Opt
9780: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
9790: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23  (db, mask)   1.#
97a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  endif../*.** Pos
97b0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
97c0: 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69   the sqlite.magi
97d0: 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20  c field..** The 
97e0: 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61  numbers are obta
97f0: 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  ined at random a
9800: 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69  nd have no speci
9810: 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65  al meaning, othe
9820: 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20  r.** than being 
9830: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e  distinct from on
9840: 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64  e another..*/.#d
9850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9860: 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30  IC_OPEN     0xa0
9870: 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62  29a697  /* Datab
9880: 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23  ase is open */.#
9890: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
98a0: 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39  GIC_CLOSED   0x9
98b0: 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61  f3c2d33  /* Data
98c0: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a  base is closed *
98d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
98e0: 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20  _MAGIC_SICK     
98f0: 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45  0x4b771290  /* E
9900: 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e  rror and awaitin
9910: 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69  g close */.#defi
9920: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9930: 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37  BUSY     0xf03b7
9940: 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65  906  /* Database
9950: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
9960: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
9970: 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20  ITE_MAGIC_ERROR 
9980: 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f     0xb5357930  /
9990: 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  * An SQLITE_MISU
99a0: 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  SE error occurre
99b0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
99c0: 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45  ITE_MAGIC_ZOMBIE
99d0: 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f     0x64cffc7f  /
99e0: 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73  * Close with las
99f0: 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73  t statement clos
9a00: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  e */../*.** Each
9a10: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
9a20: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69   defined by an i
9a30: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
9a40: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75  ollowing.** stru
9a50: 63 74 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65  cture.  A pointe
9a60: 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
9a70: 75 72 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ure is stored in
9a80: 20 74 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e   the sqlite.aFun
9a90: 63 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  c.** hash table.
9aa0: 20 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20    When multiple 
9ab0: 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74  functions have t
9ac0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68  he same name, th
9ad0: 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20  e hash table.** 
9ae0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b  points to a link
9af0: 65 64 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65  ed list of these
9b00: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a   structures..*/.
9b10: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b  struct FuncDef {
9b20: 0a 20 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20  .  i16 nArg;    
9b30: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9b40: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  r of arguments. 
9b50: 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69   -1 means unlimi
9b60: 74 65 64 20 2a 2f 0a 20 20 75 38 20 69 50 72 65  ted */.  u8 iPre
9b70: 66 45 6e 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  fEnc;         /*
9b80: 20 50 72 65 66 65 72 72 65 64 20 74 65 78 74 20   Preferred text 
9b90: 65 6e 63 6f 64 69 6e 67 20 28 53 51 4c 49 54 45  encoding (SQLITE
9ba0: 5f 55 54 46 38 2c 20 31 36 4c 45 2c 20 31 36 42  _UTF8, 16LE, 16B
9bb0: 45 29 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73  E) */.  u8 flags
9bc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
9bd0: 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  Some combination
9be0: 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   of SQLITE_FUNC_
9bf0: 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  * */.  void *pUs
9c00: 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55  erData;     /* U
9c10: 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74  ser data paramet
9c20: 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  er */.  FuncDef 
9c30: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
9c40: 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69  Next function wi
9c50: 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a  th same name */.
9c60: 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28    void (*xFunc)(
9c70: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
9c80: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
9c90: 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61  ue**); /* Regula
9ca0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
9cb0: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
9cc0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
9cd0: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
9ce0: 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74  **); /* Aggregat
9cf0: 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  e step */.  void
9d00: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
9d10: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 69 6e  /* Aggregate fin
9d40: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72  alizer */.  char
9d50: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
9d60: 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20   /* SQL name of 
9d70: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f  the function. */
9d80: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73  .  FuncDef *pHas
9d90: 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  h;      /* Next 
9da0: 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74  with a different
9db0: 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61   name but the sa
9dc0: 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e  me hash */.  Fun
9dd0: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
9de0: 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52  structor;   /* R
9df0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64  eference counted
9e00: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
9e10: 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tion */.};../*.*
9e20: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
9e30: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
9e40: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
9e50: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
9e60: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
9e70: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
9e80: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
9e90: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
9ea0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
9eb0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
9ec0: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
9ed0: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
9ee0: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
9ef0: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
9f00: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
9f10: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
9f20: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
9f30: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
9f40: 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   to .** the numb
9f50: 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62  er of FuncDef ob
9f60: 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65  jects created (e
9f70: 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65  ither 1 or 3, de
9f80: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
9f90: 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65  er.** or not the
9fa0: 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64   specified encod
9fb0: 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e  ing is SQLITE_AN
9fc0: 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e  Y). The FuncDef.
9fd0: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d  pDestructor.** m
9fe0: 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66  ember of each of
9ff0: 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66   the new FuncDef
a000: 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20   objects is set 
a010: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
a020: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e  allocated.** Fun
a030: 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a  cDestructor..**.
a040: 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77  ** Thereafter, w
a050: 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  hen one of the F
a060: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
a070: 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72  s deleted, the r
a080: 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e  eference.** coun
a090: 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  t on this object
a0a0: 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e   is decremented.
a0b0: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
a0c0: 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74   0, the destruct
a0d0: 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64  or.** is invoked
a0e0: 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73   and the FuncDes
a0f0: 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72  tructor structur
a100: 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75  e freed..*/.stru
a110: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
a120: 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a  r {.  int nRef;.
a130: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
a140: 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f  y)(void *);.  vo
a150: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d  id *pUserData;.}
a160: 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  ;../*.** Possibl
a170: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e  e values for Fun
a180: 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74  cDef.flags.  Not
a190: 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47  e that the _LENG
a1a0: 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a  TH and _TYPEOF.*
a1b0: 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f  * values must co
a1c0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c  rrespond to OPFL
a1d0: 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
a1e0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
a1f0: 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  G.  There.** are
a200: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
a210: 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
a220: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e   to verify this.
a230: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
a240: 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20  TE_FUNC_LIKE    
a250: 20 30 78 30 31 20 2f 2a 20 43 61 6e 64 69 64 61   0x01 /* Candida
a260: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
a270: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
a280: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a290: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
a2a0: 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74  2 /* Case-sensit
a2b0: 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75  ive LIKE-type fu
a2c0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a2d0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50  e SQLITE_FUNC_EP
a2e0: 48 45 4d 20 20 20 20 30 78 30 34 20 2f 2a 20 45  HEM    0x04 /* E
a2f0: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
a300: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
a310: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
a320: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 38  NC_NEEDCOLL 0x08
a330: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
a340: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
a350: 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23  t be called */.#
a360: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
a370: 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 31 30  NC_COUNT    0x10
a380: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75   /* Built-in cou
a390: 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20  nt(*) aggregate 
a3a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a3b0: 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20  E_FUNC_COALESCE 
a3c0: 30 78 32 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0x20 /* Built-in
a3d0: 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69   coalesce() or i
a3e0: 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e  fnull() function
a3f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a400: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
a410: 20 30 78 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69   0x40 /* Built-i
a420: 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74  n length() funct
a430: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a440: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
a450: 46 20 20 20 30 78 38 30 20 2f 2a 20 42 75 69 6c  F   0x80 /* Buil
a460: 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75  t-in typeof() fu
a470: 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nction */../*.**
a480: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
a490: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
a4a0: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
a4b0: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
a4c0: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
a4d0: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
a4e0: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
a4f0: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
a500: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
a510: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
a520: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
a530: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
a540: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
a550: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
a560: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
a570: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
a580: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
a590: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
a5a0: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
a5b0: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
a5c0: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
a5d0: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
a5e0: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
a5f0: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
a600: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
a610: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
a620: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
a630: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
a640: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a   function. If .*
a650: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
a660: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
a670: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
a680: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
a690: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 41  s set..**.**   A
a6a0: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
a6b0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
a6c0: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a   xStep, xFinal).
a6d0: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
a6e0: 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61  reate an aggrega
a6f0: 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  te function defi
a700: 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nition implement
a710: 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65  ed by.**     the
a720: 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74   C functions xSt
a730: 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54  ep and xFinal. T
a740: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61  he first four pa
a750: 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20  rameters.**     
a760: 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
a770: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
a780: 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70  as the first 4 p
a790: 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20  arameters to.** 
a7a0: 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a      FUNCTION()..
a7b0: 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43  **.**   LIKEFUNC
a7c0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
a7d0: 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20  rg, flags).**   
a7e0: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
a7f0: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
a800: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
a810: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
a820: 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  e .**     that a
a830: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
a840: 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
a850: 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
a860: 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20  ll to C .**     
a870: 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e  function likeFun
a880: 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67  c. Argument pArg
a890: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
a8a0: 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a  oid *) and made.
a8b0: 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65  **     available
a8c0: 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   as the function
a8d0: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
a8e0: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
a8f0: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e  . The.**     Fun
a900: 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61  cDef.flags varia
a910: 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ble is set to th
a920: 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61  e value passed a
a930: 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20  s the flags.**  
a940: 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f     parameter..*/
a950: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
a960: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
a970: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
a980: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
a990: 54 45 5f 55 54 46 38 2c 20 28 62 4e 43 2a 53 51  TE_UTF8, (bNC*SQ
a9a0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
a9b0: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
a9c0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
a9d0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
a9e0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
a9f0: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
aa00: 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  N2(zName, nArg, 
aa10: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
aa20: 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
aa30: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
aa40: 55 54 46 38 2c 20 28 62 4e 43 2a 53 51 4c 49 54  UTF8, (bNC*SQLIT
aa50: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
aa60: 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
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 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
aa90: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
aaa0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
aab0: 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e   STR_FUNCTION(zN
aac0: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
aad0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
aae0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
aaf0: 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8, bNC*SQLITE_
ab00: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c  FUNC_NEEDCOLL, \
ab10: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
ab20: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
ab30: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
ab40: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
ab50: 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
ab60: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
ab70: 49 54 45 5f 55 54 46 38 2c 20 66 6c 61 67 73 2c  ITE_UTF8, flags,
ab80: 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
ab90: 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
aba0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
abb0: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
abc0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
abd0: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
abe0: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
abf0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 6e 63   SQLITE_UTF8, nc
ac00: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ac10: 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53 51 4c 49  DCOLL, \.   SQLI
ac20: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
ac30: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
ac40: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c  xFinal,#zName,0,
ac50: 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  0}../*.** All cu
ac60: 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
ac70: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
ac80: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
ac90: 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
aca0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
acb0: 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
acc0: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
acd0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
ace0: 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
acf0: 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
ad00: 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
ad10: 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
ad20: 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
ad30: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
ad40: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
ad50: 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
ad60: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ad80: 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
ad90: 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
ada0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
adb0: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
adc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
add0: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
ade0: 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
adf0: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
ae00: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
ae10: 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
ae20: 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
ae30: 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
ae40: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
ae50: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
ae60: 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
ae70: 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
ae80: 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
ae90: 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
aea0: 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
aeb0: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
aec0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
aed0: 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
aee0: 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
aef0: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
af00: 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
af10: 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
af20: 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
af30: 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
af40: 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
af50: 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
af60: 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
af70: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
af80: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
af90: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
afa0: 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
afb0: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
afc0: 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
afd0: 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
afe0: 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
aff0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
b000: 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
b010: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
b020: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
b030: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
b040: 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
b050: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
b060: 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20  id *pAux;       
b070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b080: 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65     /* pAux passe
b090: 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
b0a0: 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  le() */.  void (
b0b0: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
b0c0: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *);            /
b0d0: 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63  * Module destruc
b0e0: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
b0f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  };../*.** inform
b100: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
b110: 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
b120: 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
b130: 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
b140: 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
b150: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
b160: 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
b170: 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
b180: 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
b190: 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  n */.  Expr *pDf
b1a0: 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
b1b0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
b1c0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
b1d0: 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *zDflt;     /*
b1e0: 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
b1f0: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  f the default va
b200: 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  lue */.  char *z
b210: 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74  Type;     /* Dat
b220: 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73 20  a type for this 
b230: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
b240: 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20   *zColl;     /* 
b250: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
b260: 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73  ce.  If NULL, us
b270: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f  e the default */
b280: 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20  .  u8 notNull;  
b290: 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f      /* An OE_ co
b2a0: 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  de for handling 
b2b0: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
b2c0: 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20  raint */.  char 
b2d0: 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f  affinity;   /* O
b2e0: 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
b2f0: 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20  _AFF_... values 
b300: 2a 2f 0a 20 20 75 31 36 20 63 6f 6c 46 6c 61 67  */.  u16 colFlag
b310: 73 3b 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e  s;    /* Boolean
b320: 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65   properties.  Se
b330: 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e  e COLFLAG_ defin
b340: 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  es below */.};..
b350: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
b360: 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c  s for Column.col
b370: 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e  Flags:.*/.#defin
b380: 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45  e COLFLAG_PRIMKE
b390: 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20  Y  0x0001    /* 
b3a0: 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f  Column is part o
b3b0: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
b3c0: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  y */.#define COL
b3d0: 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78  FLAG_HIDDEN   0x
b3e0: 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64  0002    /* A hid
b3f0: 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  den column in a 
b400: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
b410: 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
b420: 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
b430: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
b440: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b450: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
b460: 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
b470: 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
b480: 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
b490: 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
b4a0: 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
b4b0: 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
b4c0: 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
b4d0: 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
b4e0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  e..**.** There m
b4f0: 61 79 20 74 77 6f 20 73 65 70 61 72 61 74 65 20  ay two separate 
b500: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
b510: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  of the collation
b520: 20 66 75 6e 63 74 69 6f 6e 2c 20 6f 6e 65 0a 2a   function, one.*
b530: 2a 20 74 68 61 74 20 70 72 6f 63 65 73 73 65 73  * that processes
b540: 20 74 65 78 74 20 69 6e 20 55 54 46 2d 38 20 65   text in UTF-8 e
b550: 6e 63 6f 64 69 6e 67 20 28 43 6f 6c 6c 53 65 71  ncoding (CollSeq
b560: 2e 78 43 6d 70 29 20 61 6e 64 20 61 6e 6f 74 68  .xCmp) and anoth
b570: 65 72 20 74 68 61 74 0a 2a 2a 20 70 72 6f 63 65  er that.** proce
b580: 73 73 65 73 20 74 65 78 74 20 65 6e 63 6f 64 65  sses text encode
b590: 64 20 69 6e 20 55 54 46 2d 31 36 20 28 43 6f 6c  d in UTF-16 (Col
b5a0: 6c 53 65 71 2e 78 43 6d 70 31 36 29 2c 20 75 73  lSeq.xCmp16), us
b5b0: 69 6e 67 20 74 68 65 20 6d 61 63 68 69 6e 65 0a  ing the machine.
b5c0: 2a 2a 20 6e 61 74 69 76 65 20 62 79 74 65 20 6f  ** native byte o
b5d0: 72 64 65 72 2e 20 57 68 65 6e 20 61 20 63 6f 6c  rder. When a col
b5e0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
b5f0: 69 73 20 69 6e 76 6f 6b 65 64 2c 20 53 51 4c 69  is invoked, SQLi
b600: 74 65 20 73 65 6c 65 63 74 73 0a 2a 2a 20 74 68  te selects.** th
b610: 65 20 76 65 72 73 69 6f 6e 20 74 68 61 74 20 77  e version that w
b620: 69 6c 6c 20 72 65 71 75 69 72 65 20 74 68 65 20  ill require the 
b630: 6c 65 61 73 74 20 65 78 70 65 6e 73 69 76 65 20  least expensive 
b640: 65 6e 63 6f 64 69 6e 67 0a 2a 2a 20 74 72 61 6e  encoding.** tran
b650: 73 6c 61 74 69 6f 6e 73 2c 20 69 66 20 61 6e 79  slations, if any
b660: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 43 6f 6c 6c  ..**.** The Coll
b670: 53 65 71 2e 70 55 73 65 72 20 6d 65 6d 62 65 72  Seq.pUser member
b680: 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 6e 20   variable is an 
b690: 65 78 74 72 61 20 70 61 72 61 6d 65 74 65 72 20  extra parameter 
b6a0: 74 68 61 74 20 70 61 73 73 65 64 20 69 6e 0a 2a  that passed in.*
b6b0: 2a 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61  * as the first a
b6c0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 55  rgument to the U
b6d0: 54 46 2d 38 20 63 6f 6d 70 61 72 69 73 6f 6e 20  TF-8 comparison 
b6e0: 66 75 6e 63 74 69 6f 6e 2c 20 78 43 6d 70 2e 0a  function, xCmp..
b6f0: 2a 2a 20 43 6f 6c 6c 53 65 71 2e 70 55 73 65 72  ** CollSeq.pUser
b700: 31 36 20 69 73 20 74 68 65 20 65 71 75 69 76 61  16 is the equiva
b710: 6c 65 6e 74 20 66 6f 72 20 74 68 65 20 55 54 46  lent for the UTF
b720: 2d 31 36 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  -16 comparison f
b730: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 78 43 6d 70  unction,.** xCmp
b740: 31 36 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74  16..**.** If bot
b750: 68 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 61  h CollSeq.xCmp a
b760: 6e 64 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 31  nd CollSeq.xCmp1
b770: 36 20 61 72 65 20 4e 55 4c 4c 2c 20 69 74 20 6d  6 are NULL, it m
b780: 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
b790: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b7a0: 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
b7b0: 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
b7c0: 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
b7d0: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
b7e0: 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
b7f0: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
b800: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
b810: 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
b820: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
b830: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
b840: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b850: 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
b860: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
b870: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
b880: 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
b890: 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
b8a0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
b8b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
b8c0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
b8d0: 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
b8e0: 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
b8f0: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
b900: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
b910: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
b920: 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
b930: 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
b940: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
b950: 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
b960: 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
b970: 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
b980: 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
b990: 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
b9a0: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
b9b0: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
b9c0: 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
b9d0: 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
b9e0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
b9f0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
ba00: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
ba10: 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
ba20: 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
ba30: 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
ba40: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
ba50: 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
ba60: 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
ba70: 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
ba80: 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
ba90: 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
baa0: 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
bab0: 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
bac0: 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
bad0: 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
bae0: 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74    .**.** But rat
baf0: 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77  her than start w
bb00: 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62  ith 0 or 1, we b
bb10: 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20  egin with 'a'.  
bb20: 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65  That way,.** whe
bb30: 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e  n multiple affin
bb40: 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f  ity types are co
bb50: 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20  ncatenated into 
bb60: 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20  a string and.** 
bb70: 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f  used as the P4 o
bb80: 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c  perand, they wil
bb90: 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62  l be more readab
bba0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61  le..**.** Note a
bbb0: 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d  lso that the num
bbc0: 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67  eric types are g
bbd0: 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20  rouped together 
bbe0: 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a  so that testing.
bbf0: 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63  ** for a numeric
bc00: 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c   type is a singl
bc10: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f  e comparison..*/
bc20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc30: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 61 27  AFF_TEXT     'a'
bc40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc50: 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27  AFF_NONE     'b'
bc60: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc70: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27  AFF_NUMERIC  'c'
bc80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc90: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27  AFF_INTEGER  'd'
bca0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bcb0: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27  AFF_REAL     'e'
bcc0: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
bcd0: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
bce0: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
bcf0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
bd00: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
bd10: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
bd20: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
bd30: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
bd40: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
bd50: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
bd60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
bd70: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a  F_MASK     0x67.
bd80: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
bd90: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
bda0: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
bdb0: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
bdc0: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
bdd0: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
bde0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
bdf0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
be00: 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x08  /* jumps i
be10: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
be20: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
be30: 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
be40: 50 32 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a  P2      0x10  /*
be50: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
be60: 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
be70: 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
be80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
be90: 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
bea0: 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a  * NULL=NULL */..
beb0: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
bec0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
bed0: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
bee0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
bef0: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
bf00: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
bf10: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
bf20: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
bf30: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
bf40: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
bf50: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
bf60: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
bf70: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
bf80: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
bf90: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
bfa0: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
bfb0: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
bfc0: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
bfd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
bfe0: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
bff0: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
c000: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
c010: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
c020: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
c030: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
c040: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
c050: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
c060: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
c070: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
c080: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
c090: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
c0a0: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
c0b0: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
c0c0: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
c0d0: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
c0e0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
c0f0: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
c100: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
c110: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
c120: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
c130: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
c140: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
c150: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
c160: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
c170: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
c180: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c190: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
c1a0: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
c1b0: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
c1c0: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
c1d0: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
c1e0: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
c1f0: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
c200: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
c210: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
c220: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
c230: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
c240: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
c250: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
c260: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
c270: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
c280: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
c290: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
c2a0: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
c2b0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
c2c0: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
c2d0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
c2e0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
c2f0: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
c300: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
c310: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
c320: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
c330: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
c340: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
c350: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
c360: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
c370: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
c380: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
c390: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
c3a0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
c3b0: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
c3c0: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
c3d0: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
c3e0: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
c3f0: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
c400: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
c410: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
c420: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
c430: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
c440: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
c450: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
c460: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
c470: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
c480: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
c490: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
c4a0: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
c4b0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
c4c0: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
c4d0: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
c4e0: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
c4f0: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
c500: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
c510: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
c520: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
c530: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
c540: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
c550: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
c560: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
c570: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
c580: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
c590: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
c5a0: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
c5b0: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
c5c0: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
c5d0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
c5e0: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
c5f0: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
c600: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
c610: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
c620: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
c630: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
c640: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
c650: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
c660: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
c670: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
c680: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
c690: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
c6a0: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
c6b0: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
c6c0: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
c6d0: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
c6e0: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
c6f0: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
c700: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
c710: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
c720: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
c730: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
c740: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
c750: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
c760: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
c770: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
c780: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
c790: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
c7a0: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
c7b0: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
c7c0: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
c7d0: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
c7e0: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
c7f0: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
c800: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
c810: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
c820: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
c830: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
c840: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
c850: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
c860: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
c870: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
c880: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
c890: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
c8a0: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
c8b0: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
c8c0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
c8d0: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
c8e0: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
c8f0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
c900: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
c910: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
c920: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c940: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
c950: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
c960: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
c970: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
c980: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
c990: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
c9a0: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
c9b0: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
c9c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
c9d0: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
c9e0: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
c9f0: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
ca00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
ca10: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
ca20: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
ca30: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  ;../*.** Each SQ
ca40: 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  L table is repre
ca50: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
ca60: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
ca70: 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  of the.** follow
ca80: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
ca90: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65  *.** Table.zName
caa0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
cab0: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
cac0: 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67  case of the orig
cad0: 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54  inal.** CREATE T
cae0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
caf0: 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61  s stored, but ca
cb00: 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66  se is not signif
cb10: 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d  icant for.** com
cb20: 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  parisons..**.** 
cb30: 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68  Table.nCol is th
cb40: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
cb50: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
cb60: 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69  e.  Table.aCol i
cb70: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
cb80: 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f  o an array of Co
cb90: 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c  lumn structures,
cba0: 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   one for each co
cbb0: 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lumn..**.** If t
cbc0: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20  he table has an 
cbd0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
cbe0: 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e  KEY, then Table.
cbf0: 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64  iPKey is the ind
cc00: 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c  ex of.** the col
cc10: 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74  umn that is that
cc20: 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73   key.   Otherwis
cc30: 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  e Table.iPKey is
cc40: 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65   negative.  Note
cc50: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
cc60: 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49  atype of the PRI
cc70: 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65  MARY KEY must be
cc80: 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69   INTEGER for thi
cc90: 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65  s field to.** be
cca0: 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45   set.  An INTEGE
ccb0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  R PRIMARY KEY is
ccc0: 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77   used as the row
ccd0: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
cce0: 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e  of.** the table.
ccf0: 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73    If a table has
cd00: 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d   no INTEGER PRIM
cd10: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20  ARY KEY, then a 
cd20: 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20  random rowid.** 
cd30: 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72  is generated for
cd40: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
cd50: 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50   table.  TF_HasP
cd60: 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74  rimaryKey is set
cd70: 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   if.** the table
cd80: 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59   has any PRIMARY
cd90: 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72   KEY, INTEGER or
cda0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a   otherwise..**.*
cdb0: 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20  * Table.tnum is 
cdc0: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
cdd0: 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72  for the root BTr
cde0: 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74  ee page of the t
cdf0: 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64  able in the.** d
ce00: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49  atabase file.  I
ce10: 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74  f Table.iDb is t
ce20: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
ce30: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62  database table b
ce40: 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c  ackend.** in sql
ce50: 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73  ite.aDb[].  0 is
ce60: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
ce70: 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20  tabase and 1 is 
ce80: 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61  for the file tha
ce90: 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f  t.** holds tempo
cea0: 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
ceb0: 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f  indices.  If TF_
cec0: 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74  Ephemeral is set
ced0: 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62  .** then the tab
cee0: 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  le is stored in 
cef0: 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61  a file that is a
cf00: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
cf10: 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65  eted.** when the
cf20: 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20   VDBE cursor to 
cf30: 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  the table is clo
cf40: 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  sed.  In this ca
cf50: 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a  se Table.tnum .*
cf60: 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75  * refers VDBE cu
cf70: 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74  rsor number that
cf80: 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65   holds the table
cf90: 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68   open, not to th
cfa0: 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e  e root.** page n
cfb0: 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e  umber.  Transien
cfc0: 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65  t tables are use
cfd0: 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  d to hold the re
cfe0: 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75  sults of a.** su
cff0: 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70  b-query that app
d000: 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ears instead of 
d010: 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d  a real table nam
d020: 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
d030: 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45  ause .** of a SE
d040: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
d050: 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
d060: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
d070: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
d080: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
d090: 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
d0a0: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
d0b0: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
d0c0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
d0d0: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
d0e0: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
d0f0: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
d100: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
d110: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
d120: 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
d130: 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
d140: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
d150: 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
d160: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
d170: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
d180: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
d190: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
d1a0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
d1b0: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
d1c0: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
d1d0: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
d1e0: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
d1f0: 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  umn */.#ifndef S
d200: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
d210: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
d220: 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
d230: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
d240: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f   */.#endif.  tRo
d250: 77 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20  wcnt nRowEst;   
d260: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
d270: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
d280: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
d290: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
d2a0: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
d2b0: 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e   /* Root BTree n
d2c0: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  ode for this tab
d2d0: 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f  le (see note abo
d2e0: 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ve) */.  i16 iPK
d2f0: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
d300: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
d310: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
d320: 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79  ] as the primary
d330: 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43   key */.  i16 nC
d340: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
d350: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
d360: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
d370: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
d380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d390: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
d3a0: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
d3b0: 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73  */.  u8 tabFlags
d3c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
d3d0: 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
d3e0: 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
d3f0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
d400: 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
d410: 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
d420: 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
d430: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
d440: 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
d450: 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
d460: 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
d470: 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
d480: 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
d490: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
d4a0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
d4b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
d4c0: 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
d4d0: 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
d4e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
d4f0: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
d500: 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
d510: 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
d520: 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64   Text of all mod
d530: 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73  ule args. [0] is
d540: 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a   module name */.
d550: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
d560: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
d570: 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
d580: 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
d590: 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
d5a0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
d5b0: 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
d5c0: 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
d5d0: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
d5e0: 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
d5f0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
d600: 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
d610: 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
d620: 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
d630: 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
d640: 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
d650: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
d660: 20 66 6f 72 20 54 61 62 65 2e 74 61 62 46 6c 61   for Tabe.tabFla
d670: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  gs..*/.#define T
d680: 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
d690: 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
d6a0: 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
d6b0: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
d6c0: 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
d6d0: 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
d6e0: 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
d6f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
d700: 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
d710: 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
d720: 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
d730: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
d740: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
d750: 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
d760: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
d770: 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
d780: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
d790: 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
d7a0: 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
d7b0: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a  tual table */...
d7c0: 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65  /*.** Test to se
d7d0: 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
d7e0: 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69   a table is a vi
d7f0: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
d800: 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73  is is.** done as
d810: 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74   a macro so that
d820: 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69   it will be opti
d830: 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76  mized out when v
d840: 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
d850: 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74  support is omitt
d860: 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  ed from the buil
d870: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
d880: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
d890: 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
d8a0: 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
d8b0: 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
d8c0: 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29  gs & TF_Virtual)
d8d0: 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
d8e0: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
d8f0: 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
d900: 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
d910: 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20  N)!=0).#else.#  
d920: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
d930: 28 58 29 20 20 20 20 20 20 30 0a 23 20 20 64 65  (X)      0.#  de
d940: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
d950: 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  umn(X) 0.#endif.
d960: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
d970: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
d980: 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
d990: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
d9a0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
d9b0: 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
d9c0: 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
d9d0: 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
d9e0: 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
d9f0: 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
da00: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
da10: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
da20: 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
da30: 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
da40: 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
da50: 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
da60: 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
da70: 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
da80: 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
da90: 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
daa0: 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
dab0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
dac0: 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
dad0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
dae0: 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
daf0: 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
db00: 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
db10: 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
db20: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
db30: 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
db40: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
db50: 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
db60: 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
db70: 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
db80: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
db90: 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
dba0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
dbb0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
dbc0: 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
dbd0: 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
dbe0: 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
dbf0: 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
dc00: 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
dc10: 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
dc20: 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
dc30: 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
dc40: 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
dc50: 63 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  cked..*/.struct 
dc60: 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
dc70: 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
dc80: 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
dc90: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
dca0: 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
dcb0: 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
dcc0: 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
dcd0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 20   foreign key in 
dce0: 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
dcf0: 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
dd00: 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
dd10: 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
dd20: 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
dd30: 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
dd40: 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
dd50: 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e  t foreign key on
dd60: 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f   table named zTo
dd70: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
dd80: 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
dd90: 6f 75 73 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ous foreign key 
dda0: 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a  on table named z
ddb0: 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
ddc0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
ddd0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
dde0: 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
ddf0: 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
de00: 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
de10: 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a 20 54  eferred;    /* T
de20: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
de30: 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
de40: 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
de50: 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
de60: 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  on[2];          
de70: 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
de80: 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
de90: 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
dea0: 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
deb0: 70 54 72 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a  pTrigger[2];  /*
dec0: 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
ded0: 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
dee0: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
def0: 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e  Map {  /* Mappin
df00: 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
df10: 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
df20: 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
df30: 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
df40: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
df50: 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
df60: 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
df70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
df80: 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
df90: 2e 20 20 49 66 20 30 20 75 73 65 20 50 52 49 4d  .  If 0 use PRIM
dfa0: 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61  ARY KEY */.  } a
dfb0: 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f  Col[1];        /
dfc0: 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
dfd0: 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
dfe0: 75 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  umn s */.};../*.
dff0: 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
e000: 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
e010: 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
e020: 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
e030: 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
e040: 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
e050: 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
e060: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
e070: 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
e080: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
e090: 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
e0a0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
e0b0: 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
e0c0: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
e0d0: 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
e0e0: 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
e0f0: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
e100: 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
e110: 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
e120: 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
e130: 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
e140: 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
e150: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
e160: 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
e170: 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
e180: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
e190: 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
e1a0: 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
e1b0: 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
e1c0: 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
e1d0: 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
e1e0: 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
e1f0: 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
e200: 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
e210: 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
e220: 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
e230: 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
e240: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
e250: 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
e260: 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
e270: 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
e280: 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
e290: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
e2a0: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
e2b0: 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
e2c0: 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
e2d0: 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
e2e0: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
e2f0: 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
e300: 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
e310: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
e320: 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
e330: 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
e340: 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
e350: 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
e360: 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
e370: 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
e380: 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
e390: 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
e3a0: 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
e3b0: 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
e3c0: 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
e3d0: 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
e3e0: 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
e3f0: 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
e400: 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
e410: 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
e420: 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
e430: 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
e440: 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
e450: 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
e460: 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
e470: 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
e480: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
e490: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
e4a0: 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
e4b0: 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
e4c0: 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
e4d0: 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
e4e0: 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
e4f0: 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
e500: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
e510: 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
e520: 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
e530: 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
e540: 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
e550: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
e560: 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
e570: 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
e580: 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
e590: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
e5a0: 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
e5b0: 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
e5c0: 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
e5d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
e5e0: 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
e5f0: 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
e600: 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
e610: 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
e620: 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
e630: 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
e640: 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
e650: 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
e660: 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
e670: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
e680: 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
e690: 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
e6a0: 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
e6b0: 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
e6c0: 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
e6d0: 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
e6e0: 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
e6f0: 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
e700: 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
e710: 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
e720: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
e730: 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
e740: 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
e750: 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
e760: 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
e770: 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
e780: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
e790: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
e7a0: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
e7b0: 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
e7c0: 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
e7d0: 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
e7e0: 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
e7f0: 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
e800: 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
e810: 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
e820: 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
e830: 66 61 75 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f  fault  99  /* Do
e840: 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
e850: 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
e860: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
e870: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
e880: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
e890: 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
e8a0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
e8b0: 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
e8c0: 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
e8d0: 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
e8e0: 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
e8f0: 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
e900: 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
e910: 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
e920: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
e930: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
e940: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e950: 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ion */.  u8 enc;
e960: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e970: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
e980: 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
e990: 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
e9a0: 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
e9b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
e9c0: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
e9d0: 43 6f 6c 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a  Coll[] */.  u8 *
e9e0: 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
e9f0: 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
ea00: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20  r each column.  
ea10: 4d 61 79 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  May be NULL */. 
ea20: 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
ea30: 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
ea40: 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
ea50: 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
ea60: 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
ea70: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
ea80: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
ea90: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
eaa0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
eab0: 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
eac0: 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
ead0: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
eae0: 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
eaf0: 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
eb00: 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
eb10: 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
eb20: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
eb30: 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
eb40: 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
eb50: 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
eb60: 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
eb70: 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
eb80: 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
eb90: 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
eba0: 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
ebb0: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
ebc0: 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
ebd0: 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
ebe0: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
ebf0: 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
ec00: 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
ec10: 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
ec20: 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
ec30: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
ec40: 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
ec50: 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
ec60: 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
ec70: 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
ec80: 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
ec90: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
eca0: 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
ecb0: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
ecc0: 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
ecd0: 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
ece0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
ecf0: 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
ed00: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ed10: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
ed20: 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67  m[] */.  u8 flag
ed30: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
ed40: 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e 67 73  Boolean settings
ed50: 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20  .  UNPACKED_... 
ed60: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 72  below */.  i64 r
ed70: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 2f  owid;          /
ed80: 2a 20 55 73 65 64 20 62 79 20 55 4e 50 41 43 4b  * Used by UNPACK
ed90: 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48  ED_PREFIX_SEARCH
eda0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
edb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
edc0: 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ues */.};../*.**
edd0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
ede0: 6f 66 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of UnpackedRecor
edf0: 64 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  d.flags.*/.#defi
ee00: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52  ne UNPACKED_INCR
ee10: 4b 45 59 20 20 20 20 20 20 20 30 78 30 31 20 20  KEY       0x01  
ee20: 2f 2a 20 4d 61 6b 65 20 74 68 69 73 20 6b 65 79  /* Make this key
ee30: 20 61 6e 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67   an epsilon larg
ee40: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e  er */.#define UN
ee50: 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41  PACKED_PREFIX_MA
ee60: 54 43 48 20 20 30 78 30 32 20 20 2f 2a 20 41 20  TCH  0x02  /* A 
ee70: 70 72 65 66 69 78 20 6d 61 74 63 68 20 69 73 20  prefix match is 
ee80: 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f  considered OK */
ee90: 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45  .#define UNPACKE
eea0: 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 20  D_PREFIX_SEARCH 
eeb0: 30 78 30 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20  0x04  /* Ignore 
eec0: 66 69 6e 61 6c 20 28 72 6f 77 69 64 29 20 66 69  final (rowid) fi
eed0: 65 6c 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  eld */../*.** Ea
eee0: 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
eef0: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
ef00: 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
ef10: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
ef20: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
ef30: 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
ef40: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
ef50: 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
ef60: 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
ef70: 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
ef80: 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
ef90: 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
efa0: 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
efb0: 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
efc0: 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
efd0: 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
efe0: 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
eff0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
f000: 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
f010: 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
f020: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
f030: 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
f040: 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
f050: 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
f060: 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
f070: 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
f080: 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
f090: 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
f0a0: 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
f0b0: 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
f0c0: 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
f0d0: 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
f0e0: 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
f0f0: 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
f100: 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
f110: 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
f120: 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
f130: 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
f140: 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66  ecause the .** f
f150: 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
f160: 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
f170: 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
f180: 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
f190: 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
f1a0: 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
f1b0: 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
f1c0: 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
f1d0: 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
f1e0: 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
f1f0: 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
f200: 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
f210: 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
f220: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
f230: 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
f240: 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
f250: 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
f260: 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
f270: 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
f280: 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
f290: 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
f2a0: 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
f2b0: 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
f2c0: 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
f2d0: 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
f2e0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
f2f0: 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
f300: 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
f310: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
f320: 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  n .** algorithm 
f330: 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
f340: 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
f350: 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
f360: 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
f370: 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  element..*/.stru
f380: 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
f390: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
f3a0: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e   Name of this in
f3b0: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69  dex */.  int *ai
f3c0: 43 6f 6c 75 6d 6e 3b 20 20 20 2f 2a 20 57 68 69  Column;   /* Whi
f3d0: 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
f3e0: 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
f3f0: 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
f400: 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77    tRowcnt *aiRow
f410: 45 73 74 3b 20 2f 2a 20 52 65 73 75 6c 74 20 6f  Est; /* Result o
f420: 66 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  f ANALYZE: Est. 
f430: 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
f440: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
f450: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
f460: 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
f470: 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
f480: 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
f490: 6c 41 66 66 3b 20 20 20 2f 2a 20 53 74 72 69 6e  lAff;   /* Strin
f4a0: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
f4b0: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
f4c0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
f4d0: 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  x *pNext;    /* 
f4e0: 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
f4f0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f500: 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
f510: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
f520: 6d 61 3b 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f  ma; /* Schema co
f530: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
f540: 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
f550: 72 74 4f 72 64 65 72 3b 20 20 2f 2a 20 41 72 72  rtOrder;  /* Arr
f560: 61 79 20 6f 66 20 73 69 7a 65 20 49 6e 64 65 78  ay of size Index
f570: 2e 6e 43 6f 6c 75 6d 6e 2e 20 54 72 75 65 3d 3d  .nColumn. True==
f580: 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43  DESC, False==ASC
f590: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43   */.  char **azC
f5a0: 6f 6c 6c 3b 20 20 20 2f 2a 20 41 72 72 61 79 20  oll;   /* Array 
f5b0: 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
f5c0: 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
f5d0: 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6e  index */.  int n
f5e0: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
f5f0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f600: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 75 73   in the table us
f610: 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
f620: 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
f630: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
f640: 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
f650: 66 20 74 68 69 73 20 69 6e 64 65 78 20 69 6e 20  f this index in 
f660: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
f670: 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
f680: 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
f690: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
f6a0: 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
f6b0: 6e 65 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 49  ne */.  u8 autoI
f6c0: 6e 64 65 78 3b 20 20 20 20 2f 2a 20 54 72 75 65  ndex;    /* True
f6d0: 20 69 66 20 69 73 20 61 75 74 6f 6d 61 74 69 63   if is automatic
f6e0: 61 6c 6c 79 20 63 72 65 61 74 65 64 20 28 65 78  ally created (ex
f6f0: 3a 20 62 79 20 55 4e 49 51 55 45 29 20 2a 2f 0a  : by UNIQUE) */.
f700: 20 20 75 38 20 62 55 6e 6f 72 64 65 72 65 64 3b    u8 bUnordered;
f710: 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
f720: 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
f730: 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
f740: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
f750: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 20 20 69  ENABLE_STAT3.  i
f760: 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
f770: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f780: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
f790: 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
f7a0: 74 52 6f 77 63 6e 74 20 61 76 67 45 71 3b 20 20  tRowcnt avgEq;  
f7b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72           /* Aver
f7c0: 61 67 65 20 6e 45 71 20 76 61 6c 75 65 20 66 6f  age nEq value fo
f7d0: 72 20 6b 65 79 20 76 61 6c 75 65 73 20 6e 6f 74  r key values not
f7e0: 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20   in aSample */. 
f7f0: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53   IndexSample *aS
f800: 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d  ample;    /* Sam
f810: 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
f820: 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65 6e  -most key */.#en
f830: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61  dif.};../*.** Ea
f840: 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
f850: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
f860: 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65  tat3 table is re
f870: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
f880: 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20  ory .** using a 
f890: 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
f8a0: 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
f8b0: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
f8c0: 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
f8d0: 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
f8e0: 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
f8f0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f900: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
f910: 78 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e 69 6f  xSample {.  unio
f920: 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b  n {.    char *z;
f930: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
f940: 20 69 66 20 65 54 79 70 65 20 69 73 20 53 51 4c   if eType is SQL
f950: 49 54 45 5f 54 45 58 54 20 6f 72 20 53 51 4c 49  ITE_TEXT or SQLI
f960: 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20 20 64  TE_BLOB */.    d
f970: 6f 75 62 6c 65 20 72 3b 20 20 20 20 20 20 20 2f  ouble r;       /
f980: 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65  * Value if eType
f990: 20 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54   is SQLITE_FLOAT
f9a0: 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 3b 20 20   */.    i64 i;  
f9b0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
f9c0: 20 69 66 20 65 54 79 70 65 20 69 73 20 53 51 4c   if eType is SQL
f9d0: 49 54 45 5f 49 4e 54 45 47 45 52 20 2a 2f 0a 20  ITE_INTEGER */. 
f9e0: 20 7d 20 75 3b 0a 20 20 75 38 20 65 54 79 70 65   } u;.  u8 eType
f9f0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ;         /* SQL
fa00: 49 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49 54 45  ITE_NULL, SQLITE
fa10: 5f 49 4e 54 45 47 45 52 20 2e 2e 2e 20 65 74 63  _INTEGER ... etc
fa20: 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  . */.  int nByte
fa30: 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  ;        /* Size
fa40: 20 69 6e 20 62 79 74 65 20 6f 66 20 74 65 78 74   in byte of text
fa50: 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a 20 20 74   or blob. */.  t
fa60: 52 6f 77 63 6e 74 20 6e 45 71 3b 20 20 20 20 20  Rowcnt nEq;     
fa70: 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
fa80: 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
fa90: 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
faa0: 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
fab0: 6f 77 63 6e 74 20 6e 4c 74 3b 20 20 20 20 20 20  owcnt nLt;      
fac0: 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
fad0: 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
fae0: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
faf0: 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
fb00: 52 6f 77 63 6e 74 20 6e 44 4c 74 3b 20 20 20 20  Rowcnt nDLt;    
fb10: 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
fb20: 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
fb30: 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
fb40: 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
fb50: 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
fb60: 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
fb70: 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
fb80: 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
fb90: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
fba0: 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
fbb0: 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
fbc0: 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
fbd0: 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
fbe0: 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
fbf0: 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
fc00: 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
fc10: 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
fc20: 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
fc30: 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
fc40: 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
fc50: 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
fc60: 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
fc70: 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
fc80: 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
fc90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
fca0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
fcb0: 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
fcc0: 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
fcd0: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
fce0: 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
fcf0: 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
fd00: 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
fd10: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
fd20: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
fd30: 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
fd40: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
fd50: 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
fd60: 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
fd70: 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
fd80: 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
fd90: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
fda0: 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
fdb0: 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
fdc0: 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
fdd0: 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
fde0: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
fdf0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
fe00: 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
fe10: 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
fe20: 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
fe30: 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
fe40: 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
fe50: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
fe60: 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
fe70: 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
fe80: 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
fe90: 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
fea0: 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
feb0: 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
fec0: 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
fed0: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
fee0: 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
fef0: 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
ff00: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
ff10: 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
ff20: 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
ff30: 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
ff40: 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
ff50: 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
ff60: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
ff70: 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
ff80: 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
ff90: 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
ffa0: 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
ffb0: 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
ffc0: 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffe0: 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
fff0: 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
10000 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
10010 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
10020 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
10030 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
10040 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
10050 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
10060 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
10090 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
100a0 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
100b0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
100c0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
100d0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
100e0 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
100f0 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
10100 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
10110 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
10120 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
10130 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
10140 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
10150 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
10160 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  x */.  ExprList 
10170 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
10180 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
10190 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
101a0 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
101b0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
101c0 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
101d0 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
101e0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
101f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
10200 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10210 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
10220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
10230 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
10240 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
10250 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
10260 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
10270 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
10280 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
10290 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
102a0 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
102b0 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
102c0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
102d0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
102e0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
10310 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
10320 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
10330 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
10340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
10350 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
10360 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
10370 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
10380 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
10390 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
103a0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
103b0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
103c0 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
103d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
103e0 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
103f0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
10400 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
10430 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
10440 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
10450 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
10460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
10470 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
10480 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
10490 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
104a0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
104b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
104c0 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
104d0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
104e0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
104f0 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
10500 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
10510 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
10520 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
10530 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
10540 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
10550 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10570 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
10580 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
10590 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
105a0 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
105b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
105c0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
105d0 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
105e0 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
105f0 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
10600 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
10610 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
10620 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
10630 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
10640 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
10650 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
10660 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
10670 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
10680 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
10690 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
106a0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
106b0 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
106c0 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
106d0 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
106e0 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
106f0 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
10700 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
10710 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
10720 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
10730 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
10740 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
10750 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
10760 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
10770 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
10780 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
10790 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
107a0 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
107b0 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
107c0 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
107d0 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
107e0 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
107f0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
10800 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
10810 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
10820 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
10830 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
10840 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
10850 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
10860 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
10870 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
10880 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
10890 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
108a0 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
108b0 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
108c0 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
108d0 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
108e0 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
108f0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
10900 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
10910 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
10920 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
10930 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
10940 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
10950 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
10960 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
10970 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
10980 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
10990 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
109a0 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
109b0 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
109c0 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
109d0 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
109e0 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
109f0 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
10a00 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
10a10 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
10a20 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
10a30 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
10a40 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
10a50 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
10a60 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
10a70 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
10a80 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e   .** or TK_STRIN
10a90 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  G), then Expr.to
10aa0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
10ab0 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   text of the SQL
10ac0 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20   literal. If.** 
10ad0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
10ae0 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b  s a variable (TK
10af0 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e  _VARIABLE), then
10b00 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
10b10 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72  ains the .** var
10b20 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
10b30 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
10b40 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
10b50 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
10b60 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
10b70 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
10b80 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
10b90 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
10ba0 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
10bb0 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
10bc0 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
10bd0 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
10be0 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
10bf0 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
10c00 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
10c10 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
10c20 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
10c30 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
10c40 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
10c50 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
10c60 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
10c70 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
10c80 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
10c90 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
10ca0 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
10cb0 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
10cc0 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
10cd0 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
10ce0 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
10cf0 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
10d00 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
10d10 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
10d20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
10d30 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
10d40 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
10d50 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
10d60 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
10d70 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
10d80 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
10d90 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
10da0 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  s .** valid..**.
10db0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
10dc0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
10dd0 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
10de0 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
10df0 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
10e00 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
10e10 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
10e20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
10e30 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
10e40 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
10e50 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
10e60 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
10e70 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
10e80 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
10e90 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
10ea0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
10eb0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
10ec0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
10ed0 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
10ee0 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
10ef0 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
10f00 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
10f10 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
10f20 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
10f30 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
10f40 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
10f50 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
10f60 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
10f70 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
10f80 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
10f90 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
10fa0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
10fb0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
10fc0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
10fd0 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63  stion mark .** c
10fe0 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
10ff0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
11000 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
11010 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
11020 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65   index .** numbe
11030 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61  r for that varia
11040 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ble..**.** If th
11050 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
11060 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20  a subquery then 
11070 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c  Expr.iColumn hol
11080 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ds an integer.**
11090 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
110a0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
110b0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
110c0 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a  bquery.  If the.
110d0 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65  ** subquery give
110e0 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73  s a constant res
110f0 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65  ult, then iTable
11100 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20   is -1.  If the 
11110 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65  subquery.** give
11120 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e  s a different an
11130 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e  swer at differen
11140 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73  t times during s
11150 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73  tatement process
11160 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62  ing.** then iTab
11170 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73  le is the addres
11180 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e  s of a subroutin
11190 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  e that computes 
111a0 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a  the subquery..**
111b0 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20  .** If the Expr 
111c0 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f  is of type OP_Co
111d0 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61  lumn, and the ta
111e0 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74  ble it is select
111f0 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61  ing from.** is a
11200 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74   disk table or t
11210 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64  he "old.*" pseud
11220 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54  o-table, then pT
11230 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ab points to the
11240 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
11250 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  g table definiti
11260 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41  on..**.** ALLOCA
11270 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a  TION NOTES:.**.*
11280 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63  * Expr objects c
11290 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20  an use a lot of 
112a0 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20  memory space in 
112b0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
112c0 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64    To.** help red
112d0 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  uce memory requi
112e0 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d  rements, sometim
112f0 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  es an Expr objec
11300 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75  t will be.** tru
11310 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20  ncated.  And to 
11320 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
11330 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  r of memory allo
11340 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d  cations, sometim
11350 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72  es.** two or mor
11360 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77  e Expr objects w
11370 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e  ill be stored in
11380 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79   a single memory
11390 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20   allocation,.** 
113a0 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78  together with Ex
113b0 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67  pr.zToken string
113c0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
113d0 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45  EP_Reduced and E
113e0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
113f0 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a  s are set when.*
11400 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  * an Expr object
11410 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20   is truncated.  
11420 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20  When EP_Reduced 
11430 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  is set, then all
11440 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78  .** the child Ex
11450 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68  pr objects in th
11460 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64  e Expr.pLeft and
11470 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62   Expr.pRight sub
11480 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  trees.** are con
11490 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
114a0 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c  e same memory al
114b0 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c  location.  Note,
114c0 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a   however, that.*
114d0 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69  * the subtrees i
114e0 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f  n Expr.x.pList o
114f0 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  r Expr.x.pSelect
11500 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61   are always sepa
11510 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  rately.** alloca
11520 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ted, regardless 
11530 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
11540 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  t EP_Reduced is 
11550 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  set..*/.struct E
11560 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11580 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
11590 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
115a0 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
115b0 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
115c0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
115d0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
115e0 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
115f0 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
11600 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11610 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
11620 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
11630 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
11640 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
11650 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
11660 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
11670 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
11680 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
11690 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
116a0 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
116b0 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
116c0 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
116d0 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
116e0 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
116f0 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
11700 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
11710 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
11720 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
11730 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
11740 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
11750 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
11760 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
11770 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
11780 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
11790 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
117a0 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  . .  ***********
117b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
117f0 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
11800 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
11810 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
11820 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
11830 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
11840 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
11850 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
11860 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75 6e 63  ist;     /* Func
11870 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 6f  tion arguments o
11880 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49 4e 20  r in "<expr> IN 
11890 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20 2a 2f  (<expr-list)" */
118a0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
118b0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55 73 65  lect;     /* Use
118c0 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65 63 74  d for sub-select
118d0 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20 49 4e  s and "<expr> IN
118e0 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a 2f 0a   (<select>)" */.
118f0 20 20 7d 20 78 3b 0a 20 20 43 6f 6c 6c 53 65 71    } x;.  CollSeq
11900 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20   *pColl;        
11910 2f 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  /* The collation
11920 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c   type of the col
11930 75 6d 6e 20 6f 72 20 30 20 2a 2f 0a 0a 20 20 2f  umn or 0 */..  /
11940 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
11950 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
11960 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
11970 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
11980 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
11990 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
119a0 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
119b0 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
119c0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
119d0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
119e0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
119f0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
11a00 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
11a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
11a50 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
11a60 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
11a70 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
11a80 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
11a90 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
11aa0 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
11ab0 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
11ac0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
11ad0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
11ae0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
11af0 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
11b00 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
11b10 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
11b20 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
11b30 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
11b60 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
11b70 3e 20 6f 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72  > old */.  ynVar
11b80 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
11b90 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
11ba0 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
11bb0 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bd0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
11be0 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
11bf0 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
11c00 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41   1). */.  i16 iA
11c10 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
11c20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
11c30 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
11c40 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
11c50 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
11c60 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
11c70 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
11c80 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
11c90 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
11ca0 20 75 38 20 66 6c 61 67 73 32 3b 20 20 20 20 20   u8 flags2;     
11cb0 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e          /* Secon
11cc0 64 20 73 65 74 20 6f 66 20 66 6c 61 67 73 2e 20  d set of flags. 
11cd0 20 45 50 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38   EP2_... */.  u8
11ce0 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
11cf0 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
11d00 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
11d10 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d30 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
11d40 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
11d50 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
11d60 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
11d80 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
11d90 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
11da0 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
11db0 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
11dc0 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
11dd0 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
11de0 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
11df0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
11e00 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
11e10 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
11e20 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  ssions. */.};../
11e30 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
11e40 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
11e50 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
11e60 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  he Expr.flags fi
11e70 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
11e80 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78  EP_FromJoin   0x
11e90 30 30 30 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61  0001  /* Origina
11ea0 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49  ted in ON or USI
11eb0 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
11ec0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
11ed0 50 5f 41 67 67 20 20 20 20 20 20 20 20 30 78 30  P_Agg        0x0
11ee0 30 30 32 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  002  /* Contains
11ef0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
11f00 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
11f10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
11f20 65 73 6f 6c 76 65 64 20 20 20 30 78 30 30 30 34  esolved   0x0004
11f30 20 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65    /* IDs have be
11f40 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43  en resolved to C
11f50 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e  OLUMNs */.#defin
11f60 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 20  e EP_Error      
11f70 30 78 30 30 30 38 20 20 2f 2a 20 45 78 70 72 65  0x0008  /* Expre
11f80 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f  ssion contains o
11f90 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72  ne or more error
11fa0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
11fb0 44 69 73 74 69 6e 63 74 20 20 20 30 78 30 30 31  Distinct   0x001
11fc0 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
11fd0 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
11fe0 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
11ff0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
12000 53 65 6c 65 63 74 20 20 30 78 30 30 32 30 20 20  Select  0x0020  
12010 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
12020 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
12030 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
12040 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 20  e EP_DblQuoted  
12050 30 78 30 30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e  0x0040  /* token
12060 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
12070 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
12080 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
12090 6e 63 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54  nc  0x0080  /* T
120a0 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
120b0 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
120c0 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
120d0 65 66 69 6e 65 20 45 50 5f 45 78 70 43 6f 6c 6c  efine EP_ExpColl
120e0 61 74 65 20 30 78 30 31 30 30 20 20 2f 2a 20 43  ate 0x0100  /* C
120f0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
12100 65 20 73 70 65 63 69 66 69 65 64 20 65 78 70 6c  e specified expl
12110 69 63 69 74 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  icitly */.#defin
12120 65 20 45 50 5f 46 69 78 65 64 44 65 73 74 20 20  e EP_FixedDest  
12130 30 78 30 32 30 30 20 20 2f 2a 20 52 65 73 75 6c  0x0200  /* Resul
12140 74 20 6e 65 65 64 65 64 20 69 6e 20 61 20 73 70  t needed in a sp
12150 65 63 69 66 69 63 20 72 65 67 69 73 74 65 72 20  ecific register 
12160 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
12170 74 56 61 6c 75 65 20 20 20 30 78 30 34 30 30 20  tValue   0x0400 
12180 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
12190 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75  e contained in u
121a0 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69  .iValue */.#defi
121b0 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  ne EP_xIsSelect 
121c0 20 30 78 30 38 30 30 20 20 2f 2a 20 78 2e 70 53   0x0800  /* x.pS
121d0 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28  elect is valid (
121e0 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73  otherwise x.pLis
121f0 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65  t is) */.#define
12200 20 45 50 5f 48 69 6e 74 20 20 20 20 20 20 20 30   EP_Hint       0
12210 78 31 30 30 30 20 20 2f 2a 20 4e 6f 74 20 75 73  x1000  /* Not us
12220 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ed */.#define EP
12230 5f 52 65 64 75 63 65 64 20 20 20 20 30 78 32 30  _Reduced    0x20
12240 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74 72 75  00  /* Expr stru
12250 63 74 20 69 73 20 45 58 50 52 5f 52 45 44 55 43  ct is EXPR_REDUC
12260 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
12270 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
12280 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 34 30 30  TokenOnly  0x400
12290 30 20 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  0  /* Expr struc
122a0 74 20 69 73 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  t is EXPR_TOKENO
122b0 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  NLYSIZE bytes on
122c0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
122d0 5f 53 74 61 74 69 63 20 20 20 20 20 30 78 38 30  _Static     0x80
122e0 30 30 20 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d  00  /* Held in m
122f0 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e  emory not obtain
12300 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
12310 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
12320 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
12330 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
12340 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
12350 61 67 73 32 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  ags2 field..*/.#
12360 64 65 66 69 6e 65 20 45 50 32 5f 4d 61 6c 6c 6f  define EP2_Mallo
12370 63 65 64 54 6f 6b 65 6e 20 20 30 78 30 30 30 31  cedToken  0x0001
12380 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c    /* Need to sql
12390 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70  ite3DbFree() Exp
123a0 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66  r.zToken */.#def
123b0 69 6e 65 20 45 50 32 5f 49 72 72 65 64 75 63 69  ine EP2_Irreduci
123c0 62 6c 65 20 20 20 20 30 78 30 30 30 32 20 20 2f  ble    0x0002  /
123d0 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50  * Cannot EXPRDUP
123e0 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70  _REDUCE this Exp
123f0 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  r */../*.** The 
12400 70 73 65 75 64 6f 2d 72 6f 75 74 69 6e 65 20 73  pseudo-routine s
12410 71 6c 69 74 65 33 45 78 70 72 53 65 74 49 72 72  qlite3ExprSetIrr
12420 65 64 75 63 69 62 6c 65 20 73 65 74 73 20 74 68  educible sets th
12430 65 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c  e EP2_Irreducibl
12440 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 61 6e 20  e.** flag on an 
12450 65 78 70 72 65 73 73 69 6f 6e 20 73 74 72 75 63  expression struc
12460 74 75 72 65 2e 20 20 54 68 69 73 20 66 6c 61 67  ture.  This flag
12470 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 56 26   is used for VV&
12480 41 20 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a 2a 20  A only.  The.** 
12490 72 6f 75 74 69 6e 65 20 69 73 20 69 6d 70 6c 65  routine is imple
124a0 6d 65 6e 74 65 64 20 61 73 20 61 20 6d 61 63 72  mented as a macr
124b0 6f 20 74 68 61 74 20 6f 6e 6c 79 20 77 6f 72 6b  o that only work
124c0 73 20 77 68 65 6e 20 69 6e 20 64 65 62 75 67 67  s when in debugg
124d0 69 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73 6f 20  ing mode,.** so 
124e0 61 73 20 6e 6f 74 20 74 6f 20 62 75 72 64 65 6e  as not to burden
124f0 20 70 72 6f 64 75 63 74 69 6f 6e 20 63 6f 64 65   production code
12500 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
12510 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e  TE_DEBUG.# defin
12520 65 20 45 78 70 72 53 65 74 49 72 72 65 64 75 63  e ExprSetIrreduc
12530 69 62 6c 65 28 58 29 20 20 28 58 29 2d 3e 66 6c  ible(X)  (X)->fl
12540 61 67 73 32 20 7c 3d 20 45 50 32 5f 49 72 72 65  ags2 |= EP2_Irre
12550 64 75 63 69 62 6c 65 0a 23 65 6c 73 65 0a 23 20  ducible.#else.# 
12560 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 49 72  define ExprSetIr
12570 72 65 64 75 63 69 62 6c 65 28 58 29 0a 23 65 6e  reducible(X).#en
12580 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
12590 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
125a0 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
125b0 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
125c0 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e  in the .** Expr.
125d0 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
125e0 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
125f0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
12600 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
12610 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
12620 20 45 78 70 72 48 61 73 41 6e 79 50 72 6f 70 65   ExprHasAnyPrope
12630 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
12640 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
12650 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
12660 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
12670 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
12680 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
12690 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
126a0 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
126b0 50 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  P)../*.** Macros
126c0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
126d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
126e0 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20  s required by a 
126f0 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20  normal Expr .** 
12700 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20  struct, an Expr 
12710 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
12720 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
12730 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67  set in Expr.flag
12740 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  s .** and an Exp
12750 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
12760 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
12770 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
12780 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
12790 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
127a0 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
127b0 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
127c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
127d0 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
127e0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
127f0 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
12800 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
12810 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
12820 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
12830 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
12840 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
12850 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
12860 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
12870 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
12880 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
12890 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
128a0 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f   comment .** abo
128b0 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
128c0 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
128d0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
128e0 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
128f0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
12900 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
12910 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
12920 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
12930 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
12940 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
12950 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
12960 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
12970 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
12980 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
12990 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
129a0 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
129b0 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
129c0 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
129d0 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
129e0 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
129f0 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
12a00 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
12a10 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
12a20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
12a30 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
12a40 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
12a50 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
12a60 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
12a70 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
12a80 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
12a90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
12aa0 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78  List {.  int nEx
12ab0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
12ac0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70  /* Number of exp
12ad0 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20  ressions on the 
12ae0 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69 45  list */.  int iE
12af0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20  Cursor;         
12b00 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72 20   /* VDBE Cursor 
12b10 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12b20 74 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a 2f  this ExprList */
12b30 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
12b40 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72  st_item { /* For
12b50 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
12b60 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
12b70 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
12b80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12b90 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
12ba0 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
12bb0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
12bc0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73      /* Token ass
12bd0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
12be0 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
12bf0 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b      char *zSpan;
12c00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
12c10 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
12c20 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
12c30 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
12c40 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  r;          /* 1
12c50 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
12c60 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 38  or ASC */.    u8
12c70 20 64 6f 6e 65 3b 20 20 20 20 20 20 20 20 20 20   done;          
12c80 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74       /* A flag t
12c90 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20  o indicate when 
12ca0 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69  processing is fi
12cb0 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 31  nished */.    u1
12cc0 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20  6 iOrderByCol;  
12cd0 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
12ce0 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
12cf0 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
12d00 74 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 41 6c  t */.    u16 iAl
12d10 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
12d20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
12d30 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
12d40 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
12d50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
12d60 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f     /* Alloc a po
12d70 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74  wer of two great
12d80 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e  er or equal to n
12d90 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  Expr */.};../*.*
12da0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
12db0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
12dc0 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  is used by the p
12dd0 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20  arser to record 
12de0 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  both.** the pars
12df0 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78  e tree for an ex
12e00 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
12e10 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74   span of input t
12e20 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  ext for an.** ex
12e30 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  pression..*/.str
12e40 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20  uct ExprSpan {. 
12e50 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
12e60 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78         /* The ex
12e70 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74  pression parse t
12e80 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ree */.  const c
12e90 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f  har *zStart;   /
12ea0 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65  * First characte
12eb0 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  r of input text 
12ec0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
12ed0 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e  *zEnd;     /* On
12ee0 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74  e character past
12ef0 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
12f00 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  t text */.};../*
12f10 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
12f20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
12f30 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d  e can hold a sim
12f40 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e  ple list of iden
12f50 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68  tifiers,.** such
12f60 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c   as the list "a,
12f70 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c  b,c" in the foll
12f80 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73  owing statements
12f90 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53  :.**.**      INS
12fa0 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
12fb0 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a  ) VALUES ...;.**
12fc0 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
12fd0 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c  EX idx ON t(a,b,
12fe0 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  c);.**      CREA
12ff0 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20  TE TRIGGER trig 
13000 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e  BEFORE UPDATE ON
13010 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a   t(a,b,c) ...;.*
13020 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e  *.** The IdList.
13030 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75  a.idx field is u
13040 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c  sed when the IdL
13050 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  ist represents t
13060 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f  he list of.** co
13070 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72  lumn names after
13080 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e   a table name in
13090 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
130a0 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74  ment.  In the st
130b0 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20  atement.**.**   
130c0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
130d0 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a  a,b,c) ....**.**
130e0 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b   If "a" is the k
130f0 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61  -th column of ta
13100 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64  ble "t", then Id
13110 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b  List.a[0].idx==k
13120 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69  ..*/.struct IdLi
13130 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64  st {.  struct Id
13140 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
13150 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
13160 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
13170 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20   identifier */. 
13180 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20     int idx;     
13190 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
131a0 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c   some Table.aCol
131b0 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  [] of a column n
131c0 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  amed zName */.  
131d0 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b  } *a;.  int nId;
131e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
131f0 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  er of identifier
13200 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
13210 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62  .};../*.** The b
13220 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20  itmask datatype 
13230 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73  defined below is
13240 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75   used for variou
13250 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
13260 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
13270 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62  this from a 64-b
13280 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74  it to a 32-bit t
13290 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e  ype limits the n
132a0 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c  umber of.** tabl
132b0 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20  es in a join to 
132c0 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34  32 instead of 64
132d0 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72  .  But it also r
132e0 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a  educes the size.
132f0 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  ** of the librar
13300 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f  y by 738 bytes o
13310 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64  n ix86..*/.typed
13320 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
13330 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
13340 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42  r of bits in a B
13350 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d  itmask.  "BMS" m
13360 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69  eans "BitMask Si
13370 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ze"..*/.#define 
13380 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65  BMS  ((int)(size
13390 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a  of(Bitmask)*8)).
133a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
133b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
133c0 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
133d0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
133e0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
133f0 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
13400 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
13410 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
13420 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
13430 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
13440 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
13450 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
13460 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
13470 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
13480 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
13490 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
134a0 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
134b0 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
134c0 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
134d0 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
134e0 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
134f0 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
13500 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
13510 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
13520 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
13530 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
13540 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
13550 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
13560 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
13570 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
13580 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
13590 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
135a0 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
135b0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
135c0 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
135d0 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
135e0 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
135f0 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
13600 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
13610 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
13620 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
13630 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
13640 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
13650 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
13660 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
13670 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
13680 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
13690 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
136a0 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
136b0 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
136c0 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
136d0 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
136e0 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
136f0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
13700 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
13710 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
13720 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
13730 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
13740 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
13750 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
13760 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
13770 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
13780 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
13790 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
137a0 69 31 36 20 6e 53 72 63 3b 20 20 20 20 20 20 20  i16 nSrc;       
137b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
137c0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
137d0 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
137e0 6c 61 75 73 65 20 2a 2f 0a 20 20 69 31 36 20 6e  lause */.  i16 n
137f0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
13800 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
13810 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
13820 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
13830 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
13840 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
13850 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
13860 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
13870 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
13880 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
13890 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
138a0 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
138b0 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
138c0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
138d0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
138e0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
138f0 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
13900 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
13910 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
13920 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
13930 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
13940 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
13950 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
13960 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
13970 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
13980 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
13990 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
139a0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
139b0 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
139c0 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
139d0 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
139e0 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
139f0 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
13a00 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
13a10 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
13a20 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
13a30 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
13a40 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
13a50 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
13a60 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70  /.    u8 jointyp
13a70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
13a80 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
13a90 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68  this able and th
13aa0 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
13ab0 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e    unsigned notIn
13ac0 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20  dexed :1;    /* 
13ad0 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
13ae0 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63   a NOT INDEXED c
13af0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73  lause */.    uns
13b00 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
13b10 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
13b20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
13b30 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
13b40 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
13b50 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
13b60 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
13b70 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 23   co-routine */.#
13b80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
13b90 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75  IT_EXPLAIN.    u
13ba0 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  8 iSelectId;    
13bb0 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d   /* If pSelect!=
13bc0 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65  0, the id of the
13bd0 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45   sub-select in E
13be0 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20  QP */.#endif.   
13bf0 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
13c00 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
13c10 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
13c20 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
13c30 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
13c40 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
13c50 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
13c60 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
13c70 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
13c80 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
13c90 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
13ca0 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
13cb0 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
13cc0 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
13cd0 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
13ce0 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
13cf0 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20    char *zIndex; 
13d00 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65      /* Identifie
13d10 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20  r from "INDEXED 
13d20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61  BY <zIndex>" cla
13d30 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78  use */.    Index
13d40 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20   *pIndex;    /* 
13d50 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
13d60 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
13d70 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20   zIndex, if any 
13d80 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  */.  } a[1];    
13d90 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
13da0 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69  entry for each i
13db0 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65  dentifier on the
13dc0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
13dd0 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c  ** Permitted val
13de0 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69  ues of the SrcLi
13df0 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69  st.a.jointype fi
13e00 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  eld.*/.#define J
13e10 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30  T_INNER     0x00
13e20 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e  01    /* Any kin
13e30 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72  d of inner or cr
13e40 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  oss join */.#def
13e50 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20  ine JT_CROSS    
13e60 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78   0x0002    /* Ex
13e70 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68  plicit use of th
13e80 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20  e CROSS keyword 
13e90 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41  */.#define JT_NA
13ea0 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20  TURAL   0x0004  
13eb0 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20    /* True for a 
13ec0 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a  "natural" join *
13ed0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46  /.#define JT_LEF
13ee0 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20  T      0x0008   
13ef0 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a   /* Left outer j
13f00 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
13f10 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30  T_RIGHT     0x00
13f20 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  10    /* Right o
13f30 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
13f40 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20  fine JT_OUTER   
13f50 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54    0x0020    /* T
13f60 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f  he "OUTER" keywo
13f70 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f  rd is present */
13f80 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f  .#define JT_ERRO
13f90 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20  R     0x0040    
13fa0 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e  /* unknown or un
13fb0 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74  supported join t
13fc0 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41  ype */.../*.** A
13fd0 20 57 68 65 72 65 50 6c 61 6e 20 6f 62 6a 65 63   WherePlan objec
13fe0 74 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  t holds informat
13ff0 69 6f 6e 20 74 68 61 74 20 64 65 73 63 72 69 62  ion that describ
14000 65 73 20 61 20 6c 6f 6f 6b 75 70 0a 2a 2a 20 73  es a lookup.** s
14010 74 72 61 74 65 67 79 2e 0a 2a 2a 0a 2a 2a 20 54  trategy..**.** T
14020 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 69 6e  his object is in
14030 74 65 6e 64 65 64 20 74 6f 20 62 65 20 6f 70 61  tended to be opa
14040 71 75 65 20 6f 75 74 73 69 64 65 20 6f 66 20 74  que outside of t
14050 68 65 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c  he where.c modul
14060 65 2e 0a 2a 2a 20 49 74 20 69 73 20 69 6e 63 6c  e..** It is incl
14070 75 64 65 64 20 68 65 72 65 20 6f 6e 6c 79 20 73  uded here only s
14080 6f 20 74 68 61 74 20 74 68 61 74 20 63 6f 6d 70  o that that comp
14090 69 6c 65 72 20 77 69 6c 6c 20 6b 6e 6f 77 20 68  iler will know h
140a0 6f 77 20 62 69 67 20 69 74 0a 2a 2a 20 69 73 2e  ow big it.** is.
140b0 20 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20 66 69    None of the fi
140c0 65 6c 64 73 20 69 6e 20 74 68 69 73 20 6f 62 6a  elds in this obj
140d0 65 63 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  ect should be us
140e0 65 64 20 6f 75 74 73 69 64 65 20 6f 66 0a 2a 2a  ed outside of.**
140f0 20 74 68 65 20 77 68 65 72 65 2e 63 20 6d 6f 64   the where.c mod
14100 75 6c 65 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 69  ule..**.** Withi
14110 6e 20 74 68 65 20 75 6e 69 6f 6e 2c 20 70 49 64  n the union, pId
14120 78 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  x is only used w
14130 68 65 6e 20 77 73 46 6c 61 67 73 26 57 48 45 52  hen wsFlags&WHER
14140 45 5f 49 4e 44 45 58 45 44 20 69 73 20 74 72 75  E_INDEXED is tru
14150 65 2e 0a 2a 2a 20 70 54 65 72 6d 20 69 73 20 6f  e..** pTerm is o
14160 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73  nly used when ws
14170 46 6c 61 67 73 26 57 48 45 52 45 5f 4d 55 4c 54  Flags&WHERE_MULT
14180 49 5f 4f 52 20 69 73 20 74 72 75 65 2e 20 20 41  I_OR is true.  A
14190 6e 64 20 70 56 74 61 62 49 64 78 0a 2a 2a 20 69  nd pVtabIdx.** i
141a0 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
141b0 20 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 56   wsFlags&WHERE_V
141c0 49 52 54 55 41 4c 54 41 42 4c 45 20 69 73 20 74  IRTUALTABLE is t
141d0 72 75 65 2e 20 20 49 74 20 69 73 20 6e 65 76 65  rue.  It is neve
141e0 72 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 74 68  r the.** case th
141f0 61 74 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  at more than one
14200 20 6f 66 20 74 68 65 73 65 20 63 6f 6e 64 69 74   of these condit
14210 69 6f 6e 73 20 69 73 20 74 72 75 65 2e 0a 2a 2f  ions is true..*/
14220 0a 73 74 72 75 63 74 20 57 68 65 72 65 50 6c 61  .struct WherePla
14230 6e 20 7b 0a 20 20 75 33 32 20 77 73 46 6c 61 67  n {.  u32 wsFlag
14240 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
14250 20 20 20 20 20 2f 2a 20 57 48 45 52 45 5f 2a 20       /* WHERE_* 
14260 66 6c 61 67 73 20 74 68 61 74 20 64 65 73 63 72  flags that descr
14270 69 62 65 20 74 68 65 20 73 74 72 61 74 65 67 79  ibe the strategy
14280 20 2a 2f 0a 20 20 75 31 36 20 6e 45 71 3b 20 20   */.  u16 nEq;  
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
142b0 66 20 3d 3d 20 63 6f 6e 73 74 72 61 69 6e 74 73  f == constraints
142c0 20 2a 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74   */.  u16 nOBSat
142d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
142e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
142f0 66 20 4f 52 44 45 52 20 42 59 20 74 65 72 6d 73  f ORDER BY terms
14300 20 73 61 74 69 73 66 69 65 64 20 2a 2f 0a 20 20   satisfied */.  
14310 64 6f 75 62 6c 65 20 6e 52 6f 77 3b 20 20 20 20  double nRow;    
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14330 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
14340 65 72 20 6f 66 20 72 6f 77 73 20 28 66 6f 72 20  er of rows (for 
14350 45 51 50 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  EQP) */.  union 
14360 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
14370 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
14380 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 77 68       /* Index wh
14390 65 6e 20 57 48 45 52 45 5f 49 4e 44 45 58 45 44  en WHERE_INDEXED
143a0 20 69 73 20 74 72 75 65 20 2a 2f 0a 20 20 20 20   is true */.    
143b0 73 74 72 75 63 74 20 57 68 65 72 65 54 65 72 6d  struct WhereTerm
143c0 20 2a 70 54 65 72 6d 3b 20 20 20 20 20 20 20 2f   *pTerm;       /
143d0 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74  * WHERE clause t
143e0 65 72 6d 20 66 6f 72 20 4f 52 2d 73 65 61 72 63  erm for OR-searc
143f0 68 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  h */.    sqlite3
14400 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 56 74  _index_info *pVt
14410 61 62 49 64 78 3b 20 20 2f 2a 20 56 69 72 74 75  abIdx;  /* Virtu
14420 61 6c 20 74 61 62 6c 65 20 69 6e 64 65 78 20 74  al table index t
14430 6f 20 75 73 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  o use */.  } u;.
14440 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61  };../*.** For ea
14450 63 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69  ch nested loop i
14460 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  n a WHERE clause
14470 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
14480 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a   the WhereInfo.*
14490 2a 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * structure cont
144a0 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e  ains a single in
144b0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
144c0 74 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20  tructure.  This 
144d0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
144e0 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70  intended to be p
144f0 72 69 76 61 74 65 20 74 6f 20 74 68 65 20 77 68  rivate to the wh
14500 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64  ere.c module and
14510 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
14520 2a 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64 69  * access or modi
14530 66 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f  fied by other mo
14540 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  dules..**.** The
14550 20 70 49 64 78 49 6e 66 6f 20 66 69 65 6c 64 20   pIdxInfo field 
14560 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
14570 70 69 63 6b 20 74 68 65 20 62 65 73 74 20 69 6e  pick the best in
14580 64 65 78 20 6f 6e 20 61 0a 2a 2a 20 76 69 72 74  dex on a.** virt
14590 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ual table.  The 
145a0 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72  pIdxInfo pointer
145b0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78 69   contains indexi
145c0 6e 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  ng.** informatio
145d0 6e 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74  n for the i-th t
145e0 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  able in the FROM
145f0 20 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20 72   clause before r
14600 65 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c  eordering..** Al
14610 6c 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70  l the pIdxInfo p
14620 6f 69 6e 74 65 72 73 20 61 72 65 20 66 72 65 65  ointers are free
14630 64 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46 72  d by whereInfoFr
14640 65 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63 2e  ee() in where.c.
14650 0a 2a 2a 20 41 6c 6c 20 6f 74 68 65 72 20 69 6e  .** All other in
14660 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65  formation in the
14670 20 69 2d 74 68 20 57 68 65 72 65 4c 65 76 65 6c   i-th WhereLevel
14680 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
14690 69 2d 74 68 20 74 61 62 6c 65 0a 2a 2a 20 61 66  i-th table.** af
146a0 74 65 72 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  ter FROM clause 
146b0 6f 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72  ordering..*/.str
146c0 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 7b  uct WhereLevel {
146d0 0a 20 20 57 68 65 72 65 50 6c 61 6e 20 70 6c 61  .  WherePlan pla
146e0 6e 3b 20 20 20 20 20 20 20 2f 2a 20 71 75 65 72  n;       /* quer
146f0 79 20 70 6c 61 6e 20 66 6f 72 20 74 68 69 73 20  y plan for this 
14700 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 46  element of the F
14710 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
14720 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e 3b 20 20  int iLeftJoin;  
14730 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
14740 63 65 6c 6c 20 75 73 65 64 20 74 6f 20 69 6d 70  cell used to imp
14750 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f 55 54 45  lement LEFT OUTE
14760 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74 20  R JOIN */.  int 
14770 69 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20  iTabCur;        
14780 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
14790 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63 63  rsor used to acc
147a0 65 73 73 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ess the table */
147b0 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b 20  .  int iIdxCur; 
147c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
147d0 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65 64  VDBE cursor used
147e0 20 74 6f 20 61 63 63 65 73 73 20 70 49 64 78 20   to access pIdx 
147f0 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 42 72 6b  */.  int addrBrk
14800 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75  ;          /* Ju
14810 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b  mp here to break
14820 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70   out of the loop
14830 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4e 78   */.  int addrNx
14840 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a  t;          /* J
14850 75 6d 70 20 68 65 72 65 20 74 6f 20 73 74 61 72  ump here to star
14860 74 20 74 68 65 20 6e 65 78 74 20 49 4e 20 63 6f  t the next IN co
14870 6d 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69  mbination */.  i
14880 6e 74 20 61 64 64 72 43 6f 6e 74 3b 20 20 20 20  nt addrCont;    
14890 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
148a0 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69  e to continue wi
148b0 74 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70  th the next loop
148c0 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   cycle */.  int 
148d0 61 64 64 72 46 69 72 73 74 3b 20 20 20 20 20 20  addrFirst;      
148e0 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 73 74 72    /* First instr
148f0 75 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69  uction of interi
14900 6f 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  or of the loop *
14910 2f 0a 20 20 75 38 20 69 46 72 6f 6d 3b 20 20 20  /.  u8 iFrom;   
14920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
14930 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  ch entry in the 
14940 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
14950 20 75 38 20 6f 70 2c 20 70 35 3b 20 20 20 20 20   u8 op, p5;     
14960 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
14970 20 61 6e 64 20 50 35 20 6f 66 20 74 68 65 20 6f   and P5 of the o
14980 70 63 6f 64 65 20 74 68 61 74 20 65 6e 64 73 20  pcode that ends 
14990 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e  the loop */.  in
149a0 74 20 70 31 2c 20 70 32 3b 20 20 20 20 20 20 20  t p1, p2;       
149b0 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20      /* Operands 
149c0 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 75 73  of the opcode us
149d0 65 64 20 74 6f 20 65 6e 64 73 20 74 68 65 20 6c  ed to ends the l
149e0 6f 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  oop */.  union {
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14a00 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  * Information th
14a10 61 74 20 64 65 70 65 6e 64 73 20 6f 6e 20 70 6c  at depends on pl
14a20 61 6e 2e 77 73 46 6c 61 67 73 20 2a 2f 0a 20 20  an.wsFlags */.  
14a30 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
14a40 20 69 6e 74 20 6e 49 6e 3b 20 20 20 20 20 20 20   int nIn;       
14a50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
14a60 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
14a70 49 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20  InLoop[] */.    
14a80 20 20 73 74 72 75 63 74 20 49 6e 4c 6f 6f 70 20    struct InLoop 
14a90 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 43  {.        int iC
14aa0 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
14ab0 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
14ac0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 69 73  sor used by this
14ad0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a   IN operator */.
14ae0 20 20 20 20 20 20 20 20 69 6e 74 20 61 64 64 72          int addr
14af0 49 6e 54 6f 70 3b 20 20 20 20 20 20 20 20 20 2f  InTop;         /
14b00 2a 20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e 20  * Top of the IN 
14b10 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 20 20 7d 20  loop */.      } 
14b20 2a 61 49 6e 4c 6f 6f 70 3b 20 20 20 20 20 20 20  *aInLoop;       
14b30 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
14b40 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65  on about each ne
14b50 73 74 65 64 20 49 4e 20 6f 70 65 72 61 74 6f 72  sted IN operator
14b60 20 2a 2f 0a 20 20 20 20 7d 20 69 6e 3b 20 20 20   */.    } in;   
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14b80 20 55 73 65 64 20 77 68 65 6e 20 70 6c 61 6e 2e   Used when plan.
14b90 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e  wsFlags&WHERE_IN
14ba0 5f 41 42 4c 45 20 2a 2f 0a 20 20 20 20 49 6e 64  _ABLE */.    Ind
14bb0 65 78 20 2a 70 43 6f 76 69 64 78 3b 20 20 20 20  ex *pCovidx;    
14bc0 20 20 20 2f 2a 20 50 6f 73 73 69 62 6c 65 20 63     /* Possible c
14bd0 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 66 6f  overing index fo
14be0 72 20 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52  r WHERE_MULTI_OR
14bf0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 64 6f 75   */.  } u;.  dou
14c00 62 6c 65 20 72 4f 70 74 43 6f 73 74 3b 20 20 20  ble rOptCost;   
14c10 20 20 20 2f 2a 20 22 4f 70 74 69 6d 61 6c 22 20     /* "Optimal" 
14c20 63 6f 73 74 20 66 6f 72 20 74 68 69 73 20 6c 65  cost for this le
14c30 76 65 6c 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65  vel */..  /* The
14c40 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64   following field
14c50 20 69 73 20 72 65 61 6c 6c 79 20 6e 6f 74 20 70   is really not p
14c60 61 72 74 20 6f 66 20 74 68 65 20 63 75 72 72 65  art of the curre
14c70 6e 74 20 6c 65 76 65 6c 2e 20 20 42 75 74 0a 20  nt level.  But. 
14c80 20 2a 2a 20 77 65 20 6e 65 65 64 20 61 20 70 6c   ** we need a pl
14c90 61 63 65 20 74 6f 20 63 61 63 68 65 20 76 69 72  ace to cache vir
14ca0 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 64 65 78  tual table index
14cb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
14cc0 20 65 61 63 68 0a 20 20 2a 2a 20 76 69 72 74 75   each.  ** virtu
14cd0 61 6c 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  al table in the 
14ce0 46 52 4f 4d 20 63 6c 61 75 73 65 20 61 6e 64 20  FROM clause and 
14cf0 74 68 65 20 57 68 65 72 65 4c 65 76 65 6c 20 73  the WhereLevel s
14d00 74 72 75 63 74 75 72 65 20 69 73 0a 20 20 2a 2a  tructure is.  **
14d10 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
14d20 61 63 65 20 73 69 6e 63 65 20 74 68 65 72 65 20  ace since there 
14d30 69 73 20 6f 6e 65 20 57 68 65 72 65 4c 65 76 65  is one WhereLeve
14d40 6c 20 66 6f 72 20 65 61 63 68 20 46 52 4f 4d 20  l for each FROM 
14d50 63 6c 61 75 73 65 0a 20 20 2a 2a 20 65 6c 65 6d  clause.  ** elem
14d60 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  ent..  */.  sqli
14d70 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a  te3_index_info *
14d80 70 49 64 78 49 6e 66 6f 3b 20 20 2f 2a 20 49 6e  pIdxInfo;  /* In
14d90 64 65 78 20 69 6e 66 6f 20 66 6f 72 20 6e 2d 74  dex info for n-t
14da0 68 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  h source table *
14db0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  /.};../*.** Flag
14dc0 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f  s appropriate fo
14dd0 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73  r the wctrlFlags
14de0 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
14df0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
14e00 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65  ).** and the Whe
14e10 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67  reInfo.wctrlFlag
14e20 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65  s member..*/.#de
14e30 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
14e40 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
14e50 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
14e60 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
14e70 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
14e80 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
14e90 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
14ea0 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
14eb0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
14ec0 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
14ed0 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
14ee0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
14ef0 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
14f00 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
14f10 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
14f20 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
14f30 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
14f40 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
14f50 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
14f60 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38  TES_OK    0x0008
14f70 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
14f80 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
14f90 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
14fa0 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e   WHERE_OMIT_OPEN
14fb0 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f  _CLOSE  0x0010 /
14fc0 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20  * Table cursors 
14fd0 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e  are already open
14fe0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14ff0 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20  E_FORCE_TABLE   
15000 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20     0x0020 /* Do 
15010 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78  not use an index
15020 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a  -only search */.
15030 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
15040 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30  ETABLE_ONLY    0
15050 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f  x0040 /* Only co
15060 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65  de the 1st table
15070 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a   in pTabList */.
15080 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 41 4e  #define WHERE_AN
15090 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20 20 20 30  D_ONLY         0
150a0 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75  x0080 /* Don't u
150b0 73 65 20 69 6e 64 69 63 65 73 20 66 6f 72 20 4f  se indices for O
150c0 52 20 74 65 72 6d 73 20 2a 2f 0a 0a 2f 2a 0a 2a  R terms */../*.*
150d0 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
150e0 73 65 20 70 72 6f 63 65 73 73 69 6e 67 20 72 6f  se processing ro
150f0 75 74 69 6e 65 20 68 61 73 20 74 77 6f 20 68 61  utine has two ha
15100 6c 76 65 73 2e 20 20 54 68 65 0a 2a 2a 20 66 69  lves.  The.** fi
15110 72 73 74 20 70 61 72 74 20 64 6f 65 73 20 74 68  rst part does th
15120 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 57  e start of the W
15130 48 45 52 45 20 6c 6f 6f 70 20 61 6e 64 20 74 68  HERE loop and th
15140 65 20 73 65 63 6f 6e 64 0a 2a 2a 20 68 61 6c 66  e second.** half
15150 20 64 6f 65 73 20 74 68 65 20 74 61 69 6c 20 6f   does the tail o
15160 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70  f the WHERE loop
15170 2e 20 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  .  An instance o
15180 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
15190 75 72 65 20 69 73 20 72 65 74 75 72 6e 65 64 20  ure is returned 
151a0 62 79 20 74 68 65 20 66 69 72 73 74 20 68 61 6c  by the first hal
151b0 66 20 61 6e 64 20 70 61 73 73 65 64 0a 2a 2a 20  f and passed.** 
151c0 69 6e 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 20  into the second 
151d0 68 61 6c 66 20 74 6f 20 67 69 76 65 20 73 6f 6d  half to give som
151e0 65 20 63 6f 6e 74 69 6e 75 69 74 79 2e 0a 2a 2f  e continuity..*/
151f0 0a 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66  .struct WhereInf
15200 6f 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  o {.  Parse *pPa
15210 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
15220 2f 2a 20 50 61 72 73 69 6e 67 20 61 6e 64 20 63  /* Parsing and c
15230 6f 64 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63  ode generating c
15240 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 53 72 63 4c  ontext */.  SrcL
15250 69 73 74 20 2a 70 54 61 62 4c 69 73 74 3b 20 20  ist *pTabList;  
15260 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
15270 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6a   tables in the j
15280 6f 69 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 4f 42  oin */.  u16 nOB
15290 53 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Sat;            
152a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
152b0 4f 52 44 45 52 20 42 59 20 74 65 72 6d 73 20 73  ORDER BY terms s
152c0 61 74 69 73 66 69 65 64 20 62 79 20 69 6e 64 69  atisfied by indi
152d0 63 65 73 20 2a 2f 0a 20 20 75 31 36 20 77 63 74  ces */.  u16 wct
152e0 72 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  rlFlags;        
152f0 20 20 20 2f 2a 20 46 6c 61 67 73 20 6f 72 69 67     /* Flags orig
15300 69 6e 61 6c 6c 79 20 70 61 73 73 65 64 20 74 6f  inally passed to
15310 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
15320 69 6e 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 4f  in() */.  u8 okO
15330 6e 65 50 61 73 73 3b 20 20 20 20 20 20 20 20 20  nePass;         
15340 20 20 20 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65      /* Ok to use
15350 20 6f 6e 65 2d 70 61 73 73 20 61 6c 67 6f 72 69   one-pass algori
15360 74 68 6d 20 66 6f 72 20 55 50 44 41 54 45 2f 44  thm for UPDATE/D
15370 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 75 6e  ELETE */.  u8 un
15380 74 65 73 74 65 64 54 65 72 6d 73 3b 20 20 20 20  testedTerms;    
15390 20 20 20 20 20 2f 2a 20 4e 6f 74 20 61 6c 6c 20       /* Not all 
153a0 57 48 45 52 45 20 74 65 72 6d 73 20 72 65 73 6f  WHERE terms reso
153b0 6c 76 65 64 20 62 79 20 6f 75 74 65 72 20 6c 6f  lved by outer lo
153c0 6f 70 20 2a 2f 0a 20 20 75 38 20 65 44 69 73 74  op */.  u8 eDist
153d0 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  inct;           
153e0 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
153f0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 2a  WHERE_DISTINCT_*
15400 20 76 61 6c 75 65 73 20 62 65 6c 6f 77 20 2a 2f   values below */
15410 0a 20 20 69 6e 74 20 69 54 6f 70 3b 20 20 20 20  .  int iTop;    
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15430 54 68 65 20 76 65 72 79 20 62 65 67 69 6e 6e 69  The very beginni
15440 6e 67 20 6f 66 20 74 68 65 20 57 48 45 52 45 20  ng of the WHERE 
15450 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 69 43  loop */.  int iC
15460 6f 6e 74 69 6e 75 65 3b 20 20 20 20 20 20 20 20  ontinue;        
15470 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65      /* Jump here
15480 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69 74   to continue wit
15490 68 20 6e 65 78 74 20 72 65 63 6f 72 64 20 2a 2f  h next record */
154a0 0a 20 20 69 6e 74 20 69 42 72 65 61 6b 3b 20 20  .  int iBreak;  
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
154c0 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65  Jump here to bre
154d0 61 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f  ak out of the lo
154e0 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 65 76  op */.  int nLev
154f0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
15500 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
15510 65 73 74 65 64 20 6c 6f 6f 70 20 2a 2f 0a 20 20  ested loop */.  
15520 73 74 72 75 63 74 20 57 68 65 72 65 43 6c 61 75  struct WhereClau
15530 73 65 20 2a 70 57 43 3b 20 20 2f 2a 20 44 65 63  se *pWC;  /* Dec
15540 6f 6d 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68  omposition of th
15550 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
15560 2f 0a 20 20 64 6f 75 62 6c 65 20 73 61 76 65 64  /.  double saved
15570 4e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a  NQueryLoop;   /*
15580 20 70 50 61 72 73 65 2d 3e 6e 51 75 65 72 79 4c   pParse->nQueryL
15590 6f 6f 70 20 6f 75 74 73 69 64 65 20 74 68 65 20  oop outside the 
155a0 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20  WHERE loop */.  
155b0 64 6f 75 62 6c 65 20 6e 52 6f 77 4f 75 74 3b 20  double nRowOut; 
155c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74            /* Est
155d0 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
155e0 20 6f 75 74 70 75 74 20 72 6f 77 73 20 2a 2f 0a   output rows */.
155f0 20 20 57 68 65 72 65 4c 65 76 65 6c 20 61 5b 31    WhereLevel a[1
15600 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ];          /* I
15610 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
15620 20 65 61 63 68 20 6e 65 73 74 20 6c 6f 6f 70 20   each nest loop 
15630 69 6e 20 57 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a  in WHERE */.};..
15640 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
15650 73 20 66 6f 72 20 57 68 65 72 65 49 6e 66 6f 2e  s for WhereInfo.
15660 65 44 69 73 74 69 6e 63 74 20 61 6e 64 20 44 69  eDistinct and Di
15670 73 74 69 6e 63 74 43 74 78 2e 65 54 6e 63 74 54  stinctCtx.eTnctT
15680 79 70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ype */.#define W
15690 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
156a0 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
156b0 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
156c0 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
156d0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
156e0 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
156f0 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
15700 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15710 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
15720 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
15730 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
15740 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
15750 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
15760 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
15770 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
15780 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
15790 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
157a0 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
157b0 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
157c0 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
157d0 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
157e0 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
157f0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
15800 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
15810 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
15820 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
15830 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
15840 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
15850 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
15860 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
15870 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
15880 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
15890 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
158a0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
158b0 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
158c0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
158d0 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
158e0 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
158f0 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
15900 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
15910 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
15920 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
15930 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
15940 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
15950 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
15960 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
15970 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
15980 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
15990 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78  -most .** contex
159a0 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
159b0 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
159c0 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
159d0 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
159e0 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
159f0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
15a00 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
15a10 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
15a20 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
15a30 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
15a40 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
15a50 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
15a60 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
15a70 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
15a80 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
15a90 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
15aa0 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
15ab0 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
15ac0 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
15ad0 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
15ae0 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  . .**.** Each su
15af0 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
15b00 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
15b10 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
15b20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
15b30 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
15b40 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
15b50 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
15b60 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
15b70 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
15b80 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
15b90 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
15ba0 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
15bb0 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
15bc0 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
15bd0 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
15be0 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
15bf0 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
15c00 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
15c10 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
15c20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
15c30 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
15c40 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
15c50 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
15c60 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
15c70 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
15c80 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
15c90 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
15ca0 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  s */.  AggInfo *
15cb0 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
15cc0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
15cd0 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
15ce0 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e  his level */.  N
15cf0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
15d00 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
15d10 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
15d20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
15d30 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  ost */.  int nRe
15d40 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  f;            /*
15d50 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73   Number of names
15d60 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69   resolved by thi
15d70 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69  s context */.  i
15d80 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
15d90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15da0 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65   errors encounte
15db0 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76  red while resolv
15dc0 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75  ing names */.  u
15dd0 38 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  8 ncFlags;      
15de0 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d      /* Zero or m
15df0 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64  ore NC_* flags d
15e00 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a  efined below */.
15e10 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
15e20 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
15e30 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63   NameContext, nc
15e40 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  Flags field..*/.
15e50 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
15e60 41 67 67 20 20 30 78 30 31 20 20 20 20 2f 2a 20  Agg  0x01    /* 
15e70 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
15e80 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
15e90 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
15ea0 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
15eb0 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  2    /* One or m
15ec0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
15ed0 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
15ee0 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65  #define NC_IsChe
15ef0 63 6b 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20  ck   0x04    /* 
15f00 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
15f10 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45  g names in a CHE
15f20 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  CK constraint */
15f30 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67  .#define NC_InAg
15f40 67 46 75 6e 63 20 30 78 30 38 20 20 20 20 2f 2a  gFunc 0x08    /*
15f50 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69   True if analyzi
15f60 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  ng arguments to 
15f70 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 0a  an agg func */..
15f80 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
15f90 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
15fa0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
15fb0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
15fc0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
15fd0 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
15fe0 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
15ff0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
16000 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
16010 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
16020 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
16030 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
16040 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
16050 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
16060 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
16070 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
16080 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
16090 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
160a0 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
160b0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
160c0 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
160d0 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
160e0 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
160f0 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
16100 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
16110 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
16120 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
16130 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
16140 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
16150 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
16160 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
16170 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
16180 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
16190 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
161a0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
161b0 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
161c0 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
161d0 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
161e0 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
161f0 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
16200 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
16210 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
16220 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
16230 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
16240 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16250 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
16260 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
16270 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
16280 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
16290 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
162a0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
162b0 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
162c0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
162d0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
162e0 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
162f0 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
16300 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
16310 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
16320 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
16330 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
16340 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
16350 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
16360 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
16370 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
16380 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
16390 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
163a0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
163b0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
163c0 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
163d0 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
163e0 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
163f0 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
16400 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
16410 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
16420 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
16430 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
16440 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
16450 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
16460 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
16470 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
16480 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
16490 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
164a0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
164b0 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
164c0 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74  ounters */.  int
164d0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d   addrOpenEphm[3]
164e0 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
164f0 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
16500 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
16510 63 74 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e  ct */.  double n
16520 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f  SelectRow;     /
16530 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
16540 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
16550 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  s */.  SrcList *
16560 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
16570 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
16580 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
16590 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
165a0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
165b0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
165c0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
165d0 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
165e0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
165f0 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
16600 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
16610 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
16620 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
16630 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
16640 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
16650 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
16660 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
16670 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
16680 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
16690 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
166a0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
166b0 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
166c0 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
166d0 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c  ompound */.  Sel
166e0 65 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b  ect *pRightmost;
166f0 20 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73      /* Right-mos
16700 74 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  t select in a co
16710 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
16720 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70  atement */.  Exp
16730 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
16740 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
16750 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
16760 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
16770 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
16780 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
16790 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
167a0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
167b0 73 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  sed. */.};../*.*
167c0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
167d0 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
167e0 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
167f0 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
16800 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
16810 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  g"..*/.#define S
16820 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
16830 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74    0x0001  /* Out
16840 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
16850 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
16860 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
16870 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20       0x0002  /* 
16880 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
16890 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
168a0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
168b0 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30  regate       0x0
168c0 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  004  /* Contains
168d0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
168e0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
168f0 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
16900 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73     0x0008  /* Us
16910 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
16920 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
16930 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
16940 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30  ed        0x0010
16950 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
16960 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
16970 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
16980 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
16990 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20  nfo     0x0020  
169a0 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
169b0 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
169c0 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
169d0 65 20 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20  e SF_UseSorter  
169e0 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20       0x0040  /* 
169f0 53 6f 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72  Sort using a sor
16a00 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ter */.#define S
16a10 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
16a20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e    0x0080  /* Syn
16a30 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
16a40 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23  LUES clause */.#
16a50 64 65 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69  define SF_Materi
16a60 61 6c 69 7a 65 20 20 20 20 20 30 78 30 31 30 30  alize     0x0100
16a70 20 20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72    /* Force mater
16a80 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69  ialization of vi
16a90 65 77 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  ews */.../*.** T
16aa0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
16ab0 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20 64 69  select can be di
16ac0 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76  stributed in sev
16ad0 65 72 61 6c 20 77 61 79 73 2e 20 20 54 68 65 0a  eral ways.  The.
16ae0 2a 2a 20 22 53 52 54 22 20 70 72 65 66 69 78 20  ** "SRT" prefix 
16af0 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
16b00 73 75 6c 74 20 54 79 70 65 22 2e 0a 2a 2f 0a 23  sult Type"..*/.#
16b10 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
16b20 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
16b30 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
16b40 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
16b50 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
16b60 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
16b70 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
16b80 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
16b90 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
16ba0 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
16bb0 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
16bc0 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
16bd0 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
16be0 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
16bf0 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
16c00 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
16c10 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a   anywhere */../*
16c20 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
16c30 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20  ause is ignored 
16c40 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  for all of the a
16c50 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
16c60 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79  IgnorableOrderby
16c70 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c  (X) ((X->eDest)<
16c80 3d 53 52 54 5f 44 69 73 63 61 72 64 29 0a 0a 23  =SRT_Discard)..#
16c90 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
16ca0 74 20 20 20 20 20 20 20 35 20 20 2f 2a 20 4f 75  t       5  /* Ou
16cb0 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
16cc0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
16cd0 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
16ce0 20 20 20 20 36 20 20 2f 2a 20 53 74 6f 72 65 20      6  /* Store 
16cf0 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
16d00 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
16d10 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
16d20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
16d30 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
16d40 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
16d50 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
16d60 20 20 20 20 20 20 20 20 38 20 20 2f 2a 20 53 74          8  /* St
16d70 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
16d80 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
16d90 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
16da0 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
16db0 61 62 20 20 20 20 20 39 20 20 2f 2a 20 43 72 65  ab     9  /* Cre
16dc0 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
16dd0 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
16de0 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
16df0 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
16e00 69 6e 65 20 20 20 31 30 20 20 2f 2a 20 47 65 6e  ine   10  /* Gen
16e10 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
16e20 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
16e30 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
16e40 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
16e50 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
16e60 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
16e70 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
16e80 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16e90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
16ea0 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
16eb0 65 73 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  est;         /* 
16ec0 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
16ed0 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
16ee0 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
16ef0 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  e. */.  char aff
16f00 53 64 73 74 3b 20 20 20 20 20 2f 2a 20 41 66 66  Sdst;     /* Aff
16f10 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
16f20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
16f30 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
16f40 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
16f50 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
16f60 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
16f70 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
16f80 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  iSdst;        /*
16f90 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
16fa0 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
16fb0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
16fc0 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
16fd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
16fe0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
16ff0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
17000 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
17010 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
17020 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
17030 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
17040 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73  EMENT .** tables
17050 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
17060 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
17070 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
17080 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
17090 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
170a0 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
170b0 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
170c0 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
170d0 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
170e0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
170f0 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
17100 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
17110 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
17120 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
17130 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
17140 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69  s are down withi
17150 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
17160 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
17170 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
17180 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
17190 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
171a0 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
171b0 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
171c0 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
171d0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
171e0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
171f0 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
17200 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
17210 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
17220 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
17230 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
17240 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
17250 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
17260 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
17270 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
17280 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
172a0 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
172b0 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
172c0 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
172d0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
172e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
172f0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
17300 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
17310 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
17320 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
17330 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
17340 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
17350 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
17360 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
17370 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
17380 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
17390 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
173a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
173b0 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
173c0 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20  ed for each .** 
173d0 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
173e0 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
173f0 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
17400 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
17410 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
17420 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
17430 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
17440 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
17450 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
17460 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
17470 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
17480 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
17490 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
174a0 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
174b0 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
174c0 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
174d0 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
174e0 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
174f0 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
17500 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
17510 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
17520 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
17530 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
17540 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
17550 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
17560 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
17570 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
17580 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
17590 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
175a0 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
175b0 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
175c0 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
175d0 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
175e0 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
175f0 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
17600 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
17610 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
17620 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
17630 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
17640 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
17650 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
17660 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
17670 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a  ult of INSERT .*
17680 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
17690 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
176a0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
176b0 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
176c0 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
176d0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
176e0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
176f0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
17700 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
17710 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
17720 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
17730 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
17740 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
17750 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
17760 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
17770 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
17780 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
17790 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
177a0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
177b0 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
177c0 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
177d0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
177e0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
177f0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
17800 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
17810 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
17820 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
17830 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
17840 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
17850 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
17860 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
17870 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
17880 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
17890 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
178a0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
178b0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
178c0 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
178d0 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
178e0 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20  yDbMask;.#else. 
178f0 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
17900 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
17910 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
17920 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65  SQL parser conte
17930 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74  xt.  A copy of t
17940 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
17950 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
17960 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  ** the parser an
17970 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20  d down into all 
17980 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f  the parser actio
17990 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  n routine in ord
179a0 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61  er to.** carry a
179b0 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f  round informatio
179c0 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c  n that is global
179d0 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70   to the entire p
179e0 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  arse..**.** The 
179f0 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76  structure is div
17a00 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61  ided into two pa
17a10 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70  rts.  When the p
17a20 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a  arser and code.*
17a30 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20  * generate call 
17a40 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72  themselves recur
17a50 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73  sively, the firs
17a60 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74  t part of the st
17a70 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f  ructure.** is co
17a80 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73  nstant but the s
17a90 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65  econd part is re
17aa0 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e  set at the begin
17ab0 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a  ning and end of.
17ac0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
17ad0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61  n..**.** The nTa
17ae0 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62  bleLock and aTab
17af0 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73  leLock variables
17b00 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69   are only used i
17b10 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  f the shared-cac
17b20 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  he .** feature i
17b30 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71  s enabled (if sq
17b40 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53  lite3Tsd()->useS
17b50 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75  haredData is tru
17b60 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20  e). They are.** 
17b70 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
17b80 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c  e set of table-l
17b90 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79  ocks required by
17ba0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
17bb0 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64  eing.** compiled
17bc0 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  . Function sqlit
17bd0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73  e3TableLock() is
17be0 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74   used to add ent
17bf0 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  ries to the.** l
17c00 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ist..*/.struct P
17c10 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  arse {.  sqlite3
17c20 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
17c30 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   The main databa
17c40 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
17c50 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
17c60 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72         /* An err
17c70 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
17c80 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
17c90 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e       /* An engin
17ca0 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20  e for executing 
17cb0 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64  database bytecod
17cc0 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  e */.  int rc;  
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
17ce0 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
17cf0 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75  execution */.  u
17d00 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20  8 colNamesSet;  
17d10 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65      /* TRUE afte
17d20 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20  r OP_ColumnName 
17d30 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20  has been issued 
17d40 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38  to pVdbe */.  u8
17d50 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20   checkSchema;   
17d60 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68     /* Causes sch
17d70 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b  ema cookie check
17d80 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
17d90 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20  */.  u8 nested; 
17da0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17db0 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
17dc0 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65  lls to the parse
17dd0 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  r/code generator
17de0 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65   */.  u8 nTempRe
17df0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  g;         /* Nu
17e00 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
17e10 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61  y registers in a
17e20 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75  TempReg[] */.  u
17e30 38 20 6e 54 65 6d 70 49 6e 55 73 65 3b 20 20 20  8 nTempInUse;   
17e40 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17e50 20 61 54 65 6d 70 52 65 67 5b 5d 20 63 75 72 72   aTempReg[] curr
17e60 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75  ently checked ou
17e70 74 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61  t */.  u8 nColCa
17e80 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  che;        /* N
17e90 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
17ea0 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20   in aColCache[] 
17eb0 2a 2f 0a 20 20 75 38 20 69 43 6f 6c 43 61 63 68  */.  u8 iColCach
17ec0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  e;        /* Nex
17ed0 74 20 65 6e 74 72 79 20 69 6e 20 61 43 6f 6c 43  t entry in aColC
17ee0 61 63 68 65 5b 5d 20 74 6f 20 72 65 70 6c 61 63  ache[] to replac
17ef0 65 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  e */.  u8 isMult
17f00 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
17f10 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
17f20 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
17f30 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
17f40 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
17f50 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
17f60 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
17f70 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
17f80 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
17f90 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
17fa0 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  ];     /* Holdin
17fb0 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
17fc0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
17fd0 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
17fe0 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
17ff0 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
18000 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
18010 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
18020 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
18030 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
18040 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
18050 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
18060 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
18070 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18080 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
18090 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
180a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
180b0 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
180c0 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
180d0 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
180e0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
180f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
18100 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
18110 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53   far */.  int nS
18120 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  et;            /
18130 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73  * Number of sets
18140 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
18150 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20    int nOnce;    
18160 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18170 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74   of OP_Once inst
18180 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20  ructions so far 
18190 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b  */.  int ckBase;
181a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
181b0 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64 61  e register of da
181c0 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20  ta during check 
181d0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
181e0 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c   int iCacheLevel
181f0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68  ;     /* ColCach
18200 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f  e valid when aCo
18210 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c  lCache[].iLevel<
18220 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a  =iCacheLevel */.
18230 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b    int iCacheCnt;
18240 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
18250 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  r used to genera
18260 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c  te aColCache[].l
18270 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 73  ru values */.  s
18280 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
18290 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
182a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
182b0 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
182c0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
182d0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
182e0 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
182f0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
18300 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
18310 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
18320 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
18330 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
18340 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
18350 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
18360 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
18370 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
18380 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
18390 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
183a0 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
183b0 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
183c0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
183e0 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
183f0 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
18400 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
18410 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
18420 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
18430 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
18440 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
18450 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
18460 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
18470 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
18480 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
18490 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
184a0 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
184b0 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
184c0 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
184d0 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
184e0 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
184f0 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20 20 20 20  cookieGoto;     
18500 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
18510 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b 69 65  P_Goto to cookie
18520 20 76 65 72 69 66 69 65 72 20 73 75 62 72 6f 75   verifier subrou
18530 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  tine */.  int co
18540 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45  okieValue[SQLITE
18550 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d  _MAX_ATTACHED+2]
18560 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20  ;  /* Values of 
18570 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66  cookies to verif
18580 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
18590 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
185a0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
185b0 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
185c0 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
185d0 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
185e0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
185f0 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
18600 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
18610 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
18620 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
18630 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
18640 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
18650 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
18660 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 54 6f 6b  program */.  Tok
18670 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d  en constraintNam
18680 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  e;/* Name of the
18690 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72   constraint curr
186a0 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73  ently being pars
186b0 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
186c0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
186d0 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61  _CACHE.  int nTa
186e0 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  bleLock;        
186f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63  /* Number of loc
18700 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b  ks in aTableLock
18710 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20   */.  TableLock 
18720 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20  *aTableLock; /* 
18730 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c  Required table l
18740 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d  ocks for shared-
18750 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65  cache mode */.#e
18760 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e  ndif.  AutoincIn
18770 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49  fo *pAinc;  /* I
18780 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
18790 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63   AUTOINCREMENT c
187a0 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  ounters */..  /*
187b0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
187c0 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74  d while coding t
187d0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
187e0 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
187f0 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
18800 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
18810 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
18820 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
18830 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
18840 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
18850 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
18860 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 64 6f  oded for */.  do
18870 75 62 6c 65 20 6e 51 75 65 72 79 4c 6f 6f 70 3b  uble nQueryLoop;
18880 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
18890 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
188a0 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
188b0 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
188c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
188d0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
188e0 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
188f0 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
18900 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
18910 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
18920 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
18930 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
18940 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
18950 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
18960 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
18970 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
18980 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
18990 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
189a0 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
189b0 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
189c0 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
189d0 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
189e0 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
189f0 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   /* Above is con
18a00 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
18a10 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
18a20 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
18a30 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
18a40 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20 2a  each recursion *
18a50 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20  /..  int nVar;  
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18a70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
18a80 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
18a90 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
18aa0 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b   */.  int nzVar;
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ac0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61  /* Number of ava
18ad0 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20  ilable slots in 
18ae0 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20  azVar[] */.  u8 
18af0 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
18b00 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
18b10 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
18b20 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
18b30 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
18b40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18b50 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
18b60 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
18b70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
18b80 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
18b90 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
18ba0 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
18bb0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
18bc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
18bd0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
18be0 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
18bf0 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
18c00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18c10 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
18c20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
18c30 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69  ns */.  int nHei
18c40 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
18c50 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
18c60 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
18c70 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
18c80 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
18c90 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
18ca0 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
18cb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18cc0 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
18cd0 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
18ce0 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
18cf0 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
18d00 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
18d10 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
18d20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
18d30 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
18d40 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20    char **azVar; 
18d50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
18d60 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73  ointers to names
18d70 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a   of parameters *
18d80 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
18d90 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
18da0 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
18db0 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
18dc0 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 69  repare()) */.  i
18dd0 6e 74 20 2a 61 41 6c 69 61 73 3b 20 20 20 20 20  nt *aAlias;     
18de0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
18df0 73 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c  ster used to hol
18e00 64 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74  d aliased result
18e10 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
18e20 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
18e30 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
18e40 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
18e50 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
18e60 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
18e70 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
18e80 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
18e90 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
18ea0 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
18eb0 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
18ec0 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
18ed0 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
18ee0 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
18ef0 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
18f00 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
18f10 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
18f20 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
18f30 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
18f40 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  cks */.  Token s
18f50 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20  NameToken;      
18f60 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
18f70 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
18f80 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
18f90 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  */.  Token sLast
18fa0 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
18fb0 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
18fc0 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64   parsed */.#ifnd
18fd0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
18fe0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
18ff0 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
19000 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
19010 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
19020 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
19030 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
19040 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
19050 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
19060 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
19070 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
19080 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
19090 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
190a0 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
190b0 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
190c0 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
190d0 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
190e0 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
190f0 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
19100 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
19110 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52  s */.};../*.** R
19120 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
19130 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
19140 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
19150 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
19160 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
19170 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
19180 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
19190 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
191a0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
191b0 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
191c0 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
191d0 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
191e0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
191f0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
19200 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
19210 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
19220 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
19230 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
19240 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
19250 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
19260 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
19270 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
19280 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
19290 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
192a0 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
192b0 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
192c0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
192d0 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
192e0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
192f0 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
19300 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
19310 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
19320 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
19330 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
19340 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  codes..**.** Not
19350 65 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65  e that the value
19360 73 20 66 6f 72 20 49 53 4e 4f 4f 50 20 61 6e 64  s for ISNOOP and
19370 20 4c 45 4e 47 54 48 41 52 47 20 61 72 65 20 74   LENGTHARG are t
19380 68 65 20 73 61 6d 65 2e 20 20 42 75 74 20 61 73  he same.  But as
19390 20 0a 2a 2a 20 74 68 6f 73 65 20 62 69 74 73 20   .** those bits 
193a0 61 72 65 20 6e 65 76 65 72 20 75 73 65 64 20 6f  are never used o
193b0 6e 20 74 68 65 20 73 61 6d 65 20 6f 70 63 6f 64  n the same opcod
193c0 65 2c 20 74 68 65 20 6f 76 65 72 6c 61 70 20 69  e, the overlap i
193d0 73 20 68 61 72 6d 6c 65 73 73 2e 0a 2a 2f 0a 23  s harmless..*/.#
193e0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
193f0 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
19400 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
19410 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65  date db->nChange
19420 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
19430 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
19440 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20   0x02    /* Set 
19450 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
19460 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
19470 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
19480 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
19490 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
194a0 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
194b0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
194c0 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
194d0 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
194e0 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
194f0 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
19500 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
19510 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
19520 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
19530 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
19540 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
19550 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43  #define OPFLAG_C
19560 4c 45 41 52 43 41 43 48 45 20 20 20 20 30 78 32  LEARCACHE    0x2
19570 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20 70 73  0    /* Clear ps
19580 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63 68 65  eudo-table cache
19590 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f   in OP_Column */
195a0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
195b0 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
195c0 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
195d0 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
195e0 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
195f0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
19600 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
19610 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
19620 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
19630 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
19640 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
19650 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
19660 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
19670 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
19680 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
19690 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
196a0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
196b0 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
196c0 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
196d0 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
196e0 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
196f0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 50 32     0x02    /* P2
19700 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
19710 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
19720 65 72 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  er */../*. * Eac
19730 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
19740 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
19750 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
19760 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
19770 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
19780 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50  rigger. . *. * P
19790 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
197a0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
197b0 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
197c0 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
197d0 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
197e0 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
197f0 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
19800 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
19810 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20  resents the . * 
19820 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
19830 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
19840 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
19850 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
19860 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
19870 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
19880 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
19890 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
198a0 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
198b0 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
198c0 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
198d0 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
198e0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
198f0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
19900 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
19910 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
19920 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
19930 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
19940 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
19950 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
19960 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
19970 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
19980 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
19990 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
199a0 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
199b0 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
199c0 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
199d0 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
199e0 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
199f0 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
19a00 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
19a10 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19a20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
19a30 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
19a40 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
19a50 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
19a60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
19a70 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
19a80 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
19a90 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
19aa0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
19ab0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
19ac0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
19ad0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
19ae0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
19af0 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
19b00 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
19b10 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
19b20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
19b30 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
19b40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
19b50 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
19b60 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
19b70 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
19b80 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
19b90 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
19ba0 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
19bb0 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
19bc0 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
19bf0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
19c00 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
19c10 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
19c20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
19c30 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
19c40 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
19c50 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
19c60 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
19c70 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
19c80 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
19c90 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
19ca0 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
19cb0 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
19cc0 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
19cd0 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
19ce0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
19cf0 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
19d00 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
19d10 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
19d20 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
19d30 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
19d40 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
19d50 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
19d60 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
19d70 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
19d80 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  which. .**.** If
19d90 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
19da0 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
19db0 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
19dc0 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
19dd0 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
19de0 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
19df0 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
19e00 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
19e10 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
19e20 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
19e30 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
19e40 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
19e50 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
19e60 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
19e70 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
19e80 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
19e90 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
19ea0 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
19eb0 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
19ec0 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  m. . *. * Instan
19ed0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
19ee0 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
19ef0 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
19f00 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
19f10 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
19f20 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
19f30 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
19f40 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
19f50 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20  member of the . 
19f60 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
19f70 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
19f80 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
19f90 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
19fa0 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
19fb0 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
19fc0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
19fd0 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54  rogram.. * . * T
19fe0 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69  he "op" member i
19ff0 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72  ndicates whether
1a000 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45   this is a "DELE
1a010 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22  TE", "INSERT", "
1a020 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53  UPDATE" or. * "S
1a030 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74  ELECT" statement
1a040 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  . The meanings o
1a050 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62  f the other memb
1a060 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ers is determine
1a070 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c  d by the . * val
1a080 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
1a090 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
1a0a0 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
1a0b0 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
1a0c0 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
1a0d0 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
1a0e0 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
1a0f0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1a100 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
1a110 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
1a120 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
1a130 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
1a140 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
1a150 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
1a160 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
1a170 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65  e NULL.. * targe
1a180 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1a190 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1a1a0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1a1b0 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
1a1c0 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
1a1d0 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
1a1e0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1a1f0 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
1a200 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1a220 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
1a230 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
1a240 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1a250 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
1a260 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1a270 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
1a280 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
1a290 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20  VALUES ... . *  
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1a2b0 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
1a2c0 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
1a2d0 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
1a2e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
1a2f0 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
1a300 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
1a310 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20  LETE). * target 
1a320 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1a330 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1a340 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1a350 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
1a360 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
1a370 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1a380 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
1a390 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1a3a0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1a3b0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1a3c0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1a3d0 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  . * . * (op == T
1a3e0 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72  K_UPDATE). * tar
1a3f0 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
1a400 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
1a410 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1a420 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
1a430 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68   rows of.. * pWh
1a440 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1a450 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1a460 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
1a470 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1a480 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1a490 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1a4a0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
1a4b0 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
1a4c0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
1a4d0 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
1a4e0 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
1a4f0 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
1a500 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
1a510 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
1a520 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
1a530 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
1a540 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
1a550 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f  rgument.. * . */
1a560 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
1a570 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a590 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1a5a0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1a5b0 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
1a5c0 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
1a5d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
1a5e0 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
1a5f0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
1a600 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
1a610 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
1a620 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
1a630 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
1a640 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
1a650 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e  * SELECT statmen
1a660 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
1a670 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43  RT INTO .. SELEC
1a680 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e  T ... */.  Token
1a690 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20   target;        
1a6a0 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
1a6b0 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
1a6c0 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
1a6d0 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1a6e0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
1a6f0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
1a700 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
1a710 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
1a720 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
1a730 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
1a740 55 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20  UPDATE.  VALUES 
1a750 63 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52  clause for INSER
1a760 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  T */.  IdList *p
1a770 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1a780 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1a790 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1a7a0 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1a7b0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1a7c0 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1a7d0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1a7e0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1a7f0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1a800 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1a810 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1a820 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1a830 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1a840 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1a850 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1a860 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1a870 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1a880 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1a890 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1a8a0 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1a8b0 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1a8c0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1a8d0 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1a8e0 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1a8f0 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1a900 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1a910 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1a920 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1a930 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1a940 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1a950 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1a960 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1a970 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ema */.  const c
1a980 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
1a990 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
1a9a0 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
1a9b0 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
1a9c0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
1a9d0 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
1a9e0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
1a9f0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1aa00 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1aa10 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
1aa20 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
1aa30 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1aa40 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1aa50 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1aa60 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
1aa70 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
1aa80 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
1aa90 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
1aaa0 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
1aab0 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
1aac0 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
1aad0 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
1aae0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
1aaf0 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
1ab00 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1ab10 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
1ab20 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
1ab30 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
1ab40 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
1ab50 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
1ab60 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
1ab70 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
1ab80 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
1ab90 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
1aba0 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
1abb0 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
1abc0 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72   */.  int  nChar
1abd0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
1abe0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
1abf0 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ng so far */.  i
1ac00 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  nt  nAlloc;     
1ac10 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
1ac20 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
1ac30 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69   in zText */.  i
1ac40 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  nt  mxAlloc;    
1ac50 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
1ac60 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65  llowed string le
1ac70 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d  ngth */.  u8   m
1ac80 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f  allocFailed;   /
1ac90 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69  * Becomes true i
1aca0 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c  f any memory all
1acb0 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f  ocation fails */
1acc0 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f  .  u8   useMallo
1acd0 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f  c;      /* 0: no
1ace0 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44  ne,  1: sqlite3D
1acf0 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c  bMalloc,  2: sql
1ad00 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20  ite3_malloc */. 
1ad10 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20   u8   tooBig;   
1ad20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73        /* Becomes
1ad30 20 74 72 75 65 20 69 66 20 73 74 72 69 6e 67 20   true if string 
1ad40 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d  size exceeds lim
1ad50 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  its */.};../*.**
1ad60 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1ad70 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1ad80 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
1ad90 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
1ada0 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
1adb0 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
1adc0 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
1add0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1ade0 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
1adf0 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
1ae00 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
1ae10 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
1ae20 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
1ae30 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
1ae40 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
1ae50 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
1ae60 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
1ae70 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1ae80 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
1ae90 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
1aea0 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
1aeb0 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
1aec0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
1aed0 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
1aee0 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
1aef0 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
1af00 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
1af10 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
1af20 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
1af30 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
1af40 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
1af50 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
1af60 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
1af70 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
1af80 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
1af90 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
1afa0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afc0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1afd0 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
1afe0 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
1aff0 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1b000 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1b010 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
1b020 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1b030 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b050 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1b060 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
1b070 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1b0a0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
1b0b0 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
1b0c0 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0e0 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
1b0f0 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
1b100 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
1b110 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
1b140 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
1b150 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b170 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1b180 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1b190 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1b1a0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1b1b0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1b1c0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1b1d0 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1b1e0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1b1f0 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1b200 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1b210 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1b220 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1b230 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1b240 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1b250 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1b260 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1b270 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1b280 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1b290 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1b2a0 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1b2b0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1b2c0 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b2e0 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1b2f0 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1b300 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1b310 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1b320 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1b330 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1b340 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1b350 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1b360 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1b370 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 76 6f  ts sizes */.  vo
1b380 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3a0 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1b3b0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1b3c0 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1b3d0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1b3e0 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1b3f0 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1b400 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b420 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1b430 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1b440 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b460 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1b470 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1b480 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b4a0 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1b4b0 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1b4c0 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b4f0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1b500 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1b510 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1b520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1b530 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1b540 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1b550 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1b560 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1b570 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1b580 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1b590 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1b5a0 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
1b5b0 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
1b5c0 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
1b5d0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
1b5e0 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
1b5f0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
1b600 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
1b610 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1b640 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
1b650 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
1b660 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
1b670 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
1b680 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
1b690 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
1b6a0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
1b6b0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
1b6c0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1b6d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1b6e0 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
1b6f0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1b700 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
1b710 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1b720 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1b730 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1b740 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1b750 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b770 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1b780 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1b790 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ed */.  sqlite3_
1b7a0 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
1b7b0 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
1b7c0 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
1b7d0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
1b7e0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
1b7f0 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
1b800 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b810 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
1b820 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69  itMutex */.  voi
1b830 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
1b840 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1b850 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
1b860 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
1b870 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
1b8a0 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
1b8b0 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74  */.  int bLocalt
1b8c0 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20  imeFault;       
1b8d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1b8e0 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65  o fail localtime
1b8f0 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 64  () calls */.#ifd
1b900 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1b910 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
1b920 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
1b930 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1b940 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
1b950 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
1b960 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
1b970 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
1b980 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
1b990 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
1b9a0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
1b9b0 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45  ker {.  int (*xE
1b9c0 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
1b9d0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
1b9e0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
1b9f0 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
1ba00 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
1ba10 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
1ba20 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
1ba30 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
1ba40 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ECTs */.  Parse 
1ba50 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
1ba80 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
1ba90 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bab0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bac0 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
1bad0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bb00 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
1bb10 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
1bb20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
1bb30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bb40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
1bb50 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
1bb60 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20      int i;      
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bb90 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
1bba0 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
1bbb0 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbd0 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
1bbe0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
1bbf0 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
1bc00 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
1bc10 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
1bc20 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
1bc30 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
1bc40 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
1bc50 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
1bc60 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
1bc70 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
1bc80 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1bc90 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
1bca0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1bcb0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1bcc0 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
1bcd0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1bce0 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
1bcf0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1bd00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1bd10 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
1bd20 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a  er*, Select*);..
1bd30 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
1bd40 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
1bd50 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
1bd60 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
1bd70 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
1bd80 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
1bd90 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
1bda0 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
1bdb0 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
1bdc0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
1bdd0 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
1bde0 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
1bdf0 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
1be00 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
1be10 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
1be20 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
1be30 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
1be40 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
1be50 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
1be60 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1be70 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
1be80 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
1be90 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
1bea0 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
1beb0 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
1bec0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1bed0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
1bee0 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
1bef0 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1bf10 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
1bf20 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf40 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
1bf50 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
1bf60 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
1bf70 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
1bf80 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfb0 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
1bfc0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
1bfd0 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
1bfe0 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
1bff0 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
1c000 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
1c010 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
1c020 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
1c030 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
1c040 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
1c050 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
1c060 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
1c070 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
1c080 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
1c090 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
1c0a0 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
1c0b0 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
1c0c0 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
1c0d0 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
1c0e0 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
1c0f0 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
1c100 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1c110 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1c120 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
1c130 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
1c140 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
1c150 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
1c160 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
1c170 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1c180 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1c190 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
1c1a0 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
1c1b0 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
1c1c0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1c1d0 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
1c1e0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1c1f0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1c200 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
1c210 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
1c220 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
1c230 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
1c240 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
1c250 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
1c260 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
1c270 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
1c280 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  lso all.** the S
1c290 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c2a0 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
1c2b0 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f   as an alisse fo
1c2c0 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
1c2d0 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
1c2e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c2f0 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
1c300 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c310 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
1c320 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1c330 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS3.#endif../*.
1c340 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
1c350 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
1c360 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
1c370 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
1c380 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
1c390 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
1c3a0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
1c3b0 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
1c3c0 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1c3d0 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
1c3e0 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
1c3f0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c400 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
1c410 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
1c420 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
1c430 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
1c440 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1c450 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
1c460 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
1c470 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
1c480 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
1c490 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
1c4a0 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
1c4b0 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
1c4c0 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
1c4d0 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
1c4e0 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
1c4f0 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
1c500 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
1c510 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
1c520 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
1c530 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c540 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
1c550 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
1c560 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1c570 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
1c580 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c590 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
1c5a0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c5b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c5c0 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
1c5d0 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1c5e0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c5f0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c600 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
1c610 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c620 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
1c630 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c640 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c650 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
1c660 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1c670 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c680 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c690 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
1c6a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c6b0 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
1c6c0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c6d0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c6e0 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
1c6f0 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
1c700 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
1c710 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
1c720 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65  ed char)(x)]).#e
1c730 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1c740 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1c750 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
1c760 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1c770 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1c780 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
1c790 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
1c7a0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1c7b0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1c7c0 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
1c7d0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1c7e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c7f0 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
1c800 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
1c810 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1c820 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1c830 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
1c840 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1c850 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c860 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
1c870 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
1c880 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1c890 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1c8a0 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
1c8b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1c8c0 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  x)).#endif../*.*
1c8d0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
1c8e0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
1c8f0 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
1c900 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33  3StrICmp sqlite3
1c910 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c  _stricmp.int sql
1c920 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
1c930 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
1c940 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
1c950 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
1c960 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
1c970 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
1c980 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1c990 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
1c9a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1c9b0 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  oc(int);.void *s
1c9c0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
1c9d0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1c9e0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1c9f0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1ca00 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1ca10 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
1ca20 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
1ca30 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1ca40 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1ca50 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
1ca60 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
1ca70 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1ca80 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  r*, int);.void *
1ca90 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
1caa0 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  oid*, int);.void
1cab0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1cac0 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
1cad0 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1cae0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1caf0 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
1cb00 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1cb10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
1cb20 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
1cb30 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1cb40 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
1cb50 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1cb60 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
1cb70 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
1cb80 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
1cb90 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
1cba0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
1cbb0 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
1cbc0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
1cbd0 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
1cbe0 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
1cbf0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1cc00 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
1cc10 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ault(void);.void
1cc20 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
1cc30 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
1cc40 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
1cc50 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73  *)(void));.int s
1cc60 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
1cc70 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
1cc80 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
1cc90 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
1cca0 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
1ccb0 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
1ccc0 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
1ccd0 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
1cce0 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
1ccf0 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
1cd00 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
1cd10 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
1cd20 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
1cd30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
1cd40 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
1cd50 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
1cd60 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
1cd70 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
1cd80 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
1cd90 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
1cda0 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
1cdb0 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
1cdc0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
1cdd0 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
1cde0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1cdf0 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
1ce00 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
1ce10 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1ce20 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
1ce30 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
1ce40 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
1ce50 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
1ce60 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73  D,P)       .#els
1ce70 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1ce80 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
1ce90 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
1cea0 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
1ceb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1cec0 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
1ced0 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
1cee0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
1cef0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1cf00 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
1cf10 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1cf20 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
1cf30 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1cf40 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
1cf50 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1cf60 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
1cf70 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
1cf80 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1cf90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1cfa0 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
1cfb0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1cfc0 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1cfd0 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
1cfe0 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
1cff0 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
1d000 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1d010 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
1d020 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
1d030 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
1d040 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1d050 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
1d060 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
1d070 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1d080 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
1d090 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
1d0a0 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
1d0b0 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
1d0c0 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
1d0d0 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  d);.#endif..int 
1d0e0 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
1d0f0 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
1d100 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69  lite3StatusAdd(i
1d110 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1d120 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
1d130 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e  int, int);..#ifn
1d140 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1d150 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
1d160 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
1d170 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
1d180 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d190 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
1d1a0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
1d1b0 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
1d1c0 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  um*, int, const 
1d1d0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
1d1e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d1f0 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20  OMIT_TRACE.void 
1d200 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
1d210 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
1d220 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
1d230 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  dif.char *sqlite
1d240 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
1d250 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
1d260 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
1d270 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
1d280 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1d290 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20   va_list);.char 
1d2a0 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66  *sqlite3MAppendf
1d2b0 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c  (sqlite3*,char*,
1d2c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
1d2d0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
1d2e0 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  LITE_TEST) || de
1d2f0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
1d300 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
1d310 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
1d320 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1d330 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1d340 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
1d350 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
1d360 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
1d370 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
1d380 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f  if../* Output fo
1d390 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c  rmatting for SQL
1d3a0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50  ITE_TESTCTRL_EXP
1d3b0 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69  LAIN */.#if defi
1d3c0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1d3d0 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a  E_TREE_EXPLAIN).
1d3e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d3f0 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a  plainBegin(Vdbe*
1d400 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d410 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56  3ExplainPrintf(V
1d420 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
1d430 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20  *, ...);.  void 
1d440 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c  sqlite3ExplainNL
1d450 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1d460 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75  sqlite3ExplainPu
1d470 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  sh(Vdbe*);.  voi
1d480 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1d490 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  Pop(Vdbe*);.  vo
1d4a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1d4b0 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a  nFinish(Vdbe*);.
1d4c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d4d0 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65  plainSelect(Vdbe
1d4e0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  *, Select*);.  v
1d4f0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d500 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78  inExpr(Vdbe*, Ex
1d510 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
1d520 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c  ite3ExplainExprL
1d530 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c  ist(Vdbe*, ExprL
1d540 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63  ist*);.  const c
1d550 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65  har *sqlite3Vdbe
1d560 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65  Explanation(Vdbe
1d570 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
1d580 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d590 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  nBegin(X).# defi
1d5a0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d5b0 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64  nSelect(A,B).# d
1d5c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1d5d0 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20  lainExpr(A,B).# 
1d5e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1d5f0 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c  plainExprList(A,
1d600 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
1d610 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68  te3ExplainFinish
1d620 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1d630 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74  ite3VdbeExplanat
1d640 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  ion(X) 0.#endif.
1d650 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
1d660 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
1d670 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
1d680 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
1d690 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
1d6a0 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
1d6b0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e   char*, ...);.in
1d6c0 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  t sqlite3Dequote
1d6d0 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
1d6e0 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
1d6f0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1d700 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
1d710 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
1d720 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1d730 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
1d740 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1d750 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
1d760 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1d770 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
1d780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
1d790 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
1d7a0 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
1d7b0 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
1d7c0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
1d7d0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
1d7e0 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
1d7f0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
1d800 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
1d810 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
1d820 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1d830 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
1d840 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
1d850 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
1d860 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
1d870 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1d880 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1d890 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
1d8a0 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
1d8b0 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
1d8c0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1d8d0 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
1d8e0 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
1d8f0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
1d900 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1d910 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
1d920 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
1d930 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
1d940 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
1d950 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
1d960 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d970 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
1d980 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
1d990 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d9a0 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
1d9b0 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
1d9c0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
1d9d0 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
1d9e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1d9f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1da00 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
1da10 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1da20 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1da30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1da40 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
1da50 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
1da60 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1da70 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
1da80 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1da90 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1daa0 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
1dab0 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
1dac0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1dad0 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
1dae0 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
1daf0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
1db00 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
1db10 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1db20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1db30 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
1db40 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
1db50 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1db60 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
1db70 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
1db80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1db90 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
1dba0 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
1dbb0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1dbc0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
1dbd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1dbe0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
1dbf0 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
1dc00 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
1dc10 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
1dc20 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
1dc30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
1dc40 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
1dc50 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  se *, int);.void
1dc60 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
1dc70 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
1dc80 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
1dc90 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
1dca0 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
1dcb0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
1dcc0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
1dcd0 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
1dce0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1dcf0 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
1dd00 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
1dd10 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1dd20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1dd30 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
1dd40 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1dd50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1dd60 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65  ColumnType(Parse
1dd70 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
1dd80 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
1dd90 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
1dda0 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
1ddb0 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
1ddc0 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
1ddd0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1dde0 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
1ddf0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1de00 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1de10 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f  lite3ParseUri(co
1de20 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
1de30 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69  char*,unsigned i
1de40 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  nt*,.           
1de50 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1de60 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68  _vfs**,char**,ch
1de70 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73  ar **);.Btree *s
1de80 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74  qlite3DbNameToBt
1de90 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ree(sqlite3*,con
1dea0 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
1deb0 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50  qlite3CodeOnce(P
1dec0 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63  arse *);..Bitvec
1ded0 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
1dee0 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
1def0 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
1df00 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
1df10 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1df20 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
1df30 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
1df40 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
1df50 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
1df60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1df70 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
1df80 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
1df90 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
1dfa0 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  vec*);.int sqlit
1dfb0 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
1dfc0 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a  est(int,int*);..
1dfd0 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
1dfe0 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
1dff0 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
1e000 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
1e010 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
1e020 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
1e030 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
1e040 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
1e050 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1e060 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
1e070 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69 36  *, u8 iBatch, i6
1e080 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1e090 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
1e0a0 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
1e0b0 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
1e0c0 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
1e0d0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1e0e0 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
1e0f0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1e100 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1e110 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
1e120 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1e130 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
1e140 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1e150 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
1e160 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
1e170 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
1e180 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
1e190 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  ,B) 0.#endif..vo
1e1a0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
1e1b0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
1e1c0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
1e1d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1e1e0 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
1e1f0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1e200 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e210 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
1e220 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
1e230 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e240 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1e250 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
1e260 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
1e270 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
1e280 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
1e290 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
1e2a0 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
1e2b0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1e2c0 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
1e2d0 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
1e2e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1e2f0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1e300 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  X).#endif.int sq
1e310 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69  lite3CodeCorouti
1e320 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ne(Parse*, Selec
1e330 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
1e340 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
1e350 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
1e360 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
1e370 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
1e380 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  t*, int);.void *
1e390 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f  sqlite3ArrayAllo
1e3a0 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f  cate(sqlite3*,vo
1e3b0 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  id*,int,int*,int
1e3c0 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  *);.IdList *sqli
1e3d0 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28  te3IdListAppend(
1e3e0 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
1e3f0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
1e400 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64  sqlite3IdListInd
1e410 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74  ex(IdList*,const
1e420 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74   char*);.SrcList
1e430 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1e440 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a  Enlarge(sqlite3*
1e450 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
1e460 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a   int);.SrcList *
1e470 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
1e480 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53  pend(sqlite3*, S
1e490 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
1e4a0 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73   Token*);.SrcLis
1e4b0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1e4c0 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28  tAppendFromTerm(
1e4d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1e4e0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1e4f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e510 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20          Token*, 
1e520 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20  Select*, Expr*, 
1e530 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
1e540 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64  qlite3SrcListInd
1e550 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20  exedBy(Parse *, 
1e560 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e  SrcList *, Token
1e570 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
1e580 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
1e590 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
1e5a0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
1e5b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
1e5c0 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
1e5d0 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
1e5e0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
1e5f0 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
1e600 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
1e610 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
1e620 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
1e630 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
1e640 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1e650 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1e660 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
1e670 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
1e680 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
1e690 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
1e6a0 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
1e6b0 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6d0 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20     Token*, int, 
1e6e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e6f0 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
1e700 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
1e710 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
1e720 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
1e730 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
1e740 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
1e750 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
1e760 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
1e770 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1e780 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7a0 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
1e7b0 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72  *,int,Expr*,Expr
1e7c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e7d0 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
1e7e0 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
1e7f0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
1e800 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
1e810 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
1e820 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
1e830 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
1e840 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
1e850 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
1e860 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
1e870 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
1e880 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
1e890 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1e8a0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
1e8b0 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
1e8c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1e8d0 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
1e8e0 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
1e8f0 65 72 65 28 50 61 72 73 65 20 2a 2c 20 53 72 63  ere(Parse *, Src
1e900 4c 69 73 74 20 2a 2c 20 45 78 70 72 20 2a 2c 20  List *, Expr *, 
1e910 45 78 70 72 4c 69 73 74 20 2a 2c 20 45 78 70 72  ExprList *, Expr
1e920 20 2a 2c 20 45 78 70 72 20 2a 2c 20 63 68 61 72   *, Expr *, char
1e930 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64   *);.#endif.void
1e940 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72   sqlite3DeleteFr
1e950 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  om(Parse*, SrcLi
1e960 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
1e970 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
1e980 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1e990 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
1e9a0 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49  r*, int);.WhereI
1e9b0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
1e9c0 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
1e9d0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
1e9e0 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
1e9f0 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
1ea00 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
1ea10 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1ea20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1ea30 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
1ea40 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1ea50 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
1ea60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1ea70 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
1ea80 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
1ea90 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1eaa0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1eab0 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
1eac0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1ead0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1eae0 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
1eaf0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
1eb00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1eb10 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
1eb20 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1eb30 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
1eb40 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  p(Parse*, int);.
1eb50 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1eb60 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
1eb70 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1eb80 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1eb90 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
1eba0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1ebb0 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
1ebc0 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
1ebd0 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1ebe0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
1ebf0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1ec00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1ec10 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
1ec20 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
1ec30 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1ec40 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
1ec50 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1ec60 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1ec70 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
1ec80 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1ec90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1eca0 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50  rCodeConstants(P
1ecb0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  arse*, Expr*);.i
1ecc0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1ecd0 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
1ece0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
1ecf0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1ed00 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
1ed10 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1ed20 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1ed30 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
1ed40 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1ed50 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
1ed60 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
1ed70 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
1ed80 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1ed90 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
1eda0 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
1edb0 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
1edc0 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
1edd0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
1ede0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
1edf0 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
1ee00 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
1ee10 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
1ee20 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
1ee30 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
1ee40 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1ee50 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1ee60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1ee70 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
1ee80 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
1ee90 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1eea0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
1eeb0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
1eec0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
1eed0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1eee0 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
1eef0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
1ef00 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
1ef10 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
1ef20 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
1ef30 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
1ef40 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
1ef50 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
1ef60 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
1ef70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1ef80 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
1ef90 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
1efa0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1efb0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
1efc0 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
1efd0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
1efe0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
1eff0 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
1f000 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
1f010 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f020 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
1f030 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
1f040 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
1f050 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
1f060 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f070 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
1f080 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1f090 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
1f0a0 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1f0b0 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74  lite3PrngResetSt
1f0c0 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1f0d0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1f0e0 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
1f0f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1f100 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
1f110 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1f120 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
1f130 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
1f140 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1f150 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
1f160 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
1f170 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
1f180 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f190 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
1f1a0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
1f1b0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
1f1c0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
1f1d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f1e0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
1f1f0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
1f200 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
1f210 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
1f220 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
1f230 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
1f240 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
1f250 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1f260 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
1f270 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
1f280 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
1f290 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
1f2a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f2b0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
1f2c0 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69  nction(Expr*);.i
1f2d0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
1f2e0 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
1f2f0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1f300 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
1f310 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69  onst Expr*);.voi
1f320 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1f330 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65  eIsNullJump(Vdbe
1f340 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
1f350 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1f360 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
1f370 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
1f380 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
1f390 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
1f3a0 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
1f3b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f3c0 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
1f3d0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
1f3e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1f3f0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
1f400 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
1f410 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
1f420 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
1f430 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29  ble*, int, int*)
1f440 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
1f450 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
1f460 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
1f470 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1f480 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
1f490 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
1f4a0 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
1f4b0 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f4e0 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
1f4f0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  int,int*);.void 
1f500 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
1f510 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
1f520 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1f530 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e  t, int*, int, in
1f540 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1f550 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
1f560 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
1f570 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1f580 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1f590 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
1f5a0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
1f5b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f5c0 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
1f5d0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1f5e0 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
1f5f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f600 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
1f610 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 68 61 72  arse*, int, char
1f620 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
1f630 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
1f640 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
1f650 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
1f660 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
1f670 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
1f680 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
1f690 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1f6a0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
1f6b0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
1f6c0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
1f6d0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
1f6e0 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
1f6f0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
1f700 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
1f710 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1f720 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72  ite3FuncDefInser
1f730 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20  t(FuncDefHash*, 
1f740 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44  FuncDef*);.FuncD
1f750 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
1f760 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
1f770 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
1f780 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
1f790 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
1f7a0 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
1f7b0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
1f7c0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
1f7d0 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
1f7e0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
1f7f0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c  qlite3RegisterGl
1f800 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f  obalFunctions(vo
1f810 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
1f820 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
1f830 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
1f840 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
1f850 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
1f860 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f870 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
1f880 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
1f890 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1f8a0 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
1f8b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1f8c0 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
1f8d0 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
1f8e0 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
1f8f0 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
1f900 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
1f910 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f920 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
1f930 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
1f940 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
1f950 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
1f960 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
1f970 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
1f990 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
1f9a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
1f9b0 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
1f9c0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
1f9d0 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
1f9e0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
1f9f0 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
1fa00 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
1fa10 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
1fa20 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
1fa30 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
1fa40 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
1fa50 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
1fa60 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
1fa70 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1fa80 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
1fa90 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
1faa0 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
1fab0 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
1fac0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
1fad0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1fae0 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
1faf0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
1fb00 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
1fb30 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1fb40 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
1fb50 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
1fb60 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
1fb70 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
1fb80 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1fb90 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
1fba0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
1fbb0 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
1fbc0 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
1fbd0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
1fbe0 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
1fbf0 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
1fc00 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1fc10 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
1fc20 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
1fc30 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69  ,Select*);.  Tri
1fc40 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1fc50 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
1fc60 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1fc70 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fca0 20 20 20 20 20 45 78 70 72 4c 69 73 74 2a 2c 53       ExprList*,S
1fcb0 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72  elect*,u8);.  Tr
1fcc0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
1fcd0 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
1fce0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
1fcf0 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
1fd00 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69  xpr*, u8);.  Tri
1fd10 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1fd20 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
1fd30 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1fd40 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f  n*, Expr*);.  vo
1fd50 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
1fd60 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
1fd70 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
1fd80 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
1fd90 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
1fda0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
1fdb0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
1fdc0 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
1fdd0 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
1fde0 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
1fdf0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
1fe00 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
1fe10 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
1fe20 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
1fe30 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
1fe40 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
1fe50 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1fe60 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
1fe70 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
1fe80 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
1fe90 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
1fea0 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1feb0 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
1fec0 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
1fed0 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
1fee0 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
1fef0 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
1ff00 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
1ff10 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
1ff20 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
1ff30 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
1ff40 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
1ff50 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
1ff60 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
1ff70 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
1ff80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
1ff90 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
1ffa0 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
1ffb0 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
1ffc0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
1ffd0 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
1ffe0 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
1fff0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
20000 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
20010 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
20020 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
20030 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
20040 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
20050 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
20060 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
20070 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
20080 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
20090 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
200a0 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
200b0 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
200c0 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
200d0 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
200e0 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
200f0 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
20100 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
20110 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
20120 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
20130 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
20140 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
20150 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
20160 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
20170 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
20180 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
20190 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
201a0 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
201b0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
201c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
201d0 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
201e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
201f0 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
20200 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
20210 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
20220 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
20230 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20240 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
20250 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
20260 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
20270 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
20280 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
20290 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
202a0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
202b0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
202c0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
202d0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
202e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
202f0 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
20300 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
20310 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
20320 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
20330 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
20340 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
20350 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
20360 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
20370 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
20380 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
20390 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
203a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
203b0 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
203c0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
203d0 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
203e0 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
203f0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
20400 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
20410 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
20420 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
20430 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
20440 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
20450 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
20460 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
20470 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
20480 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
20490 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
204a0 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
204b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
204c0 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
204d0 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
204e0 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
204f0 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
20500 20 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52   u8**);../*.** R
20510 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
20520 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
20530 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
20540 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
20550 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
20560 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
20570 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
20580 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
20590 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
205a0 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c 64  le.  Code should
205b0 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20 66   use the MACRO f
205c0 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20 74  orms below, as t
205d0 68 65 20 56 61 72 69 6e 74 33 32 20 76 65 72 73  he Varint32 vers
205e0 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65  ions.** are code
205f0 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65 20  d to assume the 
20600 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73 65  single byte case
20610 20 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e 64   is already hand
20620 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20 74  led (which .** t
20630 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f  he MACRO form do
20640 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  es)..*/.int sqli
20650 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
20660 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
20670 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  );.int sqlite3Pu
20680 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67 6e  tVarint32(unsign
20690 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a  ed char*, u32);.
206a0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
206b0 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
206c0 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
206d0 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
206e0 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
206f0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
20700 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
20710 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
20720 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
20730 68 65 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f  header of a reco
20740 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  rd consists of a
20750 20 73 65 71 75 65 6e 63 65 20 76 61 72 69 61 62   sequence variab
20760 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
20770 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74  rs..** These int
20780 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74  egers are almost
20790 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e   always small an
207a0 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73  d are encoded as
207b0 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a   a single byte..
207c0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
207d0 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76   macros take adv
207e0 61 6e 74 61 67 65 20 74 68 69 73 20 66 61 63 74  antage this fact
207f0 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61   to provide a fa
20800 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64  st encode.** and
20810 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69   decode of the i
20820 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72 65 63  ntegers in a rec
20830 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49 74 20  ord header.  It 
20840 69 73 20 66 61 73 74 65 72 20 66 6f 72 20 74 68  is faster for th
20850 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65  e common.** case
20860 20 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 67   where the integ
20870 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62  er is a single b
20880 79 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69  yte.  It is a li
20890 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e  ttle slower when
208a0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
208b0 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62  is two or more b
208c0 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61  ytes.  But overa
208d0 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65 72 2e  ll it is faster.
208e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  .**.** The follo
208f0 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73  wing expressions
20900 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a   are equivalent:
20910 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73  .**.**     x = s
20920 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
20930 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20  2( A, &B );.**  
20940 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75     x = sqlite3Pu
20950 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
20960 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d  );.**.**     x =
20970 20 67 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c   getVarint32( A,
20980 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d   B );.**     x =
20990 20 70 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c   putVarint32( A,
209a0 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66   B );.**.*/.#def
209b0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
209c0 41 2c 42 29 20 20 28 75 38 29 28 28 2a 28 41 29  A,B)  (u8)((*(A)
209d0 3c 28 75 38 29 30 78 38 30 29 20 3f 20 28 28 42  <(u8)0x80) ? ((B
209e0 29 20 3d 20 28 75 33 32 29 2a 28 41 29 29 2c 31  ) = (u32)*(A)),1
209f0 20 3a 20 73 71 6c 69 74 65 33 47 65 74 56 61 72   : sqlite3GetVar
20a00 69 6e 74 33 32 28 28 41 29 2c 20 28 75 33 32 20  int32((A), (u32 
20a10 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
20a20 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
20a30 29 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  )  (u8)(((u32)(B
20a40 29 3c 28 75 33 32 29 30 78 38 30 29 20 3f 20 28  )<(u32)0x80) ? (
20a50 2a 28 41 29 20 3d 20 28 75 6e 73 69 67 6e 65 64  *(A) = (unsigned
20a60 20 63 68 61 72 29 28 42 29 29 2c 31 20 3a 20 73   char)(B)),1 : s
20a70 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
20a80 32 28 28 41 29 2c 20 28 42 29 29 29 0a 23 64 65  2((A), (B))).#de
20a90 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
20aa0 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
20ab0 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
20ac0 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
20ad0 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
20ae0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
20af0 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56  dexAffinityStr(V
20b00 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  dbe *, Index *);
20b10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
20b20 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  leAffinityStr(Vd
20b30 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  be *, Table *);.
20b40 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
20b50 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
20b60 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
20b70 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
20b80 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
20b90 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
20ba0 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
20bb0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
20bc0 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
20bd0 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
20be0 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
20bf0 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
20c00 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
20c10 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
20c20 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
20c30 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a  ar*,...);.void *
20c40 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
20c50 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
20c60 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
20c70 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
20c80 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
20c90 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
20ca0 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
20cb0 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
20cc0 6f 6b 65 6e 20 2a 2a 29 3b 0a 63 6f 6e 73 74 20  oken **);.const 
20cd0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
20ce0 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
20cf0 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
20d00 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
20d10 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
20d20 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
20d30 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
20d40 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
20d50 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
20d60 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
20d70 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
20d80 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
20d90 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
20da0 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
20db0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
20dc0 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
20dd0 6c 69 74 65 33 45 78 70 72 53 65 74 43 6f 6c 6c  lite3ExprSetColl
20de0 28 45 78 70 72 2a 2c 20 43 6f 6c 6c 53 65 71 2a  (Expr*, CollSeq*
20df0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
20e00 45 78 70 72 53 65 74 43 6f 6c 6c 42 79 54 6f 6b  ExprSetCollByTok
20e10 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  en(Parse *pParse
20e20 2c 20 45 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29  , Expr*, Token*)
20e30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
20e40 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
20e50 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
20e60 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
20e70 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
20e80 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
20e90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
20ea0 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
20eb0 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
20ec0 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
20ed0 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
20ee0 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
20ef0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
20f00 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
20f10 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
20f20 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
20f30 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
20f40 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
20f50 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
20f60 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
20f70 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
20f80 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
20f90 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
20fa0 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
20fb0 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
20fc0 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
20fd0 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76  z,int);..const v
20fe0 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  oid *sqlite3Valu
20ff0 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  eText(sqlite3_va
21000 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  lue*, u8);.int s
21010 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
21020 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
21030 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
21040 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71  e3ValueSetStr(sq
21050 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e  lite3_value*, in
21060 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c  t, const void *,
21070 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  u8, .           
21080 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69               voi
21090 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
210a0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
210b0 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
210c0 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
210d0 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
210e0 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
210f0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
21100 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
21110 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
21120 74 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53  t, u8);.#ifdef S
21130 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
21140 54 33 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  T3.char *sqlite3
21150 55 74 66 38 74 6f 31 36 28 73 71 6c 69 74 65 33  Utf8to16(sqlite3
21160 20 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c 20   *, u8, char *, 
21170 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e  int, int *);.#en
21180 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
21190 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
211a0 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
211b0 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
211c0 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
211d0 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
211e0 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
211f0 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
21200 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
21210 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
21220 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
21230 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
21240 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
21250 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
21260 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
21270 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
21280 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
21290 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
212a0 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
212b0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
212c0 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
212d0 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
212e0 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
212f0 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
21300 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
21310 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
21320 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73  SD FuncDefHash s
21330 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63  qlite3GlobalFunc
21340 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
21350 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
21360 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
21370 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
21380 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ndif.#endif.void
21390 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
213a0 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
213b0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
213c0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
213d0 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
213e0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
213f0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
21400 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
21410 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
21420 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
21430 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
21440 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
21450 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
21460 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
21470 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
21480 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
21490 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
214a0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
214b0 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
214c0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
214d0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
214e0 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
214f0 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45  elect(Parse *, E
21500 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
21510 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
21520 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
21530 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
21540 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
21550 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
21560 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
21570 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
21580 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
21590 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
215a0 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
215b0 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
215c0 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
215d0 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
215e0 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
215f0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
21600 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
21610 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
21620 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
21630 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21640 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
21650 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
21660 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
21670 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
21680 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
21690 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
216a0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
216b0 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
216c0 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
216d0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
216e0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
216f0 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
21700 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
21710 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72  lite3Analyze(Par
21720 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
21730 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
21740 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c  3InvokeBusyHandl
21750 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29  er(BusyHandler*)
21760 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
21770 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
21780 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
21790 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c  e3FindDbName(sql
217a0 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
217b0 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
217c0 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
217d0 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
217e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
217f0 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73  leteIndexSamples
21800 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a  (sqlite3*,Index*
21810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
21820 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64  efaultRowEst(Ind
21830 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
21840 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
21850 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
21860 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
21870 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f  te3IsLikeFunctio
21880 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  n(sqlite3*,Expr*
21890 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f  ,int*,char*);.vo
218a0 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75  id sqlite3Minimu
218b0 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73  mFileFormat(Pars
218c0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
218d0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
218e0 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
218f0 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
21900 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
21910 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
21920 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
21930 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
21940 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
21950 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49  eyInfo *sqlite3I
21960 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50 61 72 73  ndexKeyinfo(Pars
21970 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69  e *, Index *);.i
21980 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
21990 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
219a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
219b0 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20  t, int, void *, 
219c0 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
219d0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
219e0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
219f0 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
21a00 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
21a10 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
21a20 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28  e **), void (*)(
21a30 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
21a40 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  ),.  FuncDestruc
21a50 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
21a60 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  .);.int sqlite3A
21a70 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
21a80 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
21a90 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
21aa0 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
21ab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
21ac0 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
21ad0 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c  um*, char*, int,
21ae0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21af0 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
21b00 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  d(StrAccum*,cons
21b10 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f  t char*,int);.vo
21b20 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64  id sqlite3Append
21b30 53 70 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c  Space(StrAccum*,
21b40 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
21b50 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
21b60 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
21b70 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
21b80 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d  umReset(StrAccum
21b90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21ba0 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
21bb0 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
21bc0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
21bd0 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
21be0 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
21bf0 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
21c00 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
21c10 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
21c20 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
21c30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
21c40 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
21c50 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
21c60 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
21c70 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
21c80 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
21c90 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
21ca0 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  er.*/.void *sqli
21cb0 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
21cc0 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29  oid*(*)(size_t))
21cd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
21ce0 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20  rserFree(void*, 
21cf0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
21d00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
21d10 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ser(void*, int, 
21d20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a  Token, Parse*);.
21d30 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
21d40 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
21d50 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
21d60 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
21d70 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
21d80 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
21d90 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
21da0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
21db0 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
21dc0 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
21dd0 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
21de0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
21df0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21e00 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
21e10 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
21e20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21e30 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
21e40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
21e50 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
21e60 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
21e70 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
21e80 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
21e90 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
21ea0 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
21eb0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
21ec0 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
21ed0 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
21ee0 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
21ef0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
21f00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
21f10 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
21f20 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
21f30 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
21f40 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
21f50 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
21f60 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21f70 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
21f80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
21f90 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
21fa0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21fb0 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
21fc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
21fd0 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65  abLock(X) .#  de
21fe0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21ff0 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
22000 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
22010 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
22020 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
22030 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
22040 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
22050 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
22060 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
22070 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
22080 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
22090 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
220a0 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
220b0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
220c0 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
220d0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
220e0 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
220f0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
22100 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72  qlite3 *db, char
22110 20 2a 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c   **);.   int sql
22120 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
22130 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
22140 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
22150 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
22160 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
22170 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
22180 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
22190 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
221a0 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
221b0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
221c0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
221d0 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
221e0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
221f0 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
22200 74 2c 20 69 6e 74 29 3b 0a 20 20 20 56 54 61 62  t, int);.   VTab
22210 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
22220 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
22230 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e  able*);.#  defin
22240 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
22250 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
22260 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
22270 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
22280 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
22290 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
222a0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
222b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
222c0 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
222d0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
222e0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
222f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
22300 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
22310 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
22320 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
22330 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
22340 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
22350 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
22360 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
22370 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
22380 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
22390 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
223a0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
223b0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
223c0 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
223d0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
223e0 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
223f0 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
22400 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
22410 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
22420 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
22430 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
22440 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
22450 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
22460 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
22470 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
22480 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
22490 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
224a0 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
224b0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
224c0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73  _value**);.int s
224d0 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
224e0 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
224f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
22500 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
22510 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
22520 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
22530 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
22540 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
22550 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
22560 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
22570 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
22580 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
22590 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
225a0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
225b0 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
225c0 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
225d0 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
225e0 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
225f0 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
22600 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
22610 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
22620 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
22630 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22640 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
22650 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
22660 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
22670 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
22680 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
22690 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
226a0 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
226b0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
226c0 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
226d0 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
226e0 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
226f0 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
22700 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
22710 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
22720 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
22730 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
22740 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
22750 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
22760 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
22770 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
22780 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
22790 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
227a0 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
227b0 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
227c0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
227d0 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
227e0 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
227f0 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
22800 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
22810 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
22820 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
22830 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
22840 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
22850 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
22860 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
22870 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
22880 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
22890 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
228a0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
228b0 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
228c0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
228d0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
228e0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
228f0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
22900 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
22910 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
22920 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
22930 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
22940 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
22950 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
22960 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
22970 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22980 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
22990 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
229a0 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
229b0 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
229c0 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
229d0 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
229e0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
229f0 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
22a00 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73  c,d).  #define s
22a10 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
22a20 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65  b,c,d).  #define
22a30 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
22a40 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
22a50 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
22a60 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
22a70 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
22a80 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
22a90 62 2c 63 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a  b,c,d) 0.#endif.
22aa0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22ab0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
22ac0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
22ad0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
22ae0 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  , Table*);.#else
22af0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22b00 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
22b10 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
22b20 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
22b30 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
22b40 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
22b50 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
22b60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
22b70 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
22b80 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
22b90 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
22ba0 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
22bb0 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
22bc0 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
22bd0 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
22be0 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
22bf0 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
22c00 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
22c10 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
22c20 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
22c30 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
22c40 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
22c50 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
22c60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22c70 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
22c80 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
22c90 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
22ca0 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
22cb0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
22cc0 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
22cd0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22ce0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
22cf0 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
22d00 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
22d10 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23  lloc().#endif..#
22d20 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
22d30 52 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20  ROWID           
22d40 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  1.#define IN_IND
22d50 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
22d60 20 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f     2.#define IN_
22d70 49 4e 44 45 58 5f 49 4e 44 45 58 20 20 20 20 20  INDEX_INDEX     
22d80 20 20 20 20 20 20 33 0a 69 6e 74 20 73 71 6c 69        3.int sqli
22d90 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
22da0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
22db0 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  int*);..#ifdef S
22dc0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
22dd0 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20  MIC_WRITE.  int 
22de0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
22df0 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
22e00 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
22e10 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
22e20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  int, int);.  int
22e30 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
22e40 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ize(sqlite3_vfs 
22e50 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
22e60 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
22e70 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
22e80 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22e90 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
22ea0 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29  ze(pVfs) ((pVfs)
22eb0 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 23 65 6e 64  ->szOsFile).#end
22ec0 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
22ed0 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
22ee0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
22ef0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
22f00 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
22f10 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
22f20 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
22f30 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
22f40 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
22f50 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
22f60 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
22f70 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
22f80 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
22f90 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
22fa0 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
22fb0 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
22fc0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22fd0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
22fe0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22ff0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
23000 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
23010 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
23020 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
23030 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23040 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
23050 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
23060 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
23070 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
23080 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
23090 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
230a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
230b0 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
230c0 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
230d0 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
230e0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
230f0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
23100 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
23110 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
23120 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
23130 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
23140 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
23150 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
23160 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
23170 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
23180 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
23190 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
231a0 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
231b0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
231c0 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
231d0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
231e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
231f0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
23200 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
23210 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
23220 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
23230 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
23240 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
23250 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
23260 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
23270 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
23280 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
23290 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
232a0 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
232b0 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
232c0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
232d0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
232e0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
232f0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
23300 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
23310 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
23320 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
23330 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
23340 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
23350 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
23360 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
23370 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
23380 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
23390 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
233a0 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
233b0 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
233c0 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
233d0 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
233e0 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
233f0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
23400 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
23410 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
23420 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
23430 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
23440 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
23450 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
23460 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
23470 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
23480 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
23490 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
234a0 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
234b0 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
234c0 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
234d0 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
234e0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
234f0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
23500 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
23510 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
23520 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
23530 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
23540 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
23550 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
23560 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
23570 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
23580 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
23590 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
235a0 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
235b0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
235c0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
235d0 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
235e0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
235f0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
23600 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
23610 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
23620 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
23630 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
23640 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
23650 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
23660 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
23670 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
23680 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
23690 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
236a0 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
236b0 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
236c0 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
236d0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
236e0 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
236f0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
23700 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
23710 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
23720 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
23730 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
23740 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
23750 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
23760 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
23770 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
23780 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
23790 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
237a0 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
237b0 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
237c0 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
237d0 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
237e0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
237f0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
23800 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
23810 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
23820 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
23830 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
23840 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
23850 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
23860 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
23870 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
23880 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
23890 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
238a0 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
238b0 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
238c0 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
238d0 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
238e0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
238f0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
23900 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
23910 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
23920 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
23930 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
23940 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23950 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
23960 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23970 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
23980 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
23990 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
239a0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
239b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
239c0 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
239d0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
239e0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
239f0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
23a00 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
23a10 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
23a20 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
23a30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23a40 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
23a50 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
23a60 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23a70 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
23a80 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
23a90 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
23aa0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23ab0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
23ac0 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
23ad0 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
23ae0 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
23af0 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
23b00 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
23b10 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
23b20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
23b30 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
23b40 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
23b50 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
23b60 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
23b70 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
23b80 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
23b90 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
23ba0 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
23bb0 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
23bc0 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.