/ Hex Artifact Content
Login

Artifact 6267485592261a1420ae9195e388242d9e451bdb:


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 44 65 74 65 72 6d 69 6e 65  ./*.** Determine
4950: 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
4960: 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74   is a power of t
4970: 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  wo.*/.#define Is
4980: 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28  PowerOfTwo(X) ((
4990: 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29  (X)&((X)-1))==0)
49a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
49b0: 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61  owing value as a
49c0: 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e   destructor mean
49d0: 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33  s to use sqlite3
49e0: 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65  DbFree()..** The
49f0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
4a00: 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65   routine require
4a10: 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73  s two parameters
4a20: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
4a30: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
4a40: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
4a50: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
4a60: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
4a70: 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74   introduce .** t
4a80: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
4a90: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
4aa0: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
4ab0: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20  fferently.  Any 
4ac0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c  .** pointer will
4ad0: 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f   work here as lo
4ae0: 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74  ng as it is dist
4af0: 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45  inct from SQLITE
4b00: 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53  _STATIC.** and S
4b10: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e  QLITE_TRANSIENT.
4b20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4b30: 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73  TE_DYNAMIC   ((s
4b40: 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f  qlite3_destructo
4b50: 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61  r_type)sqlite3Ma
4b60: 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a  llocSize)../*.**
4b70: 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49   When SQLITE_OMI
4b80: 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64  T_WSD is defined
4b90: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
4ba0: 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66  the target platf
4bb0: 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  orm does.** not 
4bc0: 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65  support Writable
4bd0: 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53   Static Data (WS
4be0: 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61  D) such as globa
4bf0: 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72  l and static var
4c00: 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76  iables..** All v
4c10: 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69  ariables must ei
4c20: 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73  ther be on the s
4c30: 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61  tack or dynamica
4c40: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72  lly allocated fr
4c50: 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20  om.** the heap. 
4c60: 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73   When WSD is uns
4c70: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61  upported, the va
4c80: 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69  riable declarati
4c90: 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a  ons scattered.**
4ca0: 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20   throughout the 
4cb0: 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74  SQLite code must
4cc0: 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74   become constant
4cd0: 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20  s instead.  The 
4ce0: 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61  SQLITE_WSD.** ma
4cf0: 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
4d00: 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41  this purpose.  A
4d10: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65  nd instead of re
4d20: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61  ferencing the va
4d30: 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74  riable.** direct
4d40: 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63  ly, we use its c
4d50: 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79  onstant as a key
4d60: 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72   to lookup the r
4d70: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
4d80: 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74  d.** buffer that
4d90: 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69   holds real vari
4da0: 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74  able.  The const
4db0: 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20  ant is also the 
4dc0: 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66  initializer.** f
4dd0: 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  or the run-time 
4de0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
4df0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75  ..**.** In the u
4e00: 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20  sual case where 
4e10: 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64  WSD is supported
4e20: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44  , the SQLITE_WSD
4e30: 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d   and GLOBAL.** m
4e40: 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d  acros become no-
4e50: 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72  ops and have zer
4e60: 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d  o performance im
4e70: 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  pact..*/.#ifdef 
4e80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
4e90: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
4ea0: 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65  _WSD const.  #de
4eb0: 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29  fine GLOBAL(t,v)
4ec0: 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77   (*(t*)sqlite3_w
4ed0: 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26  sd_find((void*)&
4ee0: 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29  (v), sizeof(v)))
4ef0: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
4f00: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47  e3GlobalConfig G
4f10: 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c  LOBAL(struct Sql
4f20: 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69  ite3Config, sqli
4f30: 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74  te3Config).  int
4f40: 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69   sqlite3_wsd_ini
4f50: 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b  t(int N, int J);
4f60: 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
4f70: 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a  _wsd_find(void *
4f80: 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65  K, int L);.#else
4f90: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
4fa0: 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65  E_WSD .  #define
4fb0: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
4fc0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
4fd0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
4fe0: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
4ff0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
5000: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
5010: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
5020: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
5030: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
5040: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
5050: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
5060: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
5070: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
5080: 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74  erately .** left
5090: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
50a0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
50b0: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
50c0: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
50d0: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
50e0: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
50f0: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
5100: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
5110: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
5120: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
5130: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
5140: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
5150: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
5160: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
5170: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
5180: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
5190: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
51a0: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
51b0: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
51c0: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
51d0: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
51e0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
51f0: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
5200: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
5210: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
5220: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
5230: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
5240: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
5250: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
5260: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
5270: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
5280: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
5290: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
52a0: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
52b0: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
52c0: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
52d0: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
52e0: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
52f0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
5300: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
5310: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
5320: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
5330: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
5340: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
5350: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
5360: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
5370: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
5380: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
5390: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
53a0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
53b0: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
53c0: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
53d0: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
53e0: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
53f0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
5400: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
5410: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
5420: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
5430: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
5440: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
5450: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
5460: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
5470: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
5480: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
5490: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
54a0: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
54b0: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
54c0: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
54d0: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
54e0: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
54f0: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
5500: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
5510: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
5520: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
5530: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
5540: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
5550: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
5560: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
5570: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
5580: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
5590: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
55a0: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
55b0: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
55c0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
55d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
55e0: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
55f0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5600: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
5610: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
5620: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
5630: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
5640: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
5650: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
5660: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
5670: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
5680: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
5690: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
56a0: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
56b0: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
56c0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
56d0: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
56e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
56f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
5700: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
5710: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
5720: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
5730: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
5740: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
5750: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
5760: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
5770: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
5780: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
5790: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
57a0: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
57b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
57c0: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
57d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
57e0: 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44  lectDest SelectD
57f0: 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  est;.typedef str
5800: 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c  uct SrcList SrcL
5810: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5820: 75 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72  uct StrAccum Str
5830: 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73  Accum;.typedef s
5840: 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c  truct Table Tabl
5850: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
5860: 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c  t TableLock Tabl
5870: 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73  eLock;.typedef s
5880: 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65  truct Token Toke
5890: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
58a0: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
58b0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
58c0: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
58d0: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
58e0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
58f0: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
5900: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5910: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
5920: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
5930: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
5940: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
5950: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
5960: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
5970: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
5980: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
5990: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 50  ef struct WhereP
59a0: 6c 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a 74  lan WherePlan;.t
59b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
59c0: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
59d0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
59e0: 74 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65  t WhereLevel Whe
59f0: 72 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20  reLevel;../*.** 
5a00: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
5a10: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
5a20: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
5a30: 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22  e "u8" and .** "
5a40: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
5a50: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
5a60: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
5a70: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
5a80: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
5a90: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
5aa0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
5ab0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
5ac0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
5ad0: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
5ae0: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
5af0: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23  de "pcache.h"..#
5b00: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
5b10: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
5b20: 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  ".../*.** Each d
5b30: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
5b40: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
5b50: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
5b60: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
5b70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
5b80: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
5b90: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
5ba0: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
5bb0: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
5bc0: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
5bd0: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
5be0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
5bf0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
5c00: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
5c10: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
5c20: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
5c30: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
5c40: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
5c50: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
5c60: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
5c70: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
5c80: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
5c90: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
5ca0: 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
5cb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
5cc0: 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B*Tree structure
5cd0: 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61   for this databa
5ce0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
5cf0: 69 6e 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  inTrans;        
5d00: 20 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72 69 74    /* 0: not writ
5d10: 61 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e 73 61  able.  1: Transa
5d20: 63 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65 63 6b  ction.  2: Check
5d30: 70 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20 73 61  point */.  u8 sa
5d40: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
5d50: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
5d60: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
5d70: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
5d80: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
5d90: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
5da0: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
5db0: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
5dc0: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
5dd0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
5de0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5df0: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
5e00: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
5e10: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
5e20: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
5e30: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
5e40: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
5e50: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
5e60: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
5e70: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
5e80: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
5e90: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
5ea0: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
5eb0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
5ec0: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
5ed0: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
5ee0: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
5ef0: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
5f00: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
5f10: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
5f20: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
5f30: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
5f40: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
5f50: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
5f60: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
5f70: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
5f80: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
5f90: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
5fa0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
5fb0: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
5fc0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
5fd0: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
5fe0: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
5ff0: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
6000: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
6010: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
6020: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
6030: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
6040: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
6050: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
6060: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
6070: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
6080: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
6090: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
60a0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
60b0: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
60c0: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
60d0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
60e0: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
60f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
6100: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
6110: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
6120: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
6130: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
6140: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
6150: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
6160: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
6170: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
6180: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
6190: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
61a0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
61b0: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
61c0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
61d0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
61e0: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
61f0: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
6200: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
6210: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
6220: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
6230: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
6240: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
6250: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
6260: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
6270: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
6280: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
6290: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
62a0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
62b0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
62c0: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
62d0: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
62e0: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
62f0: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
6300: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
6310: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
6320: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
6330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
6340: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
6350: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
6360: 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  se */.  u16 flag
6370: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
6380: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
6390: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
63a0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
63b0: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
63c0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
63d0: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
63e0: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
63f0: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
6400: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
6410: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
6420: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
6430: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
6440: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
6450: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
6460: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
6470: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6480: 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  ma->flags&(P))==
6490: 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48  (P)).#define DbH
64a0: 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c  asAnyProperty(D,
64b0: 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62  I,P)  (((D)->aDb
64c0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61  [I].pSchema->fla
64d0: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
64e0: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
64f0: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
6500: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
6510: 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
6520: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
6530: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
6540: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6550: 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  a->flags&=~(P)..
6560: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
6570: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
6580: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
6590: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
65a0: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
65b0: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
65c0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
65d0: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
65e0: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
65f0: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
6600: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
6610: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
6620: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
6630: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
6640: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
6650: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
6660: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
6670: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
6680: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
6690: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
66a0: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
66b0: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
66c0: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
66d0: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
66e0: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
66f0: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
6700: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
6710: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
6720: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
6730: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
6740: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
6750: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
6760: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
6770: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
6780: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
6790: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
67a0: 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ytes) */../*.** 
67b0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  The number of di
67c0: 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66  fferent kinds of
67d0: 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e   things that can
67e0: 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75   be limited.** u
67f0: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
6800: 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61  _limit() interfa
6810: 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ce..*/.#define S
6820: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53  QLITE_N_LIMIT (S
6830: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
6840: 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a  GER_DEPTH+1)../*
6850: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
6860: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
6870: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
6880: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
6890: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
68a0: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
68b0: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
68c0: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
68d0: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
68e0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
68f0: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
6900: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
6910: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
6920: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
6930: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
6940: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
6950: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
6960: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
6970: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
6980: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
6990: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
69a0: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
69b0: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
69c0: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
69d0: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
69e0: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
69f0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
6a00: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
6a10: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
6a20: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
6a30: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
6a40: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
6a50: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
6a60: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
6a70: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
6a80: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
6a90: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
6aa0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
6ab0: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
6ac0: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
6ad0: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
6ae0: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
6af0: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
6b00: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
6b10: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
6b20: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
6b30: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
6b40: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
6b50: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
6b60: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
6b70: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
6b80: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
6b90: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
6ba0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
6bb0: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
6bc0: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
6bd0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
6be0: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
6bf0: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
6c00: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
6c10: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
6c20: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
6c30: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
6c40: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
6c50: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
6c60: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36  ookaside {.  u16
6c70: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
6c80: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
6c90: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
6ca0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e  ytes */.  u8 bEn
6cb0: 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
6cc0: 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69    /* False to di
6cd0: 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73  sable new lookas
6ce0: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
6cf0: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
6d00: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
6d10: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
6d20: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
6d30: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
6d40: 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20  .  int nOut;    
6d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
6d60: 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20  mber of buffers 
6d70: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
6d80: 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d  d out */.  int m
6d90: 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  xOut;           
6da0: 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20     /* Highwater 
6db0: 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f  mark for nOut */
6dc0: 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d  .  int anStat[3]
6dd0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
6de0: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
6df0: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
6e00: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
6e10: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
6e20: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
6e30: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
6e40: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
6e50: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
6e60: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
6e70: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
6e80: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
6e90: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
6ea0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
6eb0: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
6ec0: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
6ed0: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
6ee0: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
6ef0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
6f00: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
6f10: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
6f20: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
6f30: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
6f40: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  hash table for f
6f50: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
6f60: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  ons..**.** Hash 
6f70: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
6f80: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
6f90: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
6fa0: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
6fb0: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
6fc0: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70  on the FuncDef.p
6fd0: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73  Hash chain..*/.s
6fe0: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
6ff0: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
7000: 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  [23];       /* H
7010: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
7020: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  nctions */.};../
7030: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
7040: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
7050: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
7060: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
7070: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
7080: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
7090: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
70a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
70b0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
70c0: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
70d0: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
70e0: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
70f0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
7100: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
7110: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
7120: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
7130: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
7140: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
7150: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
7160: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
7170: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
7180: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
7190: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
71a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
71b0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
71c0: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
71e0: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
71f0: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
7200: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
7210: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
7220: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
7230: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
7240: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
7250: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
7260: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7270: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
7280: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
7290: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 75 6e 73   above) */.  uns
72a0: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
72b0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
72c0: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
72d0: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
72e0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
72f0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
7300: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
7310: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
7320: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
7330: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7350: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
7360: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
7370: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
7380: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
73a0: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
73b0: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
73c0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75  tions */.  u8 au
73d0: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
73e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
73f0: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
7400: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
7410: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
7420: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
7430: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
7440: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
7450: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
7460: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
7470: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
7480: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
7490: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
74a0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
74b0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
74c0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
74d0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
74e0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
74f0: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
7500: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
7510: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
7520: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
7530: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
7540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
7550: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
7560: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
7570: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
7580: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
7590: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
75a0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
75b0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
75c0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
75d0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
75e0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
75f0: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
7600: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
7610: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
7620: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
7630: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
7640: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
7650: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
7660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7670: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
7680: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
7690: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
76a0: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76c0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
76d0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
76e0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
76f0: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
7700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
7710: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
7720: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
7730: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
7740: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
7750: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
7760: 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  mits */.  struct
7770: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
7780: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
7790: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
77a0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
77b0: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
77c0: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
77d0: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
77e0: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
77f0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
7800: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7820: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
7830: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
7840: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
7850: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7860: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
7870: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
7880: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
7890: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
78a0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
78b0: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
78c0: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
78d0: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69  trigger */.  } i
78e0: 6e 69 74 3b 0a 20 20 69 6e 74 20 61 63 74 69 76  nit;.  int activ
78f0: 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20  eVdbeCnt;       
7900: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7910: 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c  f VDBEs currentl
7920: 79 20 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20  y executing */. 
7930: 20 69 6e 74 20 77 72 69 74 65 56 64 62 65 43 6e   int writeVdbeCn
7940: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
7950: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
7960: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 61 72  ve VDBEs that ar
7970: 65 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69  e writing */.  i
7980: 6e 74 20 76 64 62 65 45 78 65 63 43 6e 74 3b 20  nt vdbeExecCnt; 
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
79a0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
79b0: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
79c0: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ec() */.  int nE
79d0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
79e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
79f0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
7a00: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
7a10: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
7a20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
7a30: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
7a40: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
7a50: 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29    void (*xTrace)
7a60: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
7a70: 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  r*);        /* T
7a80: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
7a90: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
7aa0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7ac0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
7ad0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
7ae0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
7af0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
7b00: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
7b10: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
7b20: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
7b30: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
7b60: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
7b70: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
7b80: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
7b90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7ba0: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
7bb0: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7bc0: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
7bd0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
7be0: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
7bf0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7c00: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
7c10: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
7c20: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
7c30: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
7c40: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7c50: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
7c60: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
7c70: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
7c80: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7c90: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
7ca0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
7cb0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
7cc0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
7cd0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
7ce0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
7cf0: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
7d00: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
7d10: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
7d20: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
7d30: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
7d40: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
7d50: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
7d60: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
7d70: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
7d80: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
7d90: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
7da0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
7db0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
7dc0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
7dd0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
7de0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
7df0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
7e00: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
7e10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
7e20: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
7e30: 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20  ssage */.  char 
7e40: 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
7e50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
7e60: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
7e70: 73 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63  ssage (UTF-8 enc
7e80: 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20  oded) */.  char 
7e90: 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20  *zErrMsg16;     
7ea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
7eb0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
7ec0: 73 73 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e  ssage (UTF-16 en
7ed0: 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f  coded) */.  unio
7ee0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
7ef0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
7f00: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
7f10: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
7f20: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
7f30: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
7f40: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
7f50: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
7f60: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
7f70: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
7f80: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
7f90: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
7fa0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
7fb0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7fc0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
7fd0: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
7fe0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
7ff0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
8000: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
8010: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
8040: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
8050: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
8060: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
8070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8080: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
8090: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
80a0: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
80b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
80c0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
80d0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
80e0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
80f0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
8100: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
8110: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
8120: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
8130: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
8140: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
8150: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
8160: 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70   int nProgressOp
8170: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
8180: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
8190: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
81a0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
81b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
81c0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
81d0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
81e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
81f0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
8200: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
8210: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
8220: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
8230: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
8240: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
8250: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
8260: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
8270: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
8280: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
8290: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
82a0: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
82b0: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
82d0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
82e0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
82f0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
8300: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
8310: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
8320: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
8330: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
8340: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
8350: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
8360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
8370: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
8380: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
8390: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
83a0: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
83b0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
83c0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
83d0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
83e0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
83f0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
8400: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
8410: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
8420: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
8430: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
8440: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
8450: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
8460: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
8470: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
8480: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
8490: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
84a0: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
84b0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
84c0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
84d0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
84e0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
84f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8500: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
8510: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
8520: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
8530: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
8540: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8550: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
8560: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
8570: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
8580: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
8590: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
85a0: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
85b0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
85c0: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
85d0: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
85e0: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
85f0: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
8600: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
8610: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
8620: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
8630: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
8640: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
8650: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
8660: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
8670: 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d  C_MASTER .  ** m
8680: 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c  utex, not by sql
8690: 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79  ite3.mutex. They
86a0: 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64   are used by cod
86b0: 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a  e in notify.c. .
86c0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
86d0: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
86e0: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
86f0: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
8700: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
8710: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
8720: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
8730: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
8740: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
8750: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
8760: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
8770: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
8780: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
8790: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
87a0: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
87b0: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
87c0: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
87d0: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
87e0: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
87f0: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
8800: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
8810: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
8820: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
8830: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
8840: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
8850: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
8860: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
8870: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
8880: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88a0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
88b0: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
88c0: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
88d0: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
88e0: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
88f0: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
8900: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
8910: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
8920: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
8930: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
8940: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
8950: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
8960: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
8970: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
8980: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
8990: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  se..*/.#define E
89a0: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
89b0: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
89c0: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
89d0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
89e0: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
89f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
8a00: 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20  TE_VdbeTrace    
8a10: 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a    0x00000001  /*
8a20: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
8a30: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
8a40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8a50: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30  InternChanges  0
8a60: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e  x00000002  /* Un
8a70: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
8a80: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
8a90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
8aa0: 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78  ullColNames   0x
8ab0: 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f  00000004  /* Sho
8ac0: 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61  w full column na
8ad0: 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f  mes on SELECT */
8ae0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8af0: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
8b00: 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 53 68  x00000008  /* Sh
8b10: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
8b20: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
8b30: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
8b40: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
8b50: 31 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  10  /* Count row
8b60: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
8b70: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ba0: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
8bb0: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
8bc0: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bf0: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
8c00: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
8c10: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
8c20: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
8c30: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
8c40: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
8c50: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
8c60: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8c90: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
8ca0: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
8cb0: 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61  ne SQLITE_SqlTra
8cc0: 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30  ce       0x00000
8cd0: 30 34 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72  040  /* Debug pr
8ce0: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
8cf0: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
8d00: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
8d10: 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 30  ting    0x000000
8d20: 38 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  80  /* Debug lis
8d30: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
8d40: 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e  ograms */.#defin
8d50: 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  e SQLITE_WriteSc
8d60: 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 31  hema    0x000001
8d70: 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64  00  /* OK to upd
8d80: 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  ate SQLITE_MASTE
8d90: 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  R */.#define SQL
8da0: 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61  ITE_VdbeAddopTra
8db0: 63 65 20 30 78 30 30 30 30 30 32 30 30 20 20 2f  ce 0x00000200  /
8dc0: 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56  * Trace sqlite3V
8dd0: 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73  dbeAddOp() calls
8de0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8df0: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
8e00: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
8e10: 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20   Do not enforce 
8e20: 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
8e30: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8e40: 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
8e50: 74 65 64 20 30 78 30 30 30 30 38 30 30 20 20 2f  ted 0x0000800  /
8e60: 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63  * For shared-cac
8e70: 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69  he mode */.#defi
8e80: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
8e90: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 31  FileFmt  0x00001
8ea0: 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  000  /* Create n
8eb0: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
8ec0: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
8ed0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
8ee0: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
8ef0: 32 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  2000  /* Use ful
8f00: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
8f10: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
8f20: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
8f30: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 34 30  lFSync  0x000040
8f40: 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  00  /* Use full 
8f50: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
8f60: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
8f70: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
8f80: 6f 64 65 20 20 20 30 78 30 30 30 30 38 30 30 30  ode   0x00008000
8f90: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
8fa0: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
8fb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
8fc0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
8fd0: 31 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  10000  /* Revers
8fe0: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
8ff0: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
9000: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
9010: 73 20 20 20 20 30 78 30 30 30 32 30 30 30 30 20  s    0x00020000 
9020: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
9030: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
9040: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9050: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
9060: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e  x00040000  /* En
9070: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
9080: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
9090: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
90a0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
90b0: 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45  0x00080000  /* E
90c0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
90d0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
90e0: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
90f0: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 31 30 30  Builtin  0x00100
9100: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
9110: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
9120: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
9130: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
9140: 73 69 6f 6e 20 20 30 78 30 30 32 30 30 30 30 30  sion  0x00200000
9150: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
9160: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
9170: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61  efine SQLITE_Ena
9180: 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30  bleTrigger  0x00
9190: 34 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20  400000  /* True 
91a0: 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65  to enable trigge
91b0: 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  rs */../*.** Bit
91c0: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
91d0: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
91e0: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
91f0: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
9200: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
9210: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
9220: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
9230: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
9240: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
9250: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
9260: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
9270: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
9280: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
9290: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
92a0: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64  flattening */.#d
92b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c  efine SQLITE_Col
92c0: 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30  umnCache    0x00
92d0: 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63  02   /* Column c
92e0: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
92f0: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
9300: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
9310: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
9320: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
9330: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
9340: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
9350: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
9360: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64   factoring */.#d
9370: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 64 78  efine SQLITE_Idx
9380: 52 65 61 6c 41 73 49 6e 74 20 20 20 30 78 30 30  RealAsInt   0x00
9390: 31 30 20 20 20 2f 2a 20 53 74 6f 72 65 20 52 45  10   /* Store RE
93a0: 41 4c 20 61 73 20 49 4e 54 20 69 6e 20 69 6e 64  AL as INT in ind
93b0: 69 63 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ices */.#define 
93c0: 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f  SQLITE_DistinctO
93d0: 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f  pt    0x0020   /
93e0: 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67  * DISTINCT using
93f0: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
9400: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72  ine SQLITE_Cover
9410: 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30  IdxScan   0x0040
9420: 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69     /* Covering i
9430: 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64  ndex scans */.#d
9440: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64  efine SQLITE_Ord
9450: 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30  erByIdxJoin 0x00
9460: 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59  80   /* ORDER BY
9470: 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e   of joins via in
9480: 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
9490: 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74  QLITE_SubqCorout
94a0: 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a  ine  0x0100   /*
94b0: 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65   Evaluate subque
94c0: 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e  ries as coroutin
94d0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
94e0: 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20  LITE_Transitive 
94f0: 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20      0x0200   /* 
9500: 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74  Transitive const
9510: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
9520: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
9530: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
9540: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
9550: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
9560: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
9570: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
9580: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
9590: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
95a0: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e  isabled..*/.#ifn
95b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
95c0: 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65  BUILTIN_TEST.#de
95d0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
95e0: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
95f0: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
9600: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
9610: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
9620: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
9630: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
9640: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
9650: 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65  mask))==0).#else
9660: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
9670: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
9680: 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69  , mask)  0.#defi
9690: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
96a0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
96b0: 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     1.#endif../*.
96c0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
96d0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
96e0: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
96f0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
9700: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
9710: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
9720: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
9730: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
9740: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
9750: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
9760: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
9770: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
9780: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
9790: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
97a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
97b0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
97c0: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
97d0: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
97e0: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
97f0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
9800: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
9810: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
9820: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
9830: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9840: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
9850: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
9860: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
9870: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
9880: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9890: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
98a0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
98b0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
98c0: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
98d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
98e0: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
98f0: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
9900: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
9910: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
9920: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
9930: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
9940: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
9950: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
9960: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20  * structure.  A 
9970: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
9980: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f  structure is sto
9990: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
99a0: 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20  e.aFunc.** hash 
99b0: 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c  table.  When mul
99c0: 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  tiple functions 
99d0: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61  have the same na
99e0: 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62  me, the hash tab
99f0: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20  le.** points to 
9a00: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
9a10: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
9a20: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
9a30: 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72  cDef {.  i16 nAr
9a40: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
9a50: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
9a60: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
9a70: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
9a80: 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20 20  8 iPrefEnc;     
9a90: 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65 64      /* Preferred
9aa0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 28   text encoding (
9ab0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36 4c  SQLITE_UTF8, 16L
9ac0: 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75 38  E, 16BE) */.  u8
9ad0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
9ae0: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
9af0: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
9b00: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
9b10: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
9b20: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
9b30: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
9b40: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
9b50: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
9b60: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
9b70: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
9b80: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
9b90: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
9ba0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
9bb0: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
9bc0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
9bd0: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
9be0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
9bf0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
9c00: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
9c10: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
9c20: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
9c30: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
9c40: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
9c50: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
9c60: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
9c70: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
9c80: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
9c90: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
9ca0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
9cb0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
9cc0: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
9cd0: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
9ce0: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
9cf0: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
9d00: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
9d10: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
9d20: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
9d30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
9d40: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
9d50: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
9d60: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
9d70: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
9d80: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
9d90: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
9da0: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
9db0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
9dc0: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
9dd0: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
9de0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
9df0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
9e00: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
9e10: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
9e20: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
9e30: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
9e40: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
9e50: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
9e60: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
9e70: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
9e80: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
9e90: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
9ea0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
9eb0: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
9ec0: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
9ed0: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
9ee0: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
9ef0: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
9f00: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
9f10: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
9f20: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
9f30: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
9f40: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
9f50: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
9f60: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
9f70: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
9f80: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
9f90: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
9fa0: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
9fb0: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
9fc0: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
9fd0: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
9fe0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
9ff0: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
a000: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
a010: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
a020: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
a030: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
a040: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
a050: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
a060: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
a070: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
a080: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
a090: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
a0a0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
a0b0: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
a0c0: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
a0d0: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
a0e0: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
a0f0: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
a100: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
a110: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
a120: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
a130: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
a140: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
a150: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
a160: 4b 45 20 20 20 20 20 30 78 30 31 20 2f 2a 20 43  KE     0x01 /* C
a170: 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65  andidate for the
a180: 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69   LIKE optimizati
a190: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
a1a0: 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20  LITE_FUNC_CASE  
a1b0: 20 20 20 30 78 30 32 20 2f 2a 20 43 61 73 65 2d     0x02 /* Case-
a1c0: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
a1d0: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
a1e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a1f0: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
a200: 34 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  4 /* Ephemeral. 
a210: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
a220: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
a230: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
a240: 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c 69 74 65  L 0x08 /* sqlite
a250: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
a260: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
a270: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
a280: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
a290: 20 20 30 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d    0x10 /* Built-
a2a0: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
a2b0: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
a2c0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
a2d0: 4c 45 53 43 45 20 30 78 32 30 20 2f 2a 20 42 75  LESCE 0x20 /* Bu
a2e0: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
a2f0: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66 75  ) or ifnull() fu
a300: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a310: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
a320: 4e 47 54 48 20 20 20 30 78 34 30 20 2f 2a 20 42  NGTH   0x40 /* B
a330: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
a340: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a350: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a360: 5f 54 59 50 45 4f 46 20 20 20 30 78 38 30 20 2f  _TYPEOF   0x80 /
a370: 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f  * Built-in typeo
a380: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  f() function */.
a390: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
a3a0: 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
a3b0: 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
a3c0: 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
a3d0: 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
a3e0: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
a3f0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
a400: 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
a410: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
a420: 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
a430: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
a440: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
a450: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
a460: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
a470: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
a480: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
a490: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c  ame .**     impl
a4a0: 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e  emented by C fun
a4b0: 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74  ction xFunc that
a4c0: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
a4d0: 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20  guments. The.** 
a4e0: 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64      value passed
a4f0: 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74   as iArg is cast
a500: 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e   to a (void*) an
a510: 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  d made available
a520: 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75  .**     as the u
a530: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
a540: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66  3_user_data()) f
a550: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  or the function.
a560: 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75   If .**     argu
a570: 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
a580: 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
a590: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
a5a0: 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
a5b0: 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a  **   AGGREGATE(z
a5c0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
a5d0: 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46  , bNC, xStep, xF
a5e0: 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65  inal).**     Use
a5f0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
a600: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
a610: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
a620: 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
a630: 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
a640: 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
a650: 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
a660: 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
a670: 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
a680: 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
a690: 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
a6a0: 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
a6b0: 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
a6c0: 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
a6d0: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
a6e0: 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
a6f0: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
a700: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
a710: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
a720: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
a730: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
a740: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
a750: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
a760: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
a770: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a  y a call to C .*
a780: 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
a790: 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
a7a0: 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
a7b0: 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
a7c0: 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
a7d0: 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
a7e0: 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
a7f0: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
a800: 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
a810: 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
a820: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
a830: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
a840: 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
a850: 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
a860: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
a870: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
a880: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
a890: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
a8a0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28  , SQLITE_UTF8, (
a8b0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
a8c0: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
a8d0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
a8e0: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
a8f0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
a900: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46   0, 0}.#define F
a910: 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20  UNCTION2(zName, 
a920: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
a930: 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61   xFunc, extraFla
a940: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
a950: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
a960: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
a970: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
a980: 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
a990: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
a9a0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
a9b0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
a9c0: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
a9d0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
a9e0: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
a9f0: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
aa00: 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53  LITE_UTF8, bNC*S
aa10: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
aa20: 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  OLL, \.   pArg, 
aa30: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
aa40: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
aa50: 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a  efine LIKEFUNC(z
aa60: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
aa70: 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72   flags) \.  {nAr
aa80: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g, SQLITE_UTF8, 
aa90: 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29 61  flags, (void *)a
aaa0: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
aab0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
aac0: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  , 0}.#define AGG
aad0: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
aae0: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
aaf0: 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20  ep, xFinal) \.  
ab00: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
ab10: 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8, nc*SQLITE_FU
ab20: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20  NC_NEEDCOLL, \. 
ab30: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
ab40: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
ab50: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
ab60: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
ab70: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
ab80: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
ab90: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
aba0: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
abb0: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
abc0: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
abd0: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
abe0: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
abf0: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
ac00: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
ac10: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
ac20: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
ac30: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
ac40: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
ac50: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
ac60: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
ac70: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac90: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
aca0: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
acb0: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
acc0: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
acf0: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
ad00: 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  ons */.  Savepoi
ad10: 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ad30: 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
ad40: 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
ad50: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
ad60: 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
ad70: 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
ad80: 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
ad90: 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
ada0: 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
adb0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
adc0: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
add0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
ade0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
adf0: 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
ae00: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
ae10: 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
ae20: 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
ae30: 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
ae40: 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
ae50: 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
ae60: 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
ae70: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
ae80: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
ae90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
aea0: 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
aeb0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
aec0: 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
aed0: 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
aee0: 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
aef0: 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
af00: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
af10: 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
af20: 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
af30: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
af40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
af50: 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
af60: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
af70: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af90: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
afa0: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
afb0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
afc0: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
afd0: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
afe0: 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
aff0: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
b000: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
b010: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
b020: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
b030: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
b040: 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
b050: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
b060: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
b070: 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
b080: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
b090: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
b0a0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70   column */.  Exp
b0b0: 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
b0c0: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
b0d0: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
b0e0: 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20  .  char *zDflt; 
b0f0: 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
b100: 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66 61  text of the defa
b110: 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63  ult value */.  c
b120: 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20  har *zType;     
b130: 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f 72  /* Data type for
b140: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
b150: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
b160: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
b170: 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
b180: 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
b190: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
b1a0: 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
b1b0: 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
b1c0: 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
b1d0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
b1e0: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
b1f0: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
b200: 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
b210: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 63  alues */.  u16 c
b220: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 42  olFlags;    /* B
b230: 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
b240: 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
b250: 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
b260: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
b270: 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
b280: 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
b290: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
b2a0: 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
b2b0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
b2c0: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
b2d0: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
b2e0: 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
b2f0: 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
b300: 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
b310: 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
b320: 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ble */../*.** A 
b330: 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65  "Collating Seque
b340: 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20  nce" is defined 
b350: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
b360: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
b370: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f  ** structure. Co
b380: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f  nceptually, a co
b390: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b3a0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e   consists of a n
b3b0: 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d  ame and.** a com
b3c0: 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20  parison routine 
b3d0: 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
b3e0: 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73   order of that s
b3f0: 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49  equence..**.** I
b400: 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69  f CollSeq.xCmp i
b410: 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73  s NULL, it means
b420: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c   that the.** col
b430: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
b440: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49  is undefined.  I
b450: 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20  ndices built on 
b460: 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20  an undefined.** 
b470: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
b480: 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65  ce may not be re
b490: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a  ad or written..*
b4a0: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  /.struct CollSeq
b4b0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
b4c0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
b4d0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
b4e0: 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54  ing sequence, UT
b4f0: 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
b500: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
b510: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
b520: 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
b530: 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76  by xCmp() */.  v
b540: 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
b550: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
b560: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29  gument to xCmp()
b570: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70   */.  int (*xCmp
b580: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
b590: 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  st void*, int, c
b5a0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
b5b0: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
b5c0: 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74  *);  /* Destruct
b5d0: 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a  or for pUser */.
b5e0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74  };../*.** A sort
b5f0: 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69   order can be ei
b600: 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
b610: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b620: 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20  ITE_SO_ASC      
b630: 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   0  /* Sort in a
b640: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
b650: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b660: 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20  _SO_DESC      1 
b670: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
b680: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a  nding order */..
b690: 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
b6a0: 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
b6b0: 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
b6c0: 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
b6d0: 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
b6e0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
b6f0: 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
b700: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
b710: 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
b720: 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
b730: 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
b740: 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
b750: 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
b760: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
b770: 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a  nsecutively.  .*
b780: 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
b790: 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
b7a0: 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
b7b0: 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61 74   with 'a'.  That
b7c0: 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
b7d0: 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
b7e0: 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
b7f0: 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
b800: 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
b810: 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
b820: 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
b830: 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
b840: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
b850: 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
b860: 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
b870: 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
b880: 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
b890: 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
b8a0: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
b8b0: 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65  mparison..*/.#de
b8c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b8d0: 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64 65  TEXT     'a'.#de
b8e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b8f0: 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65  NONE     'b'.#de
b900: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b910: 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65  NUMERIC  'c'.#de
b920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b930: 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64 65  INTEGER  'd'.#de
b940: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b950: 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64  REAL     'e'..#d
b960: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
b970: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
b980: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
b990: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
b9a0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
b9b0: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
b9c0: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
b9d0: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
b9e0: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
b9f0: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
ba00: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
ba10: 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a  SK     0x67../*.
ba20: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
ba30: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
ba40: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
ba50: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
ba60: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
ba70: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a  he affinity..*/.
ba80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
ba90: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38  UMPIFNULL   0x08
baa0: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
bab0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
bac0: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
bad0: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
bae0: 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f      0x10  /* Sto
baf0: 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
bb00: 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
bb10: 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
bb20: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
bb30: 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
bb40: 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  LL=NULL */../*.*
bb50: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
bb60: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
bb70: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
bb80: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
bb90: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
bba0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a  abase schema. .*
bbb0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
bbc0: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
bbd0: 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
bbe0: 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
bbf0: 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
bc00: 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
bc10: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
bc20: 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
bc30: 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
bc40: 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
bc50: 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
bc60: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
bc70: 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
bc80: 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
bc90: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
bca0: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
bcb0: 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
bcc0: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
bcd0: 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70  al table .** imp
bce0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
bcf0: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
bd00: 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
bd10: 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a  ared between .**
bd20: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
bd30: 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
bd40: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
bd50: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
bd60: 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69  ase .** schema i
bd70: 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
bd80: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bd90: 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
bda0: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
bdb0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
bdc0: 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
bdd0: 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
bde0: 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
bdf0: 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
be00: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
be10: 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
be20: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
be30: 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
be40: 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
be50: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
be60: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
be70: 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
be80: 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e  ables .** within
be90: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
bea0: 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
beb0: 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
bec0: 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72  e callers .** tr
bed0: 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
bee0: 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
bef0: 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
bf00: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
bf10: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
bf20: 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
bf30: 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
bf40: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
bf50: 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
bf60: 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
bf70: 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
bf80: 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
bf90: 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
bfa0: 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
bfb0: 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
bfc0: 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
bfd0: 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
bfe0: 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
bff0: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
c000: 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
c010: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
c020: 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
c030: 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
c040: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
c050: 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
c060: 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
c070: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
c080: 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
c090: 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
c0a0: 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
c0b0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
c0c0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
c0d0: 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
c0e0: 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
c0f0: 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
c100: 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
c110: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
c120: 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
c130: 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
c140: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
c150: 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
c160: 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
c170: 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
c180: 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
c190: 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
c1a0: 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
c1b0: 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
c1c0: 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  ot .** deleted a
c1d0: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
c1e0: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
c1f0: 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
c200: 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61  ()ed .** immedia
c210: 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
c220: 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
c230: 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
c240: 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
c250: 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
c260: 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
c270: 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
c280: 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
c290: 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
c2a0: 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
c2b0: 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
c2c0: 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
c2d0: 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20  isconnected .** 
c2e0: 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
c2f0: 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
c300: 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
c310: 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
c320: 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
c330: 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
c340: 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
c350: 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
c360: 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
c370: 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
c380: 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
c390: 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
c3a0: 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
c3b0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
c3c0: 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
c3d0: 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
c3e0: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
c3f0: 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
c400: 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
c410: 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
c420: 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
c430: 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
c440: 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
c450: 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
c460: 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
c470: 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73  located by .** s
c480: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
c490: 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
c4a0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
c4b0: 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
c4c0: 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72  b as .** the fir
c4d0: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
c4e0: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
c4f0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
c500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c510: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
c520: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
c530: 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
c540: 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c560: 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
c570: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
c580: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
c590: 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
c5a0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
c5b0: 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
c5c0: 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
c5d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c5e0: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
c5f0: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
c600: 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
c610: 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
c620: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
c630: 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
c640: 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
c650: 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
c660: 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
c670: 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
c680: 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
c690: 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
c6a0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
c6b0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
c6c0: 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
c6d0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61  *.** Each SQL ta
c6e0: 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
c6f0: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
c700: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
c710: 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  he.** following 
c720: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
c730: 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20   Table.zName is 
c740: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
c750: 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65  table.  The case
c760: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
c770: 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45  .** CREATE TABLE
c780: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
c790: 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20 69  ored, but case i
c7a0: 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e  s not significan
c7b0: 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69  t for.** compari
c7c0: 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  sons..**.** Tabl
c7d0: 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75  e.nCol is the nu
c7e0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
c7f0: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20  in this table.  
c800: 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a  Table.aCol is a.
c810: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e  ** pointer to an
c820: 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e   array of Column
c830: 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65   structures, one
c840: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
c850: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74  ..**.** If the t
c860: 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45  able has an INTE
c870: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
c880: 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65   then Table.iPKe
c890: 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  y is the index o
c8a0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20  f.** the column 
c8b0: 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65 79  that is that key
c8c0: 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54 61  .   Otherwise Ta
c8d0: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67  ble.iPKey is neg
c8e0: 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20  ative.  Note.** 
c8f0: 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79 70  that the datatyp
c900: 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  e of the PRIMARY
c910: 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54   KEY must be INT
c920: 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66 69  EGER for this fi
c930: 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74  eld to.** be set
c940: 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52  .  An INTEGER PR
c950: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73 65  IMARY KEY is use
c960: 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 66  d as the rowid f
c970: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a  or each row of.*
c980: 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  * the table.  If
c990: 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20   a table has no 
c9a0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c9b0: 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64  KEY, then a rand
c9c0: 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67  om rowid.** is g
c9d0: 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61 63  enerated for eac
c9e0: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
c9f0: 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61  le.  TF_HasPrima
ca00: 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a  ryKey is set if.
ca10: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  ** the table has
ca20: 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59   any PRIMARY KEY
ca30: 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68  , INTEGER or oth
ca40: 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  erwise..**.** Ta
ca50: 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20  ble.tnum is the 
ca60: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
ca70: 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70  the root BTree p
ca80: 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
ca90: 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   in the.** datab
caa0: 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61  ase file.  If Ta
cab0: 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20 69  ble.iDb is the i
cac0: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
cad0: 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65  base table backe
cae0: 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e  nd.** in sqlite.
caf0: 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72  aDb[].  0 is for
cb00: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
cb10: 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20  se and 1 is for 
cb20: 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a  the file that.**
cb30: 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79   holds temporary
cb40: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
cb50: 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65  ces.  If TF_Ephe
cb60: 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20  meral is set.** 
cb70: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
cb80: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69  s stored in a fi
cb90: 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d  le that is autom
cba0: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
cbb0: 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42  .** when the VDB
cbc0: 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  E cursor to the 
cbd0: 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
cbe0: 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 54    In this case T
cbf0: 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65  able.tnum .** re
cc00: 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f 72  fers VDBE cursor
cc10: 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c   number that hol
cc20: 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65  ds the table ope
cc30: 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f  n, not to the ro
cc40: 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65  ot.** page numbe
cc50: 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61  r.  Transient ta
cc60: 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  bles are used to
cc70: 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74   hold the result
cc80: 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75  s of a.** sub-qu
cc90: 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72 73  ery that appears
cca0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65   instead of a re
ccb0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  al table name in
ccc0: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
ccd0: 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54   .** of a SELECT
cce0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
ccf0: 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
cd00: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
cd10: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
cd20: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
cd30: 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
cd40: 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
cd50: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
cd60: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
cd70: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
cd80: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
cd90: 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
cda0: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
cdb0: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
cdc0: 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
cdd0: 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
cde0: 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
cdf0: 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
ce00: 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
ce10: 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
ce20: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
ce30: 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
ce40: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
ce50: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
ce60: 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
ce70: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
ce80: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
ce90: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cea0: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45  E_OMIT_CHECK.  E
ceb0: 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
cec0: 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
ced0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
cee0: 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e 74  #endif.  tRowcnt
cef0: 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a   nRowEst;     /*
cf00: 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
cf10: 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
cf20: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
cf30: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  le */.  int tnum
cf40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
cf50: 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20  Root BTree node 
cf60: 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28  for this table (
cf70: 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20  see note above) 
cf80: 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
cf90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
cfa0: 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
cfb0: 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
cfc0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
cfd0: 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
cfe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cff0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
d000: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
d010: 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
d020: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d030: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
d040: 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
d050: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
d060: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
d070: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
d080: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
d090: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
d0a0: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
d0b0: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
d0c0: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
d0d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d0e0: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
d0f0: 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
d100: 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
d110: 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
d120: 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
d130: 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
d140: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d150: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d160: 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
d170: 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
d180: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
d190: 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
d1a0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
d1b0: 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78  duleArg;  /* Tex
d1c0: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
d1d0: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
d1e0: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54  ule name */.  VT
d1f0: 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
d200: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
d210: 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
d220: 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
d230: 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
d240: 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
d250: 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
d260: 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
d270: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
d280: 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
d290: 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
d2a0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
d2b0: 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
d2c0: 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
d2d0: 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
d2e0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
d2f0: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
d300: 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a   Tabe.tabFlags..
d310: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
d320: 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
d330: 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
d340: 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
d350: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
d360: 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
d370: 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
d380: 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
d390: 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
d3a0: 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
d3b0: 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
d3c0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
d3d0: 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
d3e0: 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
d3f0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
d400: 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
d410: 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
d420: 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
d430: 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
d440: 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
d450: 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a   table */.../*.*
d460: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
d470: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
d480: 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
d490: 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
d4a0: 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
d4b0: 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
d4c0: 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
d4d0: 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
d4e0: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
d4f0: 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
d500: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
d510: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
d520: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d530: 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
d540: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
d550: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
d560: 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
d570: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
d580: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
d590: 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
d5a0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
d5b0: 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
d5c0: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
d5d0: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
d5e0: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
d5f0: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  X) 0.#endif../*.
d600: 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
d610: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
d620: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
d630: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
d640: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
d650: 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
d660: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
d670: 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
d680: 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
d690: 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
d6a0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
d6b0: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
d6c0: 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
d6d0: 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
d6e0: 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
d6f0: 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
d700: 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
d710: 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
d720: 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
d730: 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
d740: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
d750: 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
d760: 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
d770: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
d780: 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
d790: 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
d7a0: 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
d7b0: 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
d7c0: 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
d7d0: 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
d7e0: 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
d7f0: 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
d800: 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a  le is "ex2"..**.
d810: 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
d820: 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
d830: 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
d840: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
d850: 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
d860: 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
d870: 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
d880: 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
d890: 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
d8a0: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
d8b0: 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
d8c0: 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
d8d0: 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
d8e0: 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
d8f0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
d900: 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
d910: 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
d920: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
d930: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
d940: 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
d950: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
d960: 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72  om;  /* Next for
d970: 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f  eign key in pFro
d980: 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
d990: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
d9a0: 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
d9b0: 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
d9c0: 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
d9d0: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
d9e0: 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f  o;    /* Next fo
d9f0: 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62  reign key on tab
da00: 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a  le named zTo */.
da10: 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
da20: 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
da30: 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74  foreign key on t
da40: 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a  able named zTo *
da50: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
da60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
da70: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
da80: 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
da90: 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
daa0: 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
dab0: 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  red;    /* True 
dac0: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
dad0: 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
dae0: 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
daf0: 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
db00: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ];          /* O
db10: 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
db20: 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
db30: 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
db40: 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
db50: 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69  gger[2];  /* Tri
db60: 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
db70: 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
db80: 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
db90: 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66  {  /* Mapping of
dba0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
dbb0: 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
dbc0: 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
dbd0: 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  From;         /*
dbe0: 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
dbf0: 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
dc00: 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
dc10: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
dc20: 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
dc30: 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59 20  f 0 use PRIMARY 
dc40: 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
dc50: 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  1];        /* On
dc60: 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
dc70: 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20   of nCol column 
dc80: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
dc90: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
dca0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
dcb0: 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
dcc0: 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
dcd0: 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
dce0: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
dcf0: 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
dd00: 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
dd10: 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
dd20: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
dd30: 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
dd40: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
dd50: 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
dd60: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
dd70: 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
dd80: 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
dd90: 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
dda0: 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
ddb0: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
ddc0: 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
ddd0: 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
dde0: 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
ddf0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
de00: 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
de10: 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
de20: 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
de30: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
de40: 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
de50: 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
de60: 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
de70: 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
de80: 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
de90: 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
dea0: 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
deb0: 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
dec0: 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
ded0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
dee0: 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
def0: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
df00: 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
df10: 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
df20: 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
df30: 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
df40: 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
df50: 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
df60: 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
df70: 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
df80: 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
df90: 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
dfa0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
dfb0: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
dfc0: 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
dfd0: 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
dfe0: 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
dff0: 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
e000: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
e010: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
e020: 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
e030: 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
e040: 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
e050: 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
e060: 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
e070: 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
e080: 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
e090: 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
e0a0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
e0b0: 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
e0c0: 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
e0d0: 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
e0e0: 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
e0f0: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
e100: 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
e110: 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
e120: 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
e130: 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
e140: 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
e150: 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
e160: 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
e170: 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
e180: 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
e190: 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66  ey..** .** The f
e1a0: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
e1b0: 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
e1c0: 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
e1d0: 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
e1e0: 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
e1f0: 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
e200: 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
e210: 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
e220: 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
e230: 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
e240: 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
e250: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
e260: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
e270: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
e280: 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
e290: 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
e2a0: 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
e2b0: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
e2c0: 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
e2d0: 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
e2e0: 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
e2f0: 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
e300: 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
e310: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
e320: 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
e330: 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
e340: 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
e350: 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
e360: 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
e370: 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
e380: 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
e390: 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
e3a0: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
e3b0: 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
e3c0: 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
e3d0: 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
e3e0: 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
e3f0: 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
e400: 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
e410: 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
e420: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
e430: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
e440: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
e450: 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
e460: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
e470: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
e480: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
e490: 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
e4a0: 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
e4b0: 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
e4c0: 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
e4d0: 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77 68 61  t  99  /* Do wha
e4e0: 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
e4f0: 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
e500: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
e510: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
e520: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
e530: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
e540: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
e550: 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
e560: 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
e570: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
e580: 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69   the .** compari
e590: 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
e5a0: 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74  ndex keys..*/.st
e5b0: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
e5c0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
e5d0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
e5e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
e5f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
e600: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
e610: 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
e620: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
e630: 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
e640: 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
e650: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e660: 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c  entries in aColl
e670: 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  [] */.  u8 *aSor
e680: 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53  tOrder;     /* S
e690: 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61  ort order for ea
e6a0: 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20  ch column.  May 
e6b0: 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c  be NULL */.  Col
e6c0: 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
e6d0: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
e6e0: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
e6f0: 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
e700: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
e710: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e720: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
e730: 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
e740: 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a  ation about a.**
e750: 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65   single index re
e760: 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
e770: 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65  ready been parse
e780: 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
e790: 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e  idual.** values.
e7a0: 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
e7b0: 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
e7c0: 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
e7d0: 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
e7e0: 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
e7f0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
e800: 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
e810: 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
e820: 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
e830: 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
e840: 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
e850: 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
e860: 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
e870: 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
e880: 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
e890: 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
e8a0: 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
e8b0: 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
e8c0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  pcode..**.** Thi
e8d0: 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  s structure hold
e8e0: 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  s a record that 
e8f0: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
e900: 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a   disassembled.**
e910: 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69   into its consti
e920: 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f  tuent fields..*/
e930: 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
e940: 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
e950: 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
e960: 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
e970: 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
e980: 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
e990: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
e9a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
e9b0: 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
e9c0: 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20  */.  u8 flags;  
e9d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c           /* Bool
e9e0: 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20 55  ean settings.  U
e9f0: 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f  NPACKED_... belo
ea00: 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64  w */.  i64 rowid
ea10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  ;          /* Us
ea20: 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f 50  ed by UNPACKED_P
ea30: 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a  REFIX_SEARCH */.
ea40: 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
ea50: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
ea60: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
ea70: 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20 55  owed values of U
ea80: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c  npackedRecord.fl
ea90: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ags.*/.#define U
eaa0: 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
eab0: 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 4d        0x01  /* M
eac0: 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e 20  ake this key an 
ead0: 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a  epsilon larger *
eae0: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
eaf0: 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 20  ED_PREFIX_MATCH 
eb00: 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72 65 66   0x02  /* A pref
eb10: 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e 73  ix match is cons
eb20: 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65  idered OK */.#de
eb30: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52  fine UNPACKED_PR
eb40: 45 46 49 58 5f 53 45 41 52 43 48 20 30 78 30 34  EFIX_SEARCH 0x04
eb50: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61    /* Ignore fina
eb60: 6c 20 28 72 6f 77 69 64 29 20 66 69 65 6c 64 20  l (rowid) field 
eb70: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
eb80: 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
eb90: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
eba0: 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
ebb0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
ebc0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
ebd0: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
ebe0: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
ebf0: 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
ec00: 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
ec10: 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
ec20: 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
ec30: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
ec40: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
ec50: 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
ec60: 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
ec70: 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
ec80: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
ec90: 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
eca0: 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
ecb0: 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
ecc0: 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
ecd0: 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
ece0: 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
ecf0: 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
ed00: 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
ed10: 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
ed20: 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
ed30: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
ed40: 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
ed50: 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
ed60: 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
ed70: 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
ed80: 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
ed90: 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
eda0: 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
edb0: 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
edc0: 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
edd0: 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
ede0: 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74  se the .** first
edf0: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
ee00: 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61  dexed (c3) has a
ee10: 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20  n index of 2 in 
ee20: 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54  Ex1.aCol[]..** T
ee30: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
ee40: 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
ee50: 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c1) has an index
ee60: 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e   of 0 in.** Ex1.
ee70: 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78  aCol[], hence Ex
ee80: 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30  2.aiColumn[1]==0
ee90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65  ..**.** The Inde
eea0: 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20  x.onError field 
eeb0: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
eec0: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e  er or not the in
eed0: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  dexed columns.**
eee0: 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20   must be unique 
eef0: 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69  and what to do i
ef00: 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20  f they are not. 
ef10: 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72   When Index.onEr
ef20: 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20  ror=OE_None,.** 
ef30: 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73  it means this is
ef40: 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e   not a unique in
ef50: 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20  dex.  Otherwise 
ef60: 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69  it is a unique i
ef70: 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ndex.** and the 
ef80: 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f  value of Index.o
ef90: 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20  nError indicate 
efa0: 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69  the which confli
efb0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a  ct resolution .*
efc0: 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
efd0: 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
efe0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
eff0: 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
f000: 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
f010: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ent..*/.struct I
f020: 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
f030: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
f040: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
f050: 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  s index */.  int
f060: 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
f070: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
f080: 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
f090: 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
f0a0: 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 74 52  1st is 0 */.  tR
f0b0: 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b  owcnt *aiRowEst;
f0c0: 20 20 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41         /* From A
f0d0: 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
f0e0: 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
f0f0: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
f100: 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
f110: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
f120: 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
f130: 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
f140: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
f150: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
f160: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
f170: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
f180: 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
f190: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
f1a0: 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
f1b0: 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
f1c0: 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
f1d0: 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
f1e0: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
f1f0: 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
f200: 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
f210: 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
f220: 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
f230: 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
f240: 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
f250: 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
f260: 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20  har **azColl;   
f270: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
f280: 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
f290: 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
f2a0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
f2b0: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
f2c0: 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
f2d0: 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
f2e0: 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
f2f0: 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
f300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f310: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f320: 20 69 6e 20 74 61 62 6c 65 20 75 73 65 64 20 62   in table used b
f330: 79 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  y this index */.
f340: 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
f350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
f360: 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
f370: 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
f380: 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
f390: 6e 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64 65  nsigned autoInde
f3a0: 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  x:2;    /* 1==UN
f3b0: 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
f3c0: 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
f3d0: 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
f3e0: 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
f3f0: 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
f400: 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
f410: 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
f420: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
f430: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 20 20  _ENABLE_STAT3.  
f440: 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
f450: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f460: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
f470: 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
f480: 20 74 52 6f 77 63 6e 74 20 61 76 67 45 71 3b 20   tRowcnt avgEq; 
f490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65            /* Ave
f4a0: 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 20 66  rage nEq value f
f4b0: 6f 72 20 6b 65 79 20 76 61 6c 75 65 73 20 6e 6f  or key values no
f4c0: 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
f4d0: 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
f4e0: 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
f4f0: 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
f500: 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65  t-most key */.#e
f510: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  ndif.};../*.** E
f520: 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
f530: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
f540: 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
f550: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
f560: 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61  mory .** using a
f570: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
f580: 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
f590: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
f5a0: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
f5b0: 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
f5c0: 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
f5d0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f5e0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
f5f0: 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e 69  exSample {.  uni
f600: 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
f610: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
f620: 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53 51  e if eType is SQ
f630: 4c 49 54 45 5f 54 45 58 54 20 6f 72 20 53 51 4c  LITE_TEXT or SQL
f640: 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20 20  ITE_BLOB */.    
f650: 64 6f 75 62 6c 65 20 72 3b 20 20 20 20 20 20 20  double r;       
f660: 2f 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79 70  /* Value if eTyp
f670: 65 20 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f 41  e is SQLITE_FLOA
f680: 54 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 3b 20  T */.    i64 i; 
f690: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
f6a0: 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53 51  e if eType is SQ
f6b0: 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2a 2f 0a  LITE_INTEGER */.
f6c0: 20 20 7d 20 75 3b 0a 20 20 75 38 20 65 54 79 70    } u;.  u8 eTyp
f6d0: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51  e;         /* SQ
f6e0: 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49 54  LITE_NULL, SQLIT
f6f0: 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e 20 65 74  E_INTEGER ... et
f700: 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  c. */.  int nByt
f710: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  e;        /* Siz
f720: 65 20 69 6e 20 62 79 74 65 20 6f 66 20 74 65 78  e in byte of tex
f730: 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a 20 20  t or blob. */.  
f740: 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20 20 20 20  tRowcnt nEq;    
f750: 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
f760: 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
f770: 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
f780: 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
f790: 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20 20 20 20  Rowcnt nLt;     
f7a0: 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
f7b0: 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
f7c0: 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
f7d0: 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
f7e0: 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b 20 20 20  tRowcnt nDLt;   
f7f0: 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
f800: 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
f810: 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
f820: 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
f830: 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
f840: 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
f850: 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
f860: 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
f870: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
f880: 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
f890: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
f8a0: 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
f8b0: 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
f8c0: 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
f8d0: 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
f8e0: 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
f8f0: 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
f900: 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
f910: 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
f920: 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
f930: 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
f940: 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
f950: 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
f960: 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
f970: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
f980: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
f990: 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
f9a0: 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
f9b0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
f9c0: 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
f9d0: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
f9e0: 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
f9f0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
fa00: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
fa10: 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
fa20: 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
fa30: 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
fa40: 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
fa50: 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
fa60: 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
fa70: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
fa80: 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
fa90: 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
faa0: 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
fab0: 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
fac0: 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
fad0: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
fae0: 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
faf0: 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
fb00: 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
fb10: 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
fb20: 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
fb30: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
fb40: 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
fb50: 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
fb60: 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
fb70: 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
fb80: 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
fb90: 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
fba0: 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
fbb0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
fbc0: 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
fbd0: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
fbe0: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
fbf0: 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
fc00: 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
fc10: 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
fc20: 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
fc30: 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
fc40: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
fc50: 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
fc60: 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
fc70: 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
fc80: 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
fc90: 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
fca0: 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcc0: 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
fcd0: 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
fce0: 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
fcf0: 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
fd00: 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
fd10: 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
fd20: 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
fd30: 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
fd40: 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd60: 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
fd70: 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
fd80: 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
fd90: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
fda0: 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
fdb0: 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
fdc0: 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
fdd0: 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75  xPTab;     /* Cu
fde0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  rsor number of p
fdf0: 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
fe00: 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c   int nSortingCol
fe10: 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
fe20: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
fe30: 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
fe40: 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ex */.  ExprList
fe50: 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
fe60: 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20  /* The group by 
fe70: 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
fe80: 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
fe90: 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
fea0: 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
feb0: 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
fec0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fee0: 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
fef0: 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
ff00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ff10: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
ff20: 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
ff30: 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
ff40: 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
ff50: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
ff60: 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
ff70: 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
ff80: 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
ff90: 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
ffa0: 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
ffb0: 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
ffc0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
ffd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ffe0: 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
fff0: 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
10000 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
10010 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10030 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
10040 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
10050 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
10060 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
10070 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
10080 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
10090 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
100a0 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
100b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
100c0 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
100d0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
100e0 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
10110 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
10120 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
10130 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
10160 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
10170 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
10180 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
10190 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
101a0 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
101b0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
101c0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
101d0 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
101e0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
101f0 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
10200 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
10210 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10220 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
10230 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10250 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
10260 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
10270 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
10280 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
10290 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
102a0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75  phemeral table u
102b0 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44  sed to enforce D
102c0 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a  ISTINCT */.  } *
102d0 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75  aFunc;.  int nFu
102e0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
102f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
10300 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d  tries in aFunc[]
10310 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
10320 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72  e datatype ynVar
10330 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74   is a signed int
10340 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d  eger, either 16-
10350 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a  bit or 32-bit..*
10360 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20  * Usually it is 
10370 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66  16-bits.  But if
10380 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
10390 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67  ABLE_NUMBER is g
103a0 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33  reater.** than 3
103b0 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20  2767 we have to 
103c0 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20  make it 32-bit. 
103d0 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65   16-bit is prefe
103e0 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20  rred because.** 
103f0 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d  it uses less mem
10400 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20  ory in the Expr 
10410 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73  object, which is
10420 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73   a big memory us
10430 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73  er.** in systems
10440 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72   with lots of pr
10450 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
10460 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c  s.  And few appl
10470 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64  ications.** need
10480 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74   more than about
10490 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62   10 or 20 variab
104a0 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65  les.  But some e
104b0 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e  xtreme users wan
104c0 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65  t.** to have pre
104d0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
104e0 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37   with over 32767
104f0 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20   variables, and 
10500 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20  for them.** the 
10510 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  option is availa
10520 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d  ble (at compile-
10530 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51  time)..*/.#if SQ
10540 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
10550 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a  E_NUMBER<=32767.
10560 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61  typedef i16 ynVa
10570 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66  r;.#else.typedef
10580 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64   int ynVar;.#end
10590 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  if../*.** Each n
105a0 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
105b0 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
105c0 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
105d0 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
105e0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
105f0 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
10600 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74   opcode. The int
10610 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
10620 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
10630 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
10640 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70   here. For examp
10650 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64  le, the parser d
10660 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20  efines TK_GE to 
10670 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  be an integer.**
10680 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69   code representi
10690 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72  ng the ">=" oper
106a0 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20  ator. This same 
106b0 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20  integer code is 
106c0 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70  reused.** to rep
106d0 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74  resent the great
106e0 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c  er-than-or-equal
106f0 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  -to operator in 
10700 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a  the expression.*
10710 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  * tree..**.** If
10720 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
10730 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
10740 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54  l (TK_INTEGER, T
10750 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42  K_FLOAT, TK_BLOB
10760 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  , .** or TK_STRI
10770 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
10780 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
10790 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
107a0 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
107b0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
107c0 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
107d0 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
107e0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
107f0 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61  tains the .** va
10800 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
10810 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
10820 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
10830 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
10840 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
10850 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
10860 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
10870 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
10880 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
10890 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
108a0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
108b0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
108c0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
108d0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
108e0 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
108f0 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
10900 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
10910 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
10920 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
10930 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
10940 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
10950 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
10960 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
10970 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
10980 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
10990 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
109a0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
109b0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
109c0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
109d0 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
109e0 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
109f0 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
10a00 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
10a10 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
10a20 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
10a30 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
10a40 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
10a50 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
10a60 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
10a70 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
10a80 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a  is .** valid..**
10a90 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
10aa0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
10ab0 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
10ac0 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
10ad0 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
10ae0 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
10af0 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
10b00 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
10b10 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
10b20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
10b30 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
10b40 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
10b50 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
10b60 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
10b70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
10b80 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
10b90 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
10ba0 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
10bb0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
10bc0 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
10bd0 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
10be0 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
10bf0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
10c00 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
10c10 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
10c20 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
10c30 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
10c40 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
10c50 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
10c60 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
10c70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
10c80 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
10c90 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
10ca0 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
10cb0 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20  estion mark .** 
10cc0 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e  character '?' in
10cd0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
10ce0 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72  L) then the Expr
10cf0 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68  .iTable holds th
10d00 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62  e index .** numb
10d10 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
10d20 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
10d30 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
10d40 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
10d50 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
10d60 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
10d70 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
10d80 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
10d90 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
10da0 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
10db0 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
10dc0 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
10dd0 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
10de0 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
10df0 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
10e00 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
10e10 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
10e20 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
10e30 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
10e40 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
10e50 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
10e60 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
10e70 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
10e80 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
10e90 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
10ea0 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
10eb0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
10ec0 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
10ed0 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
10ee0 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
10ef0 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
10f00 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
10f10 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
10f20 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
10f30 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
10f40 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
10f50 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
10f60 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
10f70 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
10f80 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
10f90 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
10fa0 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
10fb0 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
10fc0 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
10fd0 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
10fe0 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
10ff0 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
11000 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
11010 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
11020 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
11030 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
11040 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
11050 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
11060 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
11070 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
11080 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
11090 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
110a0 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
110b0 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
110c0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
110d0 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
110e0 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
110f0 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
11100 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
11110 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
11120 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
11130 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
11140 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
11150 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
11160 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
11170 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
11180 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
11190 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
111a0 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
111b0 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
111c0 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
111d0 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
111e0 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
111f0 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
11200 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
11210 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
11220 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
11230 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
11240 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11260 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
11270 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
11280 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
11290 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
112a0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
112b0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
112c0 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
112d0 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  mn */.  u16 flag
112e0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
112f0 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
11300 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
11310 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
11320 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
11330 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
11340 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
11350 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
11360 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
11370 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
11380 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
11390 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
113a0 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
113b0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
113c0 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
113d0 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
113e0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
113f0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
11400 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
11410 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
11420 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
11430 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
11440 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
11450 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
11460 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
11470 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
11480 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n. .  **********
11490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
114a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
114b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
114c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
114d0 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
114e0 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
114f0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
11500 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
11510 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
11520 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
11530 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
11540 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75 6e  List;     /* Fun
11550 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20  ction arguments 
11560 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49 4e  or in "<expr> IN
11570 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20 2a   (<expr-list)" *
11580 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
11590 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55 73  elect;     /* Us
115a0 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65 63  ed for sub-selec
115b0 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20 49  ts and "<expr> I
115c0 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a 2f  N (<select>)" */
115d0 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
115e0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
115f0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
11600 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
11610 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
11620 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
11630 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
11640 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
11650 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
11660 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
11670 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
11680 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
11690 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
116a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
116b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
116c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
116d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
116e0 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
116f0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
11700 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
11710 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
11720 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
11730 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
11740 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
11750 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
11760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
11770 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
11780 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
11790 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117b0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
117c0 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
117d0 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117f0 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
11800 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
11810 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  d */.  ynVar iCo
11820 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
11830 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
11840 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
11850 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11870 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
11880 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
11890 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
118a0 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
118c0 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
118d0 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
118e0 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
118f0 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
11900 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
11910 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
11920 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
11930 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
11940 66 6c 61 67 73 32 3b 20 20 20 20 20 20 20 20 20  flags2;         
11950 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 73 65      /* Second se
11960 74 20 6f 66 20 66 6c 61 67 73 2e 20 20 45 50 32  t of flags.  EP2
11970 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  _... */.  u8 op2
11980 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11990 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
119a0 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
119b0 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
119c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119d0 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
119e0 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
119f0 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a10 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
11a20 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
11a30 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
11a40 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
11a50 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
11a60 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
11a70 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
11a80 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
11a90 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
11aa0 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
11ab0 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
11ac0 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ns. */.};../*.**
11ad0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
11ae0 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
11af0 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
11b00 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
11b10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
11b20 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 31  romJoin   0x0001
11b30 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20    /* Originated 
11b40 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  in ON or USING c
11b50 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
11b60 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
11b70 67 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20  g        0x0002 
11b80 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
11b90 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
11ba0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
11bb0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c  #define EP_Resol
11bc0 76 65 64 20 20 20 30 78 30 30 30 34 20 20 2f 2a  ved   0x0004  /*
11bd0 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72   IDs have been r
11be0 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d  esolved to COLUM
11bf0 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  Ns */.#define EP
11c00 5f 45 72 72 6f 72 20 20 20 20 20 20 30 78 30 30  _Error      0x00
11c10 30 38 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f  08  /* Expressio
11c20 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  n contains one o
11c30 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f  r more errors */
11c40 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
11c50 69 6e 63 74 20 20 20 30 78 30 30 31 30 20 20 2f  inct   0x0010  /
11c60 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
11c70 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
11c80 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
11c90 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
11ca0 63 74 20 20 30 78 30 30 32 30 20 20 2f 2a 20 70  ct  0x0020  /* p
11cb0 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
11cc0 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
11cd0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
11ce0 5f 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30  _DblQuoted  0x00
11cf0 34 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  40  /* token.z w
11d00 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
11d10 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
11d20 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20  e EP_InfixFunc  
11d30 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20  0x0080  /* True 
11d40 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
11d50 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
11d60 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
11d70 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 20  e EP_Collate    
11d80 30 78 30 31 30 30 20 20 2f 2a 20 54 72 65 65 20  0x0100  /* Tree 
11d90 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
11da0 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f 72 20 2a  LLATE opeartor *
11db0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78  /.#define EP_Fix
11dc0 65 64 44 65 73 74 20 20 30 78 30 32 30 30 20 20  edDest  0x0200  
11dd0 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65 64 65 64  /* Result needed
11de0 20 69 6e 20 61 20 73 70 65 63 69 66 69 63 20 72   in a specific r
11df0 65 67 69 73 74 65 72 20 2a 2f 0a 23 64 65 66 69  egister */.#defi
11e00 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
11e10 20 30 78 30 34 30 30 20 20 2f 2a 20 49 6e 74 65   0x0400  /* Inte
11e20 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
11e30 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
11e40 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
11e50 73 53 65 6c 65 63 74 20 20 30 78 30 38 30 30 20  sSelect  0x0800 
11e60 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
11e70 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
11e80 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
11e90 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 69 6e 74  .#define EP_Hint
11ea0 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f         0x1000  /
11eb0 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  * Not used */.#d
11ec0 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
11ed0 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 45      0x2000  /* E
11ee0 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45 58  xpr struct is EX
11ef0 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
11f00 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
11f10 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
11f20 79 20 20 30 78 34 30 30 30 20 20 2f 2a 20 45 78  y  0x4000  /* Ex
11f30 70 72 20 73 74 72 75 63 74 20 69 73 20 45 58 50  pr struct is EXP
11f40 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
11f50 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
11f60 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
11f70 20 20 20 20 30 78 38 30 30 30 20 20 2f 2a 20 48      0x8000  /* H
11f80 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
11f90 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
11fa0 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f 2a 0a  malloc() */../*.
11fb0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
11fc0 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
11fd0 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
11fe0 20 45 78 70 72 2e 66 6c 61 67 73 32 20 66 69 65   Expr.flags2 fie
11ff0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
12000 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b 65 6e  P2_MallocedToken
12010 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4e 65 65    0x0001  /* Nee
12020 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
12030 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
12040 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 32 5f   */.#define EP2_
12050 49 72 72 65 64 75 63 69 62 6c 65 20 20 20 20 30  Irreducible    0
12060 78 30 30 30 32 20 20 2f 2a 20 43 61 6e 6e 6f 74  x0002  /* Cannot
12070 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
12080 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 0a 2f 2a  this Expr */../*
12090 0a 2a 2a 20 54 68 65 20 70 73 65 75 64 6f 2d 72  .** The pseudo-r
120a0 6f 75 74 69 6e 65 20 73 71 6c 69 74 65 33 45 78  outine sqlite3Ex
120b0 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c 65  prSetIrreducible
120c0 20 73 65 74 73 20 74 68 65 20 45 50 32 5f 49 72   sets the EP2_Ir
120d0 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20 66 6c 61  reducible.** fla
120e0 67 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69  g on an expressi
120f0 6f 6e 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  on structure.  T
12100 68 69 73 20 66 6c 61 67 20 69 73 20 75 73 65 64  his flag is used
12110 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c 79 2e 20   for VV&A only. 
12120 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 20   The.** routine 
12130 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61  is implemented a
12140 73 20 61 20 6d 61 63 72 6f 20 74 68 61 74 20 6f  s a macro that o
12150 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65 6e 20 69  nly works when i
12160 6e 20 64 65 62 75 67 67 69 6e 67 20 6d 6f 64 65  n debugging mode
12170 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f 74 20 74  ,.** so as not t
12180 6f 20 62 75 72 64 65 6e 20 70 72 6f 64 75 63 74  o burden product
12190 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66  ion code..*/.#if
121a0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
121b0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
121c0 74 49 72 72 65 64 75 63 69 62 6c 65 28 58 29 20  tIrreducible(X) 
121d0 20 28 58 29 2d 3e 66 6c 61 67 73 32 20 7c 3d 20   (X)->flags2 |= 
121e0 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a  EP2_Irreducible.
121f0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
12200 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
12210 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e(X).#endif../*.
12220 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
12230 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
12240 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
12250 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
12260 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
12270 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
12280 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
12290 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
122a0 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
122b0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
122c0 41 6e 79 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AnyProperty(E,P)
122d0 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
122e0 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
122f0 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
12300 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
12310 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
12320 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
12330 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
12340 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
12350 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
12360 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
12370 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
12380 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
12390 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20  xpr .** struct, 
123a0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
123b0 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
123c0 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
123d0 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e  xpr.flags .** an
123e0 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  d an Expr struct
123f0 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b   with the EP_Tok
12400 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e  enOnly flag set.
12410 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
12420 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20  _FULLSIZE       
12430 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29      sizeof(Expr)
12440 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
12450 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69  ll size */.#defi
12460 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ne EXPR_REDUCEDS
12470 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65  IZE        offse
12480 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29  tof(Expr,iTable)
12490 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74    /* Common feat
124a0 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ures */.#define 
124b0 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
124c0 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66  ZE      offsetof
124d0 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f  (Expr,pLeft)   /
124e0 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73  * Fewer features
124f0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73   */../*.** Flags
12500 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
12510 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
12520 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68  function. See th
12530 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
12540 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74   .** above sqlit
12550 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
12560 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
12570 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
12580 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
12590 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
125a0 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
125b0 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
125c0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
125d0 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
125e0 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
125f0 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
12600 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
12610 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
12620 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
12630 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
12640 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
12650 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
12660 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
12670 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
12680 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
12690 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
126a0 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
126b0 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
126c0 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
126d0 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
126e0 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
126f0 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
12700 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
12710 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
12720 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
12730 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
12740 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
12750 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
12760 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
12770 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
12780 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
12790 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
127a0 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
127b0 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
127c0 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
127d0 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
127e0 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
127f0 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
12800 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
12810 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
12820 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
12830 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
12840 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
12850 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
12860 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
12870 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
12880 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
12890 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
128a0 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
128b0 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
128c0 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
128d0 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
128e0 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
128f0 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
12900 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
12910 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
12920 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
12930 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
12940 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12950 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
12960 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
12970 20 69 6e 74 20 69 45 43 75 72 73 6f 72 3b 20 20   int iECursor;  
12980 20 20 20 20 20 20 20 20 2f 2a 20 56 44 42 45 20          /* VDBE 
12990 43 75 72 73 6f 72 20 61 73 73 6f 63 69 61 74 65  Cursor associate
129a0 64 20 77 69 74 68 20 74 68 69 73 20 45 78 70 72  d with this Expr
129b0 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  List */.  struct
129c0 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
129d0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
129e0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
129f0 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
12a00 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
12a10 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f     /* The list o
12a20 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  f expressions */
12a30 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
12a40 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12a50 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
12a60 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
12a70 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
12a80 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
12a90 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
12aa0 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
12ab0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
12ac0 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
12ad0 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
12ae0 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
12af0 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
12b00 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
12b10 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
12b20 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
12b30 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
12b40 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
12b50 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
12b60 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
12b70 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
12b80 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 4f 72 64   */.    u16 iOrd
12b90 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 20 20  erByCol;        
12ba0 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
12bb0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
12bc0 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
12bd0 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
12be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
12bf0 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
12c00 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
12c10 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20  me */.  } *a;   
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12c30 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20  * Alloc a power 
12c40 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f  of two greater o
12c50 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72  r equal to nExpr
12c60 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
12c70 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
12c80 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
12c90 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65  sed by the parse
12ca0 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68  r to record both
12cb0 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72  .** the parse tr
12cc0 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73  ee for an expres
12cd0 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61  sion and the spa
12ce0 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  n of input text 
12cf0 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73  for an.** expres
12d00 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  sion..*/.struct 
12d10 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70  ExprSpan {.  Exp
12d20 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
12d30 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73     /* The expres
12d40 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20  sion parse tree 
12d50 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
12d60 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69  *zStart;   /* Fi
12d70 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
12d80 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20   input text */. 
12d90 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e   const char *zEn
12da0 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68  d;     /* One ch
12db0 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65  aracter past the
12dc0 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65   end of input te
12dd0 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  xt */.};../*.** 
12de0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
12df0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
12e00 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
12e10 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
12e20 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
12e30 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
12e40 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
12e50 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
12e60 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
12e70 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
12e80 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
12e90 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
12ea0 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
12eb0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
12ec0 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
12ed0 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
12ee0 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
12ef0 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
12f00 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
12f10 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
12f20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
12f30 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
12f40 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
12f50 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
12f60 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
12f70 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
12f80 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
12f90 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
12fa0 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
12fb0 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
12fc0 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
12fd0 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
12fe0 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
12ff0 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
13000 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  .  struct IdList
13010 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
13020 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
13030 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65   Name of the ide
13040 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  ntifier */.    i
13050 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
13060 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d   /* Index in som
13070 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f  e Table.aCol[] o
13080 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  f a column named
13090 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
130a0 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20  ;.  int nId;    
130b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
130c0 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  f identifiers on
130d0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
130e0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
130f0 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
13100 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
13110 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
13120 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
13130 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
13140 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
13150 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
13160 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
13170 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
13180 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
13190 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
131a0 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
131b0 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
131c0 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
131d0 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
131e0 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75  86..*/.typedef u
131f0 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a  64 Bitmask;../*.
13200 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
13210 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
13220 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
13230 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
13240 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
13250 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
13260 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
13270 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
13280 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
13290 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
132a0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
132b0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
132c0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
132d0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
132e0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
132f0 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
13300 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
13310 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
13320 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
13330 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
13340 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
13350 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
13360 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
13370 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
13380 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
13390 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
133a0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
133b0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
133c0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
133d0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
133e0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
133f0 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
13400 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
13410 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
13420 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
13430 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
13440 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
13450 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
13460 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
13470 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
13480 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
13490 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
134a0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
134b0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
134c0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
134d0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
134e0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
134f0 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
13500 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
13510 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
13520 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
13530 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
13540 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
13550 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
13560 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
13570 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
13580 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
13590 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
135a0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
135b0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
135c0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
135d0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
135e0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
135f0 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
13600 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
13610 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
13620 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
13630 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
13640 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
13650 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
13660 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 31 36 20  SrcList {.  i16 
13670 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
13680 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
13690 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
136a0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
136b0 65 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c 6c 6f  e */.  i16 nAllo
136c0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
136d0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
136e0 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
136f0 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
13700 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
13710 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
13720 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
13730 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
13740 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
13750 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
13760 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
13770 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
13780 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13790 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
137a0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
137b0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
137c0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
137d0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
137e0 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
137f0 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
13800 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
13810 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
13820 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
13830 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
13840 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
13850 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
13860 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
13870 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
13880 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
13890 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
138a0 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
138b0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
138c0 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
138d0 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
138e0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
138f0 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
13900 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
13910 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
13920 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
13930 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
13940 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
13950 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
13960 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72   able and the pr
13970 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e  evious */.    un
13980 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
13990 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
139a0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
139b0 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
139c0 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
139d0 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a  d isCorrelated :
139e0 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73  1;  /* True if s
139f0 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72  ub-query is corr
13a00 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e  elated */.    un
13a10 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
13a20 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
13a30 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
13a40 72 6f 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64  routine */.#ifnd
13a50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
13a60 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
13a70 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
13a80 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
13a90 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
13aa0 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
13ab0 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
13ac0 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
13ad0 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
13ae0 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
13af0 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
13b00 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
13b10 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
13b20 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
13b30 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
13b40 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
13b50 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
13b60 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
13b70 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
13b80 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
13b90 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
13ba0 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
13bb0 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68  s used */.    ch
13bc0 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20  ar *zIndex;     
13bd0 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
13be0 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
13bf0 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
13c00 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
13c10 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65  ndex;    /* Inde
13c20 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
13c30 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e  esponding to zIn
13c40 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  dex, if any */. 
13c50 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
13c60 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
13c70 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
13c80 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
13c90 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
13ca0 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
13cb0 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
13cc0 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
13cd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
13ce0 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
13cf0 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
13d00 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
13d10 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
13d20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
13d30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
13d40 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
13d50 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
13d60 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
13d70 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
13d80 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
13d90 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
13da0 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
13db0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
13dc0 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
13dd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
13de0 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
13df0 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
13e00 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
13e10 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
13e20 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
13e30 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
13e40 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
13e50 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
13e60 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
13e70 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
13e80 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
13e90 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68 65  */.../*.** A Whe
13ea0 72 65 50 6c 61 6e 20 6f 62 6a 65 63 74 20 68 6f  rePlan object ho
13eb0 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
13ec0 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 61  that describes a
13ed0 20 6c 6f 6f 6b 75 70 0a 2a 2a 20 73 74 72 61 74   lookup.** strat
13ee0 65 67 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  egy..**.** This 
13ef0 6f 62 6a 65 63 74 20 69 73 20 69 6e 74 65 6e 64  object is intend
13f00 65 64 20 74 6f 20 62 65 20 6f 70 61 71 75 65 20  ed to be opaque 
13f10 6f 75 74 73 69 64 65 20 6f 66 20 74 68 65 20 77  outside of the w
13f20 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a  here.c module..*
13f30 2a 20 49 74 20 69 73 20 69 6e 63 6c 75 64 65 64  * It is included
13f40 20 68 65 72 65 20 6f 6e 6c 79 20 73 6f 20 74 68   here only so th
13f50 61 74 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 72  at that compiler
13f60 20 77 69 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20 62   will know how b
13f70 69 67 20 69 74 0a 2a 2a 20 69 73 2e 20 20 4e 6f  ig it.** is.  No
13f80 6e 65 20 6f 66 20 74 68 65 20 66 69 65 6c 64 73  ne of the fields
13f90 20 69 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   in this object 
13fa0 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 6f  should be used o
13fb0 75 74 73 69 64 65 20 6f 66 0a 2a 2a 20 74 68 65  utside of.** the
13fc0 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e   where.c module.
13fd0 0a 2a 2a 0a 2a 2a 20 57 69 74 68 69 6e 20 74 68  .**.** Within th
13fe0 65 20 75 6e 69 6f 6e 2c 20 70 49 64 78 20 69 73  e union, pIdx is
13ff0 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20   only used when 
14000 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e  wsFlags&WHERE_IN
14010 44 45 58 45 44 20 69 73 20 74 72 75 65 2e 0a 2a  DEXED is true..*
14020 2a 20 70 54 65 72 6d 20 69 73 20 6f 6e 6c 79 20  * pTerm is only 
14030 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67  used when wsFlag
14040 73 26 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52  s&WHERE_MULTI_OR
14050 20 69 73 20 74 72 75 65 2e 20 20 41 6e 64 20 70   is true.  And p
14060 56 74 61 62 49 64 78 0a 2a 2a 20 69 73 20 6f 6e  VtabIdx.** is on
14070 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73 46  ly used when wsF
14080 6c 61 67 73 26 57 48 45 52 45 5f 56 49 52 54 55  lags&WHERE_VIRTU
14090 41 4c 54 41 42 4c 45 20 69 73 20 74 72 75 65 2e  ALTABLE is true.
140a0 20 20 49 74 20 69 73 20 6e 65 76 65 72 20 74 68    It is never th
140b0 65 0a 2a 2a 20 63 61 73 65 20 74 68 61 74 20 6d  e.** case that m
140c0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66 20  ore than one of 
140d0 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73  these conditions
140e0 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 72   is true..*/.str
140f0 75 63 74 20 57 68 65 72 65 50 6c 61 6e 20 7b 0a  uct WherePlan {.
14100 20 20 75 33 32 20 77 73 46 6c 61 67 73 3b 20 20    u32 wsFlags;  
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 2f 2a 20 57 48 45 52 45 5f 2a 20 66 6c 61 67   /* WHERE_* flag
14130 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 20  s that describe 
14140 74 68 65 20 73 74 72 61 74 65 67 79 20 2a 2f 0a  the strategy */.
14150 20 20 75 31 36 20 6e 45 71 3b 20 20 20 20 20 20    u16 nEq;      
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 3d 3d   /* Number of ==
14180 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
14190 20 20 75 31 36 20 6e 4f 42 53 61 74 3b 20 20 20    u16 nOBSat;   
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52   /* Number of OR
141c0 44 45 52 20 42 59 20 74 65 72 6d 73 20 73 61 74  DER BY terms sat
141d0 69 73 66 69 65 64 20 2a 2f 0a 20 20 64 6f 75 62  isfied */.  doub
141e0 6c 65 20 6e 52 6f 77 3b 20 20 20 20 20 20 20 20  le nRow;        
141f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73             /* Es
14200 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
14210 66 20 72 6f 77 73 20 28 66 6f 72 20 45 51 50 29  f rows (for EQP)
14220 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
14230 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20    Index *pIdx;  
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14250 20 2f 2a 20 49 6e 64 65 78 20 77 68 65 6e 20 57   /* Index when W
14260 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20  HERE_INDEXED is 
14270 74 72 75 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  true */.    stru
14280 63 74 20 57 68 65 72 65 54 65 72 6d 20 2a 70 54  ct WhereTerm *pT
14290 65 72 6d 3b 20 20 20 20 20 20 20 2f 2a 20 57 48  erm;       /* WH
142a0 45 52 45 20 63 6c 61 75 73 65 20 74 65 72 6d 20  ERE clause term 
142b0 66 6f 72 20 4f 52 2d 73 65 61 72 63 68 20 2a 2f  for OR-search */
142c0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 64  .    sqlite3_ind
142d0 65 78 5f 69 6e 66 6f 20 2a 70 56 74 61 62 49 64  ex_info *pVtabId
142e0 78 3b 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74  x;  /* Virtual t
142f0 61 62 6c 65 20 69 6e 64 65 78 20 74 6f 20 75 73  able index to us
14300 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  e */.  } u;.};..
14310 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68 20 6e  /*.** For each n
14320 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20 61 20  ested loop in a 
14330 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 6d 70  WHERE clause imp
14340 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
14350 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20 73 74   WhereInfo.** st
14360 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
14370 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   a single instan
14380 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
14390 74 75 72 65 2e 20 20 54 68 69 73 20 73 74 72 75  ture.  This stru
143a0 63 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e 74 65  cture.** is inte
143b0 6e 64 65 64 20 74 6f 20 62 65 20 70 72 69 76 61  nded to be priva
143c0 74 65 20 74 6f 20 74 68 65 20 77 68 65 72 65 2e  te to the where.
143d0 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20 73 68 6f  c module and sho
143e0 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63  uld not be.** ac
143f0 63 65 73 73 20 6f 72 20 6d 6f 64 69 66 69 65 64  cess or modified
14400 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c 65   by other module
14410 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 49 64  s..**.** The pId
14420 78 49 6e 66 6f 20 66 69 65 6c 64 20 69 73 20 75  xInfo field is u
14430 73 65 64 20 74 6f 20 68 65 6c 70 20 70 69 63 6b  sed to help pick
14440 20 74 68 65 20 62 65 73 74 20 69 6e 64 65 78 20   the best index 
14450 6f 6e 20 61 0a 2a 2a 20 76 69 72 74 75 61 6c 20  on a.** virtual 
14460 74 61 62 6c 65 2e 20 20 54 68 65 20 70 49 64 78  table.  The pIdx
14470 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20 63 6f 6e  Info pointer con
14480 74 61 69 6e 73 20 69 6e 64 65 78 69 6e 67 0a 2a  tains indexing.*
14490 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  * information fo
144a0 72 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c 65  r the i-th table
144b0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
144c0 75 73 65 20 62 65 66 6f 72 65 20 72 65 6f 72 64  use before reord
144d0 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20 74 68  ering..** All th
144e0 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74  e pIdxInfo point
144f0 65 72 73 20 61 72 65 20 66 72 65 65 64 20 62 79  ers are freed by
14500 20 77 68 65 72 65 49 6e 66 6f 46 72 65 65 28 29   whereInfoFree()
14510 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a 2a 2a 20   in where.c..** 
14520 41 6c 6c 20 6f 74 68 65 72 20 69 6e 66 6f 72 6d  All other inform
14530 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 2d 74  ation in the i-t
14540 68 20 57 68 65 72 65 4c 65 76 65 6c 20 6f 62 6a  h WhereLevel obj
14550 65 63 74 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ect for the i-th
14560 20 74 61 62 6c 65 0a 2a 2a 20 61 66 74 65 72 20   table.** after 
14570 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 72 64 65  FROM clause orde
14580 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ring..*/.struct 
14590 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20 57  WhereLevel {.  W
145a0 68 65 72 65 50 6c 61 6e 20 70 6c 61 6e 3b 20 20  herePlan plan;  
145b0 20 20 20 20 20 2f 2a 20 71 75 65 72 79 20 70 6c       /* query pl
145c0 61 6e 20 66 6f 72 20 74 68 69 73 20 65 6c 65 6d  an for this elem
145d0 65 6e 74 20 6f 66 20 74 68 65 20 46 52 4f 4d 20  ent of the FROM 
145e0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  clause */.  int 
145f0 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20 20 20  iLeftJoin;      
14600 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    /* Memory cell
14610 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
14620 6e 74 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f  nt LEFT OUTER JO
14630 49 4e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61 62  IN */.  int iTab
14640 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Cur;          /*
14650 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
14660 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
14670 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  the table */.  i
14680 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20 20  nt iIdxCur;     
14690 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
146a0 20 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20   cursor used to 
146b0 61 63 63 65 73 73 20 70 49 64 78 20 2a 2f 0a 20  access pIdx */. 
146c0 20 69 6e 74 20 61 64 64 72 42 72 6b 3b 20 20 20   int addrBrk;   
146d0 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
146e0 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74  ere to break out
146f0 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a   of the loop */.
14700 20 20 69 6e 74 20 61 64 64 72 4e 78 74 3b 20 20    int addrNxt;  
14710 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
14720 68 65 72 65 20 74 6f 20 73 74 61 72 74 20 74 68  here to start th
14730 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d 62 69 6e  e next IN combin
14740 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61  ation */.  int a
14750 64 64 72 43 6f 6e 74 3b 20 20 20 20 20 20 20 20  ddrCont;        
14760 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f   /* Jump here to
14770 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74   continue with t
14780 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79 63  he next loop cyc
14790 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  le */.  int addr
147a0 46 69 72 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  First;        /*
147b0 20 46 69 72 73 74 20 69 6e 73 74 72 75 63 74 69   First instructi
147c0 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 6f  on of interior o
147d0 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20  f the loop */.  
147e0 75 38 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  u8 iFrom;       
147f0 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
14800 6e 74 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  ntry in the FROM
14810 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20   clause */.  u8 
14820 6f 70 2c 20 70 35 3b 20 20 20 20 20 20 20 20 20  op, p5;         
14830 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 61 6e 64     /* Opcode and
14840 20 50 35 20 6f 66 20 74 68 65 20 6f 70 63 6f 64   P5 of the opcod
14850 65 20 74 68 61 74 20 65 6e 64 73 20 74 68 65 20  e that ends the 
14860 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 70 31  loop */.  int p1
14870 2c 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  , p2;           
14880 2f 2a 20 4f 70 65 72 61 6e 64 73 20 6f 66 20 74  /* Operands of t
14890 68 65 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  he opcode used t
148a0 6f 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70 20  o ends the loop 
148b0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
148c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
148d0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 64  formation that d
148e0 65 70 65 6e 64 73 20 6f 6e 20 70 6c 61 6e 2e 77  epends on plan.w
148f0 73 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20 73 74  sFlags */.    st
14900 72 75 63 74 20 7b 0a 20 20 20 20 20 20 69 6e 74  ruct {.      int
14910 20 6e 49 6e 3b 20 20 20 20 20 20 20 20 20 20 20   nIn;           
14920 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14930 65 6e 74 72 69 65 73 20 69 6e 20 61 49 6e 4c 6f  entries in aInLo
14940 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20 20 20 73 74  op[] */.      st
14950 72 75 63 74 20 49 6e 4c 6f 6f 70 20 7b 0a 20 20  ruct InLoop {.  
14960 20 20 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20        int iCur; 
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14980 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
14990 75 73 65 64 20 62 79 20 74 68 69 73 20 49 4e 20  used by this IN 
149a0 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  operator */.    
149b0 20 20 20 20 69 6e 74 20 61 64 64 72 49 6e 54 6f      int addrInTo
149c0 70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  p;         /* To
149d0 70 20 6f 66 20 74 68 65 20 49 4e 20 6c 6f 6f 70  p of the IN loop
149e0 20 2a 2f 0a 20 20 20 20 20 20 7d 20 2a 61 49 6e   */.      } *aIn
149f0 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  Loop;           
14a00 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
14a10 62 6f 75 74 20 65 61 63 68 20 6e 65 73 74 65 64  bout each nested
14a20 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a   IN operator */.
14a30 20 20 20 20 7d 20 69 6e 3b 20 20 20 20 20 20 20      } in;       
14a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
14a50 64 20 77 68 65 6e 20 70 6c 61 6e 2e 77 73 46 6c  d when plan.wsFl
14a60 61 67 73 26 57 48 45 52 45 5f 49 4e 5f 41 42 4c  ags&WHERE_IN_ABL
14a70 45 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a  E */.    Index *
14a80 70 43 6f 76 69 64 78 3b 20 20 20 20 20 20 20 2f  pCovidx;       /
14a90 2a 20 50 6f 73 73 69 62 6c 65 20 63 6f 76 65 72  * Possible cover
14aa0 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 20 57 48  ing index for WH
14ab0 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 2a 2f 0a  ERE_MULTI_OR */.
14ac0 20 20 7d 20 75 3b 0a 20 20 64 6f 75 62 6c 65 20    } u;.  double 
14ad0 72 4f 70 74 43 6f 73 74 3b 20 20 20 20 20 20 2f  rOptCost;      /
14ae0 2a 20 22 4f 70 74 69 6d 61 6c 22 20 63 6f 73 74  * "Optimal" cost
14af0 20 66 6f 72 20 74 68 69 73 20 6c 65 76 65 6c 20   for this level 
14b00 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  */..  /* The fol
14b10 6c 6f 77 69 6e 67 20 66 69 65 6c 64 20 69 73 20  lowing field is 
14b20 72 65 61 6c 6c 79 20 6e 6f 74 20 70 61 72 74 20  really not part 
14b30 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c  of the current l
14b40 65 76 65 6c 2e 20 20 42 75 74 0a 20 20 2a 2a 20  evel.  But.  ** 
14b50 77 65 20 6e 65 65 64 20 61 20 70 6c 61 63 65 20  we need a place 
14b60 74 6f 20 63 61 63 68 65 20 76 69 72 74 75 61 6c  to cache virtual
14b70 20 74 61 62 6c 65 20 69 6e 64 65 78 20 69 6e 66   table index inf
14b80 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61 63  ormation for eac
14b90 68 0a 20 20 2a 2a 20 76 69 72 74 75 61 6c 20 74  h.  ** virtual t
14ba0 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  able in the FROM
14bb0 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20   clause and the 
14bc0 57 68 65 72 65 4c 65 76 65 6c 20 73 74 72 75 63  WhereLevel struc
14bd0 74 75 72 65 20 69 73 0a 20 20 2a 2a 20 61 20 63  ture is.  ** a c
14be0 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 20  onvenient place 
14bf0 73 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 6f  since there is o
14c00 6e 65 20 57 68 65 72 65 4c 65 76 65 6c 20 66 6f  ne WhereLevel fo
14c10 72 20 65 61 63 68 20 46 52 4f 4d 20 63 6c 61 75  r each FROM clau
14c20 73 65 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e  se.  ** element.
14c30 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  .  */.  sqlite3_
14c40 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 49 64 78  index_info *pIdx
14c50 49 6e 66 6f 3b 20 20 2f 2a 20 49 6e 64 65 78 20  Info;  /* Index 
14c60 69 6e 66 6f 20 66 6f 72 20 6e 2d 74 68 20 73 6f  info for n-th so
14c70 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b  urce table */.};
14c80 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
14c90 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
14ca0 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
14cb0 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
14cc0 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
14cd0 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
14ce0 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
14cf0 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  mber..*/.#define
14d00 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
14d10 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f  ORMAL   0x0000 /
14d20 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69  * No-op */.#defi
14d30 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
14d40 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31  _MIN      0x0001
14d50 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
14d60 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28  cessing for min(
14d70 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
14d80 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
14d90 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20  MAX      0x0002 
14da0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
14db0 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29  essing for max()
14dc0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
14dd0 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44   WHERE_ONEPASS_D
14de0 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f  ESIRED  0x0004 /
14df0 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65  * Want to do one
14e00 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c  -pass UPDATE/DEL
14e10 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ETE */.#define W
14e20 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
14e30 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  OK    0x0008 /* 
14e40 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
14e50 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
14e60 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
14e70 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f  RE_OMIT_OPEN_CLO
14e80 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61  SE  0x0010 /* Ta
14e90 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20  ble cursors are 
14ea0 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a  already open */.
14eb0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f  #define WHERE_FO
14ec0 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30  RCE_TABLE      0
14ed0 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x0020 /* Do not 
14ee0 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c  use an index-onl
14ef0 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66  y search */.#def
14f00 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42  ine WHERE_ONETAB
14f10 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34  LE_ONLY    0x004
14f20 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74  0 /* Only code t
14f30 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20  he 1st table in 
14f40 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66  pTabList */.#def
14f50 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e  ine WHERE_AND_ON
14f60 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30 38  LY         0x008
14f70 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69  0 /* Don't use i
14f80 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65  ndices for OR te
14f90 72 6d 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  rms */../*.** Th
14fa0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 70  e WHERE clause p
14fb0 72 6f 63 65 73 73 69 6e 67 20 72 6f 75 74 69 6e  rocessing routin
14fc0 65 20 68 61 73 20 74 77 6f 20 68 61 6c 76 65 73  e has two halves
14fd0 2e 20 20 54 68 65 0a 2a 2a 20 66 69 72 73 74 20  .  The.** first 
14fe0 70 61 72 74 20 64 6f 65 73 20 74 68 65 20 73 74  part does the st
14ff0 61 72 74 20 6f 66 20 74 68 65 20 57 48 45 52 45  art of the WHERE
15000 20 6c 6f 6f 70 20 61 6e 64 20 74 68 65 20 73 65   loop and the se
15010 63 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65  cond.** half doe
15020 73 20 74 68 65 20 74 61 69 6c 20 6f 66 20 74 68  s the tail of th
15030 65 20 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41  e WHERE loop.  A
15040 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
15050 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
15060 69 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  is returned by t
15070 68 65 20 66 69 72 73 74 20 68 61 6c 66 20 61 6e  he first half an
15080 64 20 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f  d passed.** into
15090 20 74 68 65 20 73 65 63 6f 6e 64 20 68 61 6c 66   the second half
150a0 20 74 6f 20 67 69 76 65 20 73 6f 6d 65 20 63 6f   to give some co
150b0 6e 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72  ntinuity..*/.str
150c0 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a  uct WhereInfo {.
150d0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
150e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
150f0 61 72 73 69 6e 67 20 61 6e 64 20 63 6f 64 65 20  arsing and code 
15100 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 6e 74 65  generating conte
15110 78 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  xt */.  SrcList 
15120 2a 70 54 61 62 4c 69 73 74 3b 20 20 20 20 20 20  *pTabList;      
15130 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61 62    /* List of tab
15140 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20  les in the join 
15150 2a 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b  */.  u16 nOBSat;
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15170 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44 45  * Number of ORDE
15180 52 20 42 59 20 74 65 72 6d 73 20 73 61 74 69 73  R BY terms satis
15190 66 69 65 64 20 62 79 20 69 6e 64 69 63 65 73 20  fied by indices 
151a0 2a 2f 0a 20 20 75 31 36 20 77 63 74 72 6c 46 6c  */.  u16 wctrlFl
151b0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ags;           /
151c0 2a 20 46 6c 61 67 73 20 6f 72 69 67 69 6e 61 6c  * Flags original
151d0 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  ly passed to sql
151e0 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
151f0 20 2a 2f 0a 20 20 75 38 20 6f 6b 4f 6e 65 50 61   */.  u8 okOnePa
15200 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
15210 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e 65  /* Ok to use one
15220 2d 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d 20  -pass algorithm 
15230 66 6f 72 20 55 50 44 41 54 45 2f 44 45 4c 45 54  for UPDATE/DELET
15240 45 20 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73 74  E */.  u8 untest
15250 65 64 54 65 72 6d 73 3b 20 20 20 20 20 20 20 20  edTerms;        
15260 20 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52   /* Not all WHER
15270 45 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65 64  E terms resolved
15280 20 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a   by outer loop *
15290 2f 0a 20 20 75 38 20 65 44 69 73 74 69 6e 63 74  /.  u8 eDistinct
152a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
152b0 20 4f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 52   One of the WHER
152c0 45 5f 44 49 53 54 49 4e 43 54 5f 2a 20 76 61 6c  E_DISTINCT_* val
152d0 75 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  ues below */.  i
152e0 6e 74 20 69 54 6f 70 3b 20 20 20 20 20 20 20 20  nt iTop;        
152f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15300 76 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f  very beginning o
15310 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70  f the WHERE loop
15320 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69   */.  int iConti
15330 6e 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nue;            
15340 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
15350 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65  continue with ne
15360 78 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  xt record */.  i
15370 6e 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20  nt iBreak;      
15380 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
15390 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f   here to break o
153a0 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  ut of the loop *
153b0 2f 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b 20  /.  int nLevel; 
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
153d0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
153e0 64 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75  d loop */.  stru
153f0 63 74 20 57 68 65 72 65 43 6c 61 75 73 65 20 2a  ct WhereClause *
15400 70 57 43 3b 20 20 2f 2a 20 44 65 63 6f 6d 70 6f  pWC;  /* Decompo
15410 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48  sition of the WH
15420 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
15430 64 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75 65  double savedNQue
15440 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 70 50 61  ryLoop;   /* pPa
15450 72 73 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70 20  rse->nQueryLoop 
15460 6f 75 74 73 69 64 65 20 74 68 65 20 57 48 45 52  outside the WHER
15470 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75 62  E loop */.  doub
15480 6c 65 20 6e 52 6f 77 4f 75 74 3b 20 20 20 20 20  le nRowOut;     
15490 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
154a0 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74  ed number of out
154b0 70 75 74 20 72 6f 77 73 20 2a 2f 0a 20 20 57 68  put rows */.  Wh
154c0 65 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20  ereLevel a[1];  
154d0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
154e0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
154f0 68 20 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57  h nest loop in W
15500 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  HERE */.};../* A
15510 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
15520 72 20 57 68 65 72 65 49 6e 66 6f 2e 65 44 69 73  r WhereInfo.eDis
15530 74 69 6e 63 74 20 61 6e 64 20 44 69 73 74 69 6e  tinct and Distin
15540 63 74 43 74 78 2e 65 54 6e 63 74 54 79 70 65 20  ctCtx.eTnctType 
15550 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15560 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
15570 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
15580 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
15590 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
155a0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
155b0 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
155c0 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
155d0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
155e0 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
155f0 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
15600 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
15610 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
15620 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
15630 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
15640 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
15650 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
15660 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
15670 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
15680 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
15690 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
156a0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
156b0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
156c0 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
156d0 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
156e0 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
156f0 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
15700 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
15710 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
15720 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
15730 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
15740 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
15750 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
15760 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
15770 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
15780 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
15790 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
157a0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
157b0 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
157c0 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
157d0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
157e0 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
157f0 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
15800 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
15810 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
15820 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
15830 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
15840 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
15850 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
15860 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  t .** context is
15870 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
15880 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
15890 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
158a0 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
158b0 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
158c0 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
158d0 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
158e0 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
158f0 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
15900 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
15910 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
15920 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
15930 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
15940 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
15950 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
15960 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
15970 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
15980 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
15990 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
159a0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a   incremented. .*
159b0 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
159c0 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
159d0 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
159e0 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
159f0 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
15a00 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
15a10 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
15a20 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
15a30 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
15a40 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
15a50 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
15a60 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
15a70 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
15a80 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
15a90 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
15aa0 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
15ab0 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
15ac0 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
15ad0 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
15ae0 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
15af0 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
15b00 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
15b10 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
15b20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
15b30 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
15b40 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
15b50 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  nal list of name
15b60 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  d expressions */
15b70 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
15b80 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
15b90 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
15ba0 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
15bb0 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43  level */.  NameC
15bc0 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
15bd0 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
15be0 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
15bf0 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
15c00 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
15c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15c20 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
15c30 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
15c40 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
15c50 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
15c60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
15c70 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
15c80 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
15c90 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63  names */.  u8 nc
15ca0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
15cb0 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
15cc0 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
15cd0 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  ed below */.};..
15ce0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
15cf0 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
15d00 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
15d10 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15d20 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
15d30 20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72   0x01    /* Aggr
15d40 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
15d50 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
15d60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
15d70 61 73 41 67 67 20 20 20 20 30 78 30 32 20 20 20  asAgg    0x02   
15d80 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
15d90 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15da0 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
15db0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
15dc0 20 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65   0x04    /* True
15dd0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
15de0 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
15df0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
15e00 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
15e10 63 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75  c 0x08    /* Tru
15e20 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
15e30 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
15e40 67 67 20 66 75 6e 63 20 2a 2f 0a 0a 2f 2a 0a 2a  gg func */../*.*
15e50 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15e60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15e70 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
15e80 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
15e90 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
15ea0 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
15eb0 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
15ec0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
15ed0 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20  * nLimit is set 
15ee0 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69  to -1 if there i
15ef0 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73  s no LIMIT claus
15f00 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73  e.  nOffset is s
15f10 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74  et to 0..** If t
15f20 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20  here is a LIMIT 
15f30 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73  clause, the pars
15f40 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74  er sets nLimit t
15f50 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
15f60 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20  he.** limit and 
15f70 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76  nOffset to the v
15f80 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73  alue of the offs
15f90 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72  et (or 0 if ther
15fa0 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73  e is not.** offs
15fb0 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20  et).  But later 
15fc0 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e  on, nLimit and n
15fd0 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68  Offset become th
15fe0 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
15ff0 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42  ns.** in the VDB
16000 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68  E that record th
16010 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73  e limit and offs
16020 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a  et counters..**.
16030 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
16040 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
16050 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
16060 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
16070 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
16080 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
16090 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
160a0 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
160b0 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
160c0 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
160d0 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
160e0 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
160f0 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
16100 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
16110 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
16120 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
16130 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
16140 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
16150 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
16160 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
16170 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
16180 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
16190 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
161a0 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
161b0 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
161c0 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
161d0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
161e0 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
161f0 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
16200 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
16210 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
16220 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
16230 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
16240 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
16250 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
16260 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
16270 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
16280 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
16290 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
162a0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
162b0 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
162c0 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
162e0 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
162f0 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
16300 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
16310 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61   */.  u16 selFla
16320 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
16330 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
16340 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
16350 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
16360 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
16370 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
16380 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
16390 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  ers */.  int add
163a0 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20  rOpenEphm[3];   
163b0 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
163c0 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
163d0 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
163e0 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c 65  /.  double nSele
163f0 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  ctRow;     /* Es
16400 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
16410 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
16420 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
16430 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
16440 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
16450 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
16460 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16470 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
16480 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
16490 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
164a0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
164b0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
164c0 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
164d0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
164e0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
164f0 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
16500 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
16510 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
16520 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
16530 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
16540 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
16550 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
16560 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
16570 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
16580 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
16590 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
165a0 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  und */.  Select 
165b0 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20  *pRightmost;    
165c0 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65  /* Right-most se
165d0 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
165e0 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
165f0 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ent */.  Expr *p
16600 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
16610 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
16620 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
16630 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
16640 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
16650 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
16660 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
16670 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
16680 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
16690 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
166a0 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
166b0 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
166c0 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
166d0 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
166e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
166f0 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78  stinct        0x
16700 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
16710 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
16720 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
16730 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
16740 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e   0x0002  /* Iden
16750 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
16760 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
16770 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
16780 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20  te       0x0004 
16790 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
167a0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
167b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
167c0 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30  sesEphemeral   0
167d0 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74  x0008  /* Uses t
167e0 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
167f0 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
16800 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
16810 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a        0x0010  /*
16820 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
16830 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
16840 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
16850 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
16860 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46      0x0020  /* F
16870 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
16880 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
16890 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
168a0 5f 55 73 65 53 6f 72 74 65 72 20 20 20 20 20 20  _UseSorter      
168b0 20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72 74   0x0040  /* Sort
168c0 20 75 73 69 6e 67 20 61 20 73 6f 72 74 65 72 20   using a sorter 
168d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61  */.#define SF_Va
168e0 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78  lues          0x
168f0 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73  0080  /* Synthes
16900 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53  ized from VALUES
16910 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
16920 6e 65 20 53 46 5f 4d 61 74 65 72 69 61 6c 69 7a  ne SF_Materializ
16930 65 20 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a  e     0x0100  /*
16940 20 46 6f 72 63 65 20 6d 61 74 65 72 69 61 6c 69   Force materiali
16950 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65 77 73 20  zation of views 
16960 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
16970 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78  stedFrom      0x
16980 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0200  /* Part of
16990 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
169a0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
169b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
169c0 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20  lts of a select 
169d0 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
169e0 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
169f0 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54  ys.  The.** "SRT
16a00 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
16a10 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79  SELECT Result Ty
16a20 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  pe"..*/.#define 
16a30 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
16a40 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
16a50 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
16a60 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
16a70 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
16a80 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
16a90 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
16aa0 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
16ab0 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
16ac0 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
16ad0 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
16ae0 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
16af0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
16b00 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
16b10 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
16b20 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
16b30 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  re */../* The OR
16b40 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
16b50 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
16b60 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
16b70 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
16b80 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
16b90 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
16ba0 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20  scard)..#define 
16bb0 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
16bc0 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   5  /* Output ea
16bd0 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
16be0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16bf0 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20 20  Mem          6  
16c00 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
16c10 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
16c20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16c30 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20 20  Set          7  
16c40 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
16c50 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
16c60 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
16c70 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
16c80 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   8  /* Store res
16c90 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
16ca0 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
16cb0 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
16cc0 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20  RT_EphemTab     
16cd0 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  9  /* Create tra
16ce0 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
16cf0 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
16d00 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
16d10 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
16d20 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  0  /* Generate a
16d30 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
16d40 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  esult */../*.** 
16d50 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
16d60 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
16d70 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
16d80 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
16d90 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
16da0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
16db0 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
16dc0 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
16dd0 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
16de0 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
16df0 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
16e00 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
16e10 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20   char affSdst;  
16e20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
16e30 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
16e40 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74  SRT_Set */.  int
16e50 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 2f   iSDParm;      /
16e60 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
16e70 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
16e80 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
16e90 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
16ea0 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
16eb0 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
16ec0 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
16ed0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
16ee0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
16ef0 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
16f00 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a  allocated */.};.
16f10 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
16f20 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
16f30 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
16f40 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
16f50 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a   AUTOINCREMENT .
16f60 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
16f70 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
16f80 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
16f90 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
16fa0 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
16fb0 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
16fc0 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
16fd0 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
16fe0 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
16ff0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
17000 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
17010 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
17020 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
17030 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
17040 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
17050 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
17060 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67  own within trigg
17070 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
17080 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
17090 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
170a0 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
170b0 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
170c0 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
170d0 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
170e0 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
170f0 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
17100 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
17110 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
17120 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
17130 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
17140 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
17150 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
17160 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
17170 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
17180 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
17190 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
171a0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
171b0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
171c0 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
171d0 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
171e0 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
171f0 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
17200 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
17210 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
17220 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
17230 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
17240 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ze of the column
17250 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65   cache.*/.#ifnde
17260 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  f SQLITE_N_COLCA
17270 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  CHE.# define SQL
17280 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31  ITE_N_COLCACHE 1
17290 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
172a0 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
172b0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
172c0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
172d0 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
172e0 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72  each .** trigger
172f0 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
17300 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
17310 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
17320 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
17330 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
17340 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
17350 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
17360 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
17370 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
17380 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
17390 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
173a0 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
173b0 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
173c0 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
173d0 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
173e0 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
173f0 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
17400 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
17410 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
17420 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
17430 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
17440 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
17450 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
17460 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
17470 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
17480 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
17490 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
174a0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
174b0 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
174c0 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
174d0 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
174e0 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
174f0 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
17500 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
17510 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
17520 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
17530 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
17540 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
17550 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
17560 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
17570 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
17580 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
17590 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65  INSERT .** state
175a0 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
175b0 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
175c0 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
175d0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
175e0 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
175f0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
17600 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
17610 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
17620 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
17630 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
17640 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
17650 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
17660 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
17670 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
17680 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
17690 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
176a0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
176b0 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
176c0 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
176d0 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
176e0 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
176f0 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
17700 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
17710 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
17720 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
17730 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
17740 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
17750 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
17760 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
17770 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
17780 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
17790 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
177a0 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
177b0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
177c0 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
177d0 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
177e0 20 20 74 79 70 65 64 65 66 20 73 71 6c 69 74 65    typedef sqlite
177f0 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73 6b  3_uint64 yDbMask
17800 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
17810 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79  f unsigned int y
17820 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a  DbMask;.#endif..
17830 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
17840 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
17850 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
17860 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
17870 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
17880 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
17890 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
178a0 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
178b0 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
178c0 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
178d0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
178e0 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
178f0 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
17900 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
17910 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
17920 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
17930 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
17940 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
17950 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
17960 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
17970 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
17980 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
17990 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
179a0 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
179b0 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
179c0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
179d0 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
179e0 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
179f0 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
17a00 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
17a10 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
17a20 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
17a30 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20  hared-cache .** 
17a40 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
17a50 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
17a60 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
17a70 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
17a80 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
17a90 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
17aa0 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
17ab0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
17ac0 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
17ad0 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
17ae0 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
17af0 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
17b00 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
17b10 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
17b20 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
17b30 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
17b40 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
17b50 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
17b60 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
17b70 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
17b80 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
17b90 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
17ba0 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
17bb0 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
17bc0 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
17bd0 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
17be0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
17bf0 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
17c00 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
17c10 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
17c20 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
17c30 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
17c40 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
17c50 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
17c60 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
17c70 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
17c80 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
17c90 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
17ca0 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
17cb0 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
17cc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17cd0 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
17ce0 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
17cf0 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
17d00 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
17d10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17d20 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
17d30 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
17d40 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  [] */.  u8 nTemp
17d50 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  InUse;       /* 
17d60 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70 52  Number of aTempR
17d70 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20 63  eg[] currently c
17d80 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
17d90 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20  u8 nColCache;   
17da0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17db0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
17dc0 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38  lCache[] */.  u8
17dd0 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20   iColCache;     
17de0 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
17df0 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20   in aColCache[] 
17e00 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20  to replace */.  
17e10 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
17e20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
17e30 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
17e40 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
17e50 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
17e60 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
17e70 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
17e80 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
17e90 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
17ea0 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61  ption */.  int a
17eb0 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
17ec0 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
17ed0 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
17ee0 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74  gisters */.  int
17ef0 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   nRangeReg;     
17f00 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
17f10 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
17f20 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
17f30 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20  nt iRangeReg;   
17f40 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
17f50 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61  ister in tempora
17f60 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
17f70 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  k */.  int nErr;
17f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17f90 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
17fa0 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  seen */.  int nT
17fb0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ab;            /
17fc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76  * Number of prev
17fd0 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64  iously allocated
17fe0 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f   VDBE cursors */
17ff0 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
18000 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18010 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
18020 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
18030 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20  .  int nSet;    
18040 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18050 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73  r of sets used s
18060 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
18070 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  Once;           
18080 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f  /* Number of OP_
18090 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  Once instruction
180a0 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  s so far */.  in
180b0 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20  t ckBase;       
180c0 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
180d0 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69  ter of data duri
180e0 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ng check constra
180f0 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ints */.  int iC
18100 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
18110 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
18120 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
18130 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
18140 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
18150 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
18160 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
18170 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
18180 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
18190 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79  es */.  struct y
181a0 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69  ColCache {.    i
181b0 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
181c0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75       /* Table cu
181d0 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
181e0 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
181f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
18200 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
18210 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65  */.    u8 tempRe
18220 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
18230 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72  iReg is a temp r
18240 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65  egister that nee
18250 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a  ds to be freed *
18260 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c  /.    int iLevel
18270 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
18280 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a  esting level */.
18290 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20      int iReg;   
182a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
182b0 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74   with value of t
182c0 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65  his column. 0 me
182d0 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20  ans none. */.   
182e0 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20   int lru;       
182f0 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20         /* Least 
18300 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e  recently used en
18310 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c  try has the smal
18320 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  lest value */.  
18330 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49  } aColCache[SQLI
18340 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20  TE_N_COLCACHE]; 
18350 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68   /* One for each
18360 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e   column cache en
18370 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  try */.  yDbMask
18380 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
18390 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
183a0 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
183b0 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
183c0 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
183d0 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
183e0 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
183f0 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
18400 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47  */.  int cookieG
18410 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64 64  oto;      /* Add
18420 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20  ress of OP_Goto 
18430 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66 69  to cookie verifi
18440 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f  er subroutine */
18450 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c  .  int cookieVal
18460 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  ue[SQLITE_MAX_AT
18470 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56  TACHED+2];  /* V
18480 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73  alues of cookies
18490 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20   to verify */.  
184a0 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
184b0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
184c0 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
184d0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
184e0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
184f0 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
18500 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
18510 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
18520 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
18530 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
18540 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
18550 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
18560 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
18570 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
18580 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
18590 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
185a0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
185b0 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
185c0 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 23  eing parsed */.#
185d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
185e0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
185f0 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
18600 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
18610 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
18620 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
18630 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
18640 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
18650 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
18660 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
18670 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
18680 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
18690 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
186a0 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
186b0 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
186c0 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d   */..  /* Inform
186d0 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65  ation used while
186e0 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20   coding trigger 
186f0 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50  programs. */.  P
18700 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
18710 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
18720 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
18730 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
18740 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
18750 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
18760 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
18770 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
18780 72 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 51  r */.  double nQ
18790 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 45  ueryLoop;   /* E
187a0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
187b0 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
187c0 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 75 33   a query */.  u3
187d0 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
187e0 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
187f0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
18800 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
18810 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
18820 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
18830 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
18840 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
18850 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
18860 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
18870 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
18880 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
18890 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
188a0 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
188b0 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
188c0 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
188d0 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
188e0 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
188f0 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
18900 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f  ers */..  /* Abo
18910 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
18920 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
18930 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
18940 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
18950 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
18960 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e  cursion */..  in
18970 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
18980 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18990 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
189a0 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
189b0 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
189c0 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
189d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
189e0 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
189f0 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
18a00 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
18a10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18a20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
18a30 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
18a40 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
18a50 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
18a60 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
18a70 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
18a80 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
18a90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
18aa0 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
18ab0 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
18ac0 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
18ad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18ae0 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
18af0 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
18b00 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41  .#endif.  int nA
18b10 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
18b20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18b30 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20   aliased result 
18b40 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
18b50 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
18b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
18b70 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
18b80 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
18b90 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69  sub-select */.#i
18ba0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
18bb0 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
18bc0 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  iSelectId;      
18bd0 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63        /* ID of c
18be0 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f  urrent select fo
18bf0 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
18c00 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53   */.  int iNextS
18c10 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
18c20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c  /* Next availabl
18c30 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20  e select ID for 
18c40 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
18c50 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20  /.#endif.  char 
18c60 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20  **azVar;        
18c70 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73       /* Pointers
18c80 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72   to names of par
18c90 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62  ameters */.  Vdb
18ca0 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20  e *pReprepare;  
18cb0 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69         /* VM bei
18cc0 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73  ng reprepared (s
18cd0 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
18ce0 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41 6c  )) */.  int *aAl
18cf0 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
18d00 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73    /* Register us
18d10 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73  ed to hold alias
18d20 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 63  ed result */.  c
18d30 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
18d40 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
18d50 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
18d60 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
18d70 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
18d80 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
18d90 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
18da0 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
18db0 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
18dc0 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
18dd0 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
18de0 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
18df0 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
18e00 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
18e10 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
18e20 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
18e30 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
18e40 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
18e50 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
18e60 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
18e70 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
18e80 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
18e90 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
18ea0 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
18eb0 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
18ec0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
18ed0 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
18ee0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
18ef0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
18f00 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
18f10 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
18f20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
18f30 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
18f40 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
18f50 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
18f60 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
18f70 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
18f80 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
18f90 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
18fa0 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
18fb0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
18fc0 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
18fd0 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
18fe0 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
18ff0 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
19000 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
19010 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
19020 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d 3b  d triggers */.};
19030 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
19040 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
19050 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
19060 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
19070 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
19080 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
19090 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
190a0 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
190b0 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
190c0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
190d0 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
190e0 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
190f0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
19100 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
19110 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
19120 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
19130 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
19140 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
19150 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
19160 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
19170 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
19180 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
19190 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
191a0 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
191b0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
191c0 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
191d0 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
191e0 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
191f0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
19200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19210 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
19220 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
19230 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
19240 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
19250 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
19260 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
19270 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
19280 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
19290 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
192a0 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
192b0 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
192c0 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
192d0 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
192e0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
192f0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
19300 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
19310 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
19320 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
19330 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
19340 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
19350 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
19360 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
19370 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
19380 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
19390 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
193a0 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
193b0 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
193c0 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
193d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
193e0 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20  AG_CLEARCACHE   
193f0 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61   0x20    /* Clea
19400 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  r pseudo-table c
19410 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d  ache in OP_Colum
19420 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
19430 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
19440 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
19450 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
19460 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
19470 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
19480 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
19490 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
194a0 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
194b0 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
194c0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
194d0 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
194e0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
194f0 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
19500 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
19510 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ne OPFLAG_P2ISRE
19520 47 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  G       0x02    
19530 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e  /* P2 to OP_Open
19540 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72  ** is a register
19550 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69   number */.#defi
19560 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ne OPFLAG_PERMUT
19570 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
19580 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75  /* OP_Compare: u
19590 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  se the permutati
195a0 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  on */../*. * Eac
195b0 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
195c0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
195d0 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
195e0 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
195f0 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
19600 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50  rigger. . *. * P
19610 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
19620 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
19630 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
19640 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
19650 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
19660 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
19670 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
19680 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
19690 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20  resents the . * 
196a0 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
196b0 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
196c0 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
196d0 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
196e0 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
196f0 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
19700 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
19710 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
19720 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
19730 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
19740 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
19750 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
19760 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
19770 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
19780 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
19790 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
197a0 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
197b0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
197c0 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
197d0 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
197e0 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
197f0 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
19800 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
19810 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
19820 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
19830 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
19840 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
19850 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
19860 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
19870 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
19880 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
19890 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
198a0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
198b0 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
198c0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
198d0 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
198e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
198f0 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
19900 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
19910 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
19920 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
19930 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
19940 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
19950 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
19960 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
19970 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
19980 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
19990 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
199a0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
199b0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
199c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
199d0 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
199e0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
199f0 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
19a00 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
19a10 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
19a20 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
19a30 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
19a40 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
19a70 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
19a80 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
19a90 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
19aa0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
19ab0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
19ac0 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
19ad0 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
19ae0 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
19af0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
19b00 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
19b10 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
19b20 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
19b30 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
19b40 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
19b50 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
19b60 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
19b70 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
19b80 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
19b90 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
19ba0 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
19bb0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
19bc0 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
19bd0 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
19be0 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
19bf0 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
19c00 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  which. .**.** If
19c10 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
19c20 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
19c30 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
19c40 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
19c50 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
19c60 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
19c70 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
19c80 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
19c90 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
19ca0 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
19cb0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
19cc0 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
19cd0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
19ce0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
19cf0 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
19d00 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
19d10 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
19d20 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
19d30 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
19d40 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  m. . *. * Instan
19d50 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
19d60 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
19d70 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
19d80 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
19d90 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
19da0 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
19db0 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
19dc0 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
19dd0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20  member of the . 
19de0 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
19df0 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
19e00 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
19e10 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
19e20 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
19e30 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
19e40 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
19e50 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54  rogram.. * . * T
19e60 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69  he "op" member i
19e70 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72  ndicates whether
19e80 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45   this is a "DELE
19e90 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22  TE", "INSERT", "
19ea0 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53  UPDATE" or. * "S
19eb0 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74  ELECT" statement
19ec0 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  . The meanings o
19ed0 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62  f the other memb
19ee0 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ers is determine
19ef0 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c  d by the . * val
19f00 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
19f10 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
19f20 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
19f30 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
19f40 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
19f50 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
19f60 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
19f70 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
19f80 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
19f90 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
19fa0 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
19fb0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
19fc0 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
19fd0 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
19fe0 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
19ff0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65  e NULL.. * targe
1a000 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1a010 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1a020 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1a030 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
1a040 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
1a050 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
1a060 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1a070 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
1a080 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1a0a0 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
1a0b0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
1a0c0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1a0d0 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
1a0e0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1a0f0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
1a100 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
1a110 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20  VALUES ... . *  
1a120 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1a130 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
1a140 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
1a150 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
1a160 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
1a170 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
1a180 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
1a190 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20  LETE). * target 
1a1a0 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1a1b0 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1a1c0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1a1d0 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
1a1e0 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
1a1f0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1a200 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
1a210 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1a220 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1a230 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1a240 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1a250 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  . * . * (op == T
1a260 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72  K_UPDATE). * tar
1a270 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
1a280 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
1a290 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1a2a0 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
1a2b0 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68   rows of.. * pWh
1a2c0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1a2d0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1a2e0 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
1a2f0 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1a300 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1a310 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1a320 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
1a330 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
1a340 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
1a350 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
1a360 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
1a370 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
1a380 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
1a390 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
1a3a0 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
1a3b0 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
1a3c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
1a3d0 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f  rgument.. * . */
1a3e0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
1a3f0 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a410 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1a420 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1a430 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
1a440 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
1a450 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
1a460 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
1a470 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
1a480 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
1a490 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
1a4a0 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
1a4b0 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
1a4c0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
1a4d0 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e  * SELECT statmen
1a4e0 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
1a4f0 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43  RT INTO .. SELEC
1a500 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e  T ... */.  Token
1a510 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20   target;        
1a520 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
1a530 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
1a540 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
1a550 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1a560 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
1a570 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
1a580 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
1a590 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
1a5a0 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
1a5b0 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
1a5c0 55 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20  UPDATE.  VALUES 
1a5d0 63 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52  clause for INSER
1a5e0 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  T */.  IdList *p
1a5f0 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1a600 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1a610 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1a620 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1a630 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1a640 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1a650 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1a660 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1a670 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1a680 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1a690 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1a6a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1a6b0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1a6c0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1a6d0 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1a6e0 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1a6f0 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1a700 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1a710 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1a720 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1a730 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1a740 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1a750 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1a760 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1a770 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1a780 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1a790 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1a7a0 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1a7b0 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1a7c0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1a7d0 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1a7e0 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1a7f0 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ema */.  const c
1a800 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
1a810 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
1a820 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
1a830 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
1a840 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
1a850 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
1a860 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
1a870 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1a880 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1a890 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
1a8a0 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
1a8b0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1a8c0 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1a8d0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1a8e0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
1a8f0 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
1a900 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
1a910 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
1a920 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
1a930 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
1a940 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
1a950 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
1a960 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
1a970 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
1a980 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1a990 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
1a9a0 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
1a9b0 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
1a9c0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
1a9d0 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
1a9e0 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
1a9f0 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
1aa00 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
1aa10 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
1aa20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
1aa30 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
1aa40 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72   */.  int  nChar
1aa50 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
1aa60 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
1aa70 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ng so far */.  i
1aa80 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  nt  nAlloc;     
1aa90 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
1aaa0 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
1aab0 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69   in zText */.  i
1aac0 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  nt  mxAlloc;    
1aad0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
1aae0 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65  llowed string le
1aaf0 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d  ngth */.  u8   m
1ab00 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f  allocFailed;   /
1ab10 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69  * Becomes true i
1ab20 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c  f any memory all
1ab30 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f  ocation fails */
1ab40 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f  .  u8   useMallo
1ab50 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f  c;      /* 0: no
1ab60 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44  ne,  1: sqlite3D
1ab70 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c  bMalloc,  2: sql
1ab80 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20  ite3_malloc */. 
1ab90 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20   u8   tooBig;   
1aba0 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73        /* Becomes
1abb0 20 74 72 75 65 20 69 66 20 73 74 72 69 6e 67 20   true if string 
1abc0 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d  size exceeds lim
1abd0 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  its */.};../*.**
1abe0 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1abf0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1ac00 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
1ac10 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
1ac20 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
1ac30 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
1ac40 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
1ac50 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1ac60 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
1ac70 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
1ac80 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
1ac90 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
1aca0 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
1acb0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
1acc0 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
1acd0 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
1ace0 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
1acf0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1ad00 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
1ad10 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
1ad20 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
1ad30 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
1ad40 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
1ad50 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
1ad60 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
1ad70 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
1ad80 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
1ad90 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
1ada0 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
1adb0 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
1adc0 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
1add0 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
1ade0 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
1adf0 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
1ae00 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
1ae10 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
1ae20 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1ae50 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
1ae60 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
1ae70 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1ae80 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1ae90 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
1aea0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1aeb0 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aed0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1aee0 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
1aef0 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1af20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
1af30 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
1af40 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af60 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
1af70 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
1af80 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
1af90 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
1afc0 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
1afd0 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1b000 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1b010 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1b020 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1b030 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1b040 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1b050 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1b060 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1b070 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1b080 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1b090 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1b0a0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1b0b0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1b0c0 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1b0d0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1b0e0 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1b0f0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1b100 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1b110 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1b120 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1b130 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1b140 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b160 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1b170 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1b180 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1b190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1b1a0 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1b1b0 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1b1c0 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1b1d0 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1b1e0 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1b1f0 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 76 6f  ts sizes */.  vo
1b200 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1b230 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1b240 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1b250 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1b260 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1b270 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1b280 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b2a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1b2b0 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1b2c0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1b2f0 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1b300 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b320 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1b330 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1b340 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b370 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1b380 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1b390 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1b3a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1b3b0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1b3c0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1b3d0 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1b3e0 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1b3f0 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1b400 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1b410 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1b420 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
1b430 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
1b440 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
1b450 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
1b460 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
1b470 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
1b480 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
1b490 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1b4c0 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
1b4d0 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
1b4e0 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
1b4f0 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
1b500 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
1b510 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
1b520 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
1b530 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
1b540 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1b550 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1b560 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
1b570 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1b580 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
1b590 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1b5a0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1b5b0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1b5c0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1b5d0 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b5f0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1b600 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1b610 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ed */.  sqlite3_
1b620 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
1b630 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
1b640 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
1b650 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
1b660 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
1b670 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
1b680 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b690 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
1b6a0 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69  itMutex */.  voi
1b6b0 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
1b6c0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1b6d0 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
1b6e0 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
1b6f0 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
1b720 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
1b730 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74  */.  int bLocalt
1b740 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20  imeFault;       
1b750 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1b760 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65  o fail localtime
1b770 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 64  () calls */.#ifd
1b780 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1b790 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
1b7a0 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
1b7b0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1b7c0 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
1b7d0 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
1b7e0 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
1b7f0 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
1b800 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
1b810 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
1b820 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
1b830 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45  ker {.  int (*xE
1b840 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
1b850 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
1b860 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
1b870 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
1b880 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
1b890 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
1b8a0 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
1b8b0 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
1b8c0 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ECTs */.  Parse 
1b8d0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
1b900 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
1b910 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b930 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b940 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
1b950 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
1b960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b980 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
1b990 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
1b9a0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
1b9b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b9c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
1b9d0 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
1b9e0 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20      int i;      
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ba10 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
1ba20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
1ba30 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
1ba60 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
1ba70 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
1ba80 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
1ba90 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
1baa0 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
1bab0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
1bac0 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
1bad0 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
1bae0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
1baf0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
1bb00 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1bb10 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
1bb20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1bb30 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1bb40 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
1bb50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1bb60 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
1bb70 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1bb80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1bb90 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
1bba0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a  er*, Select*);..
1bbb0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
1bbc0 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
1bbd0 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
1bbe0 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
1bbf0 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
1bc00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
1bc10 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
1bc20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
1bc30 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
1bc40 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
1bc50 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
1bc60 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
1bc70 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
1bc80 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
1bc90 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
1bca0 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
1bcb0 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
1bcc0 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
1bcd0 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
1bce0 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1bcf0 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
1bd00 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
1bd10 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
1bd20 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
1bd30 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
1bd40 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1bd50 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
1bd60 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
1bd70 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1bd90 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
1bda0 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdc0 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
1bdd0 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
1bde0 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
1bdf0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
1be00 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be30 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
1be40 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
1be50 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
1be60 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
1be70 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
1be80 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
1be90 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
1bea0 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
1beb0 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
1bec0 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
1bed0 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
1bee0 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
1bef0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
1bf00 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
1bf10 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
1bf20 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
1bf30 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
1bf40 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
1bf50 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
1bf60 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
1bf70 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
1bf80 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1bf90 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1bfa0 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
1bfb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
1bfc0 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
1bfd0 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
1bfe0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
1bff0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1c000 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1c010 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
1c020 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
1c030 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
1c040 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1c050 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
1c060 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1c070 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1c080 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
1c090 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
1c0a0 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
1c0b0 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
1c0c0 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
1c0d0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
1c0e0 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
1c0f0 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
1c100 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  lso all.** the S
1c110 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c120 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
1c130 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f   as an alisse fo
1c140 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
1c150 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
1c160 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c170 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
1c180 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c190 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
1c1a0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1c1b0 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS3.#endif../*.
1c1c0 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
1c1d0 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
1c1e0 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
1c1f0 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
1c200 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
1c210 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
1c220 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
1c230 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
1c240 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1c250 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
1c260 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
1c270 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c280 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
1c290 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
1c2a0 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
1c2b0 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
1c2c0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1c2d0 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
1c2e0 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
1c2f0 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
1c300 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
1c310 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
1c320 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
1c330 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
1c340 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
1c350 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
1c360 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
1c370 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
1c380 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
1c390 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
1c3a0 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
1c3b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c3c0 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
1c3d0 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
1c3e0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1c3f0 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
1c400 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c410 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
1c420 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c430 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c440 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
1c450 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1c460 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c470 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c480 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
1c490 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c4a0 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
1c4b0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c4c0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c4d0 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
1c4e0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1c4f0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c500 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c510 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
1c520 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c530 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
1c540 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c550 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c560 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
1c570 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
1c580 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
1c590 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
1c5a0 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65  ed char)(x)]).#e
1c5b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1c5c0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1c5d0 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
1c5e0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1c5f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1c600 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
1c610 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
1c620 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1c630 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1c640 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
1c650 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1c660 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c670 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
1c680 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
1c690 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1c6a0 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1c6b0 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
1c6c0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1c6d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c6e0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
1c6f0 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
1c700 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1c710 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1c720 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
1c730 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1c740 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  x)).#endif../*.*
1c750 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
1c760 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
1c770 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
1c780 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33  3StrICmp sqlite3
1c790 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c  _stricmp.int sql
1c7a0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
1c7b0 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
1c7c0 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
1c7d0 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
1c7e0 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
1c7f0 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
1c800 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1c810 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
1c820 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1c830 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  oc(int);.void *s
1c840 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
1c850 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1c860 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1c870 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1c880 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1c890 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
1c8a0 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
1c8b0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1c8c0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1c8d0 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
1c8e0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
1c8f0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1c900 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  r*, int);.void *
1c910 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
1c920 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  oid*, int);.void
1c930 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1c940 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
1c950 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1c960 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1c970 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
1c980 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1c990 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
1c9a0 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
1c9b0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1c9c0 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
1c9d0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1c9e0 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
1c9f0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
1ca00 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
1ca10 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
1ca20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
1ca30 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
1ca40 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
1ca50 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
1ca60 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
1ca70 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1ca80 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
1ca90 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ault(void);.void
1caa0 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
1cab0 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
1cac0 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
1cad0 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73  *)(void));.int s
1cae0 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
1caf0 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
1cb00 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
1cb10 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
1cb20 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
1cb30 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
1cb40 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
1cb50 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
1cb60 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
1cb70 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
1cb80 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
1cb90 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
1cba0 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
1cbb0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
1cbc0 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
1cbd0 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
1cbe0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
1cbf0 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
1cc00 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
1cc10 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
1cc20 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
1cc30 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
1cc40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
1cc50 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
1cc60 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1cc70 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
1cc80 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
1cc90 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1cca0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
1ccb0 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
1ccc0 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
1ccd0 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
1cce0 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73  D,P)       .#els
1ccf0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1cd00 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
1cd10 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
1cd20 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
1cd30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1cd40 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
1cd50 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
1cd60 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
1cd70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1cd80 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
1cd90 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1cda0 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
1cdb0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1cdc0 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
1cdd0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1cde0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
1cdf0 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
1ce00 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1ce10 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1ce20 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
1ce30 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1ce40 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1ce50 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
1ce60 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
1ce70 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
1ce80 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1ce90 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
1cea0 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
1ceb0 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
1cec0 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1ced0 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
1cee0 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
1cef0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1cf00 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
1cf10 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
1cf20 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
1cf30 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
1cf40 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
1cf50 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  d);.#endif..int 
1cf60 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
1cf70 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
1cf80 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69  lite3StatusAdd(i
1cf90 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1cfa0 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
1cfb0 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e  int, int);..#ifn
1cfc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1cfd0 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
1cfe0 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
1cff0 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
1d000 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d010 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
1d020 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
1d030 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
1d040 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  um*, int, const 
1d050 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
1d060 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d070 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20  OMIT_TRACE.void 
1d080 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
1d090 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
1d0a0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
1d0b0 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  dif.char *sqlite
1d0c0 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
1d0d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
1d0e0 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
1d0f0 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
1d100 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1d110 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20   va_list);.char 
1d120 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66  *sqlite3MAppendf
1d130 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c  (sqlite3*,char*,
1d140 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
1d150 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
1d160 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  LITE_TEST) || de
1d170 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
1d180 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
1d190 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
1d1a0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1d1b0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1d1c0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
1d1d0 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
1d1e0 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
1d1f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
1d200 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f  if../* Output fo
1d210 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c  rmatting for SQL
1d220 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50  ITE_TESTCTRL_EXP
1d230 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69  LAIN */.#if defi
1d240 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1d250 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a  E_TREE_EXPLAIN).
1d260 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d270 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a  plainBegin(Vdbe*
1d280 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d290 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56  3ExplainPrintf(V
1d2a0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
1d2b0 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20  *, ...);.  void 
1d2c0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c  sqlite3ExplainNL
1d2d0 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1d2e0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75  sqlite3ExplainPu
1d2f0 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  sh(Vdbe*);.  voi
1d300 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1d310 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  Pop(Vdbe*);.  vo
1d320 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1d330 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a  nFinish(Vdbe*);.
1d340 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d350 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65  plainSelect(Vdbe
1d360 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  *, Select*);.  v
1d370 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d380 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78  inExpr(Vdbe*, Ex
1d390 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
1d3a0 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c  ite3ExplainExprL
1d3b0 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c  ist(Vdbe*, ExprL
1d3c0 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63  ist*);.  const c
1d3d0 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65  har *sqlite3Vdbe
1d3e0 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65  Explanation(Vdbe
1d3f0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
1d400 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d410 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  nBegin(X).# defi
1d420 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d430 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64  nSelect(A,B).# d
1d440 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1d450 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20  lainExpr(A,B).# 
1d460 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1d470 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c  plainExprList(A,
1d480 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
1d490 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68  te3ExplainFinish
1d4a0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1d4b0 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74  ite3VdbeExplanat
1d4c0 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  ion(X) 0.#endif.
1d4d0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
1d4e0 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
1d4f0 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
1d500 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
1d510 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
1d520 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
1d530 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e   char*, ...);.in
1d540 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  t sqlite3Dequote
1d550 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
1d560 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
1d570 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1d580 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
1d590 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
1d5a0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1d5b0 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
1d5c0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1d5d0 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
1d5e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1d5f0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
1d600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
1d610 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
1d620 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
1d630 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
1d640 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
1d650 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
1d660 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
1d670 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
1d680 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
1d690 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
1d6a0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1d6b0 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
1d6c0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
1d6d0 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
1d6e0 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
1d6f0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1d700 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1d710 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
1d720 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
1d730 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
1d740 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1d750 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
1d760 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
1d770 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
1d780 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1d790 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
1d7a0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
1d7b0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
1d7c0 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
1d7d0 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
1d7e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d7f0 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
1d800 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
1d810 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d820 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
1d830 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
1d840 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
1d850 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
1d860 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1d870 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d880 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
1d890 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1d8a0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1d8b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1d8c0 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
1d8d0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
1d8e0 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1d8f0 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
1d900 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1d910 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1d920 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
1d930 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
1d940 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1d950 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
1d960 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
1d970 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
1d980 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
1d990 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1d9a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d9b0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
1d9c0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
1d9d0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1d9e0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
1d9f0 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
1da00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1da10 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
1da20 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
1da30 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1da40 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
1da50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1da60 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
1da70 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
1da80 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
1da90 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
1daa0 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
1dab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
1dac0 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
1dad0 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  se *, int);.void
1dae0 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
1daf0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
1db00 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
1db10 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
1db20 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
1db30 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
1db40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
1db50 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
1db60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1db70 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
1db80 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
1db90 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1dba0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1dbb0 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
1dbc0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1dbd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1dbe0 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65  ColumnType(Parse
1dbf0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
1dc00 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
1dc10 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
1dc20 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
1dc30 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
1dc40 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
1dc50 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1dc60 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
1dc70 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1dc80 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1dc90 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f  lite3ParseUri(co
1dca0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
1dcb0 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69  char*,unsigned i
1dcc0 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  nt*,.           
1dcd0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1dce0 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68  _vfs**,char**,ch
1dcf0 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73  ar **);.Btree *s
1dd00 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74  qlite3DbNameToBt
1dd10 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ree(sqlite3*,con
1dd20 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
1dd30 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50  qlite3CodeOnce(P
1dd40 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63  arse *);..Bitvec
1dd50 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
1dd60 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
1dd70 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
1dd80 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
1dd90 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1dda0 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
1ddb0 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
1ddc0 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
1ddd0 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
1dde0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1ddf0 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
1de00 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
1de10 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
1de20 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  vec*);.int sqlit
1de30 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
1de40 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a  est(int,int*);..
1de50 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
1de60 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
1de70 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
1de80 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
1de90 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
1dea0 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
1deb0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
1dec0 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
1ded0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1dee0 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
1def0 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69 36  *, u8 iBatch, i6
1df00 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1df10 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
1df20 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
1df30 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
1df40 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
1df50 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1df60 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
1df70 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1df80 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1df90 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
1dfa0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1dfb0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
1dfc0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1dfd0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
1dfe0 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
1dff0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
1e000 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
1e010 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  ,B) 0.#endif..vo
1e020 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
1e030 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
1e040 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
1e050 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1e060 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
1e070 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1e080 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e090 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
1e0a0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
1e0b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e0c0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1e0d0 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
1e0e0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
1e0f0 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
1e100 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
1e110 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
1e120 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
1e130 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1e140 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
1e150 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
1e160 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1e170 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1e180 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  X).#endif.int sq
1e190 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69  lite3CodeCorouti
1e1a0 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ne(Parse*, Selec
1e1b0 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
1e1c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
1e1d0 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
1e1e0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
1e1f0 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
1e200 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  t*, int);.void *
1e210 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f  sqlite3ArrayAllo
1e220 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f  cate(sqlite3*,vo
1e230 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  id*,int,int*,int
1e240 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  *);.IdList *sqli
1e250 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28  te3IdListAppend(
1e260 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
1e270 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
1e280 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64  sqlite3IdListInd
1e290 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74  ex(IdList*,const
1e2a0 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74   char*);.SrcList
1e2b0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1e2c0 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a  Enlarge(sqlite3*
1e2d0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
1e2e0 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a   int);.SrcList *
1e2f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
1e300 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53  pend(sqlite3*, S
1e310 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
1e320 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73   Token*);.SrcLis
1e330 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1e340 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28  tAppendFromTerm(
1e350 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1e360 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1e370 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20          Token*, 
1e3a0 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20  Select*, Expr*, 
1e3b0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
1e3c0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64  qlite3SrcListInd
1e3d0 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20  exedBy(Parse *, 
1e3e0 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e  SrcList *, Token
1e3f0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
1e400 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
1e410 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
1e420 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
1e430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
1e440 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
1e450 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
1e460 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
1e470 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
1e480 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
1e490 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
1e4a0 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
1e4b0 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
1e4c0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1e4d0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1e4e0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
1e4f0 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
1e500 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
1e510 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
1e520 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
1e530 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20     Token*, int, 
1e560 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e570 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
1e580 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
1e590 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
1e5a0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
1e5b0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
1e5c0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
1e5d0 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
1e5e0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
1e5f0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1e600 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e620 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
1e630 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72  *,u16,Expr*,Expr
1e640 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e650 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
1e660 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
1e670 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
1e680 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
1e690 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
1e6a0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
1e6b0 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
1e6c0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
1e6d0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
1e6e0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
1e6f0 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
1e700 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
1e710 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1e720 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
1e730 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
1e740 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1e750 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
1e760 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
1e770 65 72 65 28 50 61 72 73 65 20 2a 2c 20 53 72 63  ere(Parse *, Src
1e780 4c 69 73 74 20 2a 2c 20 45 78 70 72 20 2a 2c 20  List *, Expr *, 
1e790 45 78 70 72 4c 69 73 74 20 2a 2c 20 45 78 70 72  ExprList *, Expr
1e7a0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 63 68 61 72   *, Expr *, char
1e7b0 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64   *);.#endif.void
1e7c0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72   sqlite3DeleteFr
1e7d0 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  om(Parse*, SrcLi
1e7e0 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
1e7f0 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
1e800 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1e810 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
1e820 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49  r*, int);.WhereI
1e830 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
1e840 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
1e850 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
1e860 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
1e870 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
1e880 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
1e890 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1e8a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1e8b0 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
1e8c0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1e8d0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
1e8e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1e8f0 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
1e900 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
1e910 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1e920 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e930 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
1e940 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e950 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e960 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
1e970 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
1e980 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e990 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
1e9a0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1e9b0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
1e9c0 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  p(Parse*, int);.
1e9d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e9e0 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
1e9f0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1ea00 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1ea10 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
1ea20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1ea30 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
1ea40 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
1ea50 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1ea60 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
1ea70 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1ea80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1ea90 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
1eaa0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
1eab0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1eac0 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
1ead0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1eae0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1eaf0 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
1eb00 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1eb10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1eb20 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50  rCodeConstants(P
1eb30 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  arse*, Expr*);.i
1eb40 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1eb50 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
1eb60 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
1eb70 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1eb80 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
1eb90 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1eba0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1ebb0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
1ebc0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1ebd0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
1ebe0 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
1ebf0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
1ec00 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1ec10 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
1ec20 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
1ec30 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
1ec40 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
1ec50 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
1ec60 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
1ec70 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
1ec80 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
1ec90 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
1eca0 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
1ecb0 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
1ecc0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1ecd0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1ece0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1ecf0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
1ed00 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
1ed10 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1ed20 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
1ed30 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
1ed40 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
1ed50 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1ed60 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
1ed70 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
1ed80 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
1ed90 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
1eda0 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
1edb0 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
1edc0 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
1edd0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
1ede0 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
1edf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1ee00 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
1ee10 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
1ee20 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1ee30 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
1ee40 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
1ee50 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
1ee60 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
1ee70 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
1ee80 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
1ee90 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1eea0 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
1eeb0 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
1eec0 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
1eed0 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
1eee0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1eef0 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
1ef00 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1ef10 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
1ef20 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1ef30 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74  lite3PrngResetSt
1ef40 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1ef50 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1ef60 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
1ef70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1ef80 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
1ef90 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1efa0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
1efb0 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
1efc0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1efd0 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
1efe0 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
1eff0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
1f000 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f010 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
1f020 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
1f030 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
1f040 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
1f050 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f060 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
1f070 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
1f080 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
1f090 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
1f0a0 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
1f0b0 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
1f0c0 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
1f0d0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1f0e0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
1f0f0 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
1f100 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
1f110 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
1f120 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f130 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
1f140 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69  nction(Expr*);.i
1f150 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
1f160 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
1f170 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1f180 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
1f190 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69  onst Expr*);.voi
1f1a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1f1b0 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65  eIsNullJump(Vdbe
1f1c0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
1f1d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1f1e0 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
1f1f0 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
1f200 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
1f210 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
1f220 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
1f230 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f240 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
1f250 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
1f260 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1f270 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
1f280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
1f290 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
1f2a0 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
1f2b0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29  ble*, int, int*)
1f2c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
1f2d0 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
1f2e0 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
1f2f0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1f300 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
1f310 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
1f320 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
1f330 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f360 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
1f370 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  int,int*);.void 
1f380 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
1f390 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
1f3a0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1f3b0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e  t, int*, int, in
1f3c0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1f3d0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
1f3e0 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
1f3f0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1f400 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1f410 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
1f420 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
1f430 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f440 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
1f450 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1f460 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
1f470 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f480 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
1f490 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 68 61 72  arse*, int, char
1f4a0 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
1f4b0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
1f4c0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
1f4d0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
1f4e0 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
1f4f0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
1f500 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
1f510 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1f520 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
1f530 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
1f540 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
1f550 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
1f560 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
1f570 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
1f580 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
1f590 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1f5a0 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72  ite3FuncDefInser
1f5b0 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20  t(FuncDefHash*, 
1f5c0 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44  FuncDef*);.FuncD
1f5d0 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
1f5e0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
1f5f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
1f600 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
1f610 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
1f620 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
1f630 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
1f640 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
1f650 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
1f660 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
1f670 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c  qlite3RegisterGl
1f680 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f  obalFunctions(vo
1f690 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
1f6a0 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
1f6b0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
1f6c0 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
1f6d0 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
1f6e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f6f0 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
1f700 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
1f710 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1f720 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
1f730 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1f740 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
1f750 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
1f760 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
1f770 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
1f780 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
1f790 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f7a0 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
1f7b0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
1f7c0 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
1f7d0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
1f7e0 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
1f7f0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
1f810 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
1f820 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
1f830 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
1f840 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
1f850 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
1f860 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
1f870 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
1f880 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
1f890 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
1f8a0 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
1f8b0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
1f8c0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
1f8d0 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
1f8e0 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
1f8f0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1f900 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
1f910 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
1f920 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
1f930 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
1f940 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
1f950 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1f960 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
1f970 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
1f980 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
1f9b0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1f9c0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
1f9d0 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
1f9e0 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
1f9f0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
1fa00 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1fa10 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
1fa20 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
1fa30 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
1fa40 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
1fa50 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
1fa60 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
1fa70 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
1fa80 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1fa90 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
1faa0 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
1fab0 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69  ,Select*);.  Tri
1fac0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1fad0 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
1fae0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1faf0 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb20 20 20 20 20 20 45 78 70 72 4c 69 73 74 2a 2c 53       ExprList*,S
1fb30 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72  elect*,u8);.  Tr
1fb40 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
1fb50 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
1fb60 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
1fb70 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
1fb80 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69  xpr*, u8);.  Tri
1fb90 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1fba0 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
1fbb0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1fbc0 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f  n*, Expr*);.  vo
1fbd0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
1fbe0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
1fbf0 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
1fc00 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
1fc10 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
1fc20 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
1fc30 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
1fc40 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
1fc50 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
1fc60 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
1fc70 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
1fc80 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
1fc90 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
1fca0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
1fcb0 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
1fcc0 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
1fcd0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1fce0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
1fcf0 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
1fd00 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
1fd10 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
1fd20 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1fd30 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
1fd40 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
1fd50 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
1fd60 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
1fd70 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
1fd80 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
1fd90 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
1fda0 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
1fdb0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
1fdc0 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
1fdd0 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
1fde0 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
1fdf0 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
1fe00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
1fe10 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
1fe20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
1fe30 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
1fe40 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
1fe50 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
1fe60 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
1fe70 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
1fe80 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
1fe90 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
1fea0 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
1feb0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
1fec0 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
1fed0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1fee0 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
1fef0 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
1ff00 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1ff10 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
1ff20 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
1ff30 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
1ff40 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
1ff50 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
1ff60 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
1ff70 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
1ff80 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1ff90 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1ffa0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
1ffb0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
1ffc0 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
1ffd0 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
1ffe0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
1fff0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
20000 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
20010 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
20020 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
20030 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
20040 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
20050 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
20060 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
20070 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
20080 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
20090 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
200a0 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
200b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
200c0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
200d0 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
200e0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
200f0 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
20100 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
20110 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
20120 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
20130 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
20140 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
20150 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
20160 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
20170 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
20180 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
20190 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
201a0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
201b0 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
201c0 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
201d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
201e0 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
201f0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
20200 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
20210 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
20220 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
20230 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
20240 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
20250 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
20260 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
20270 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
20280 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
20290 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
202a0 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
202b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
202c0 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
202d0 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
202e0 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
202f0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
20300 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
20310 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
20320 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
20330 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
20340 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
20350 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
20360 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
20370 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
20380 20 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52   u8**);../*.** R
20390 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
203a0 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
203b0 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
203c0 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
203d0 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
203e0 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
203f0 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
20400 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
20410 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
20420 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c 64  le.  Code should
20430 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20 66   use the MACRO f
20440 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20 74  orms below, as t
20450 68 65 20 56 61 72 69 6e 74 33 32 20 76 65 72 73  he Varint32 vers
20460 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65  ions.** are code
20470 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65 20  d to assume the 
20480 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73 65  single byte case
20490 20 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e 64   is already hand
204a0 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20 74  led (which .** t
204b0 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f  he MACRO form do
204c0 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  es)..*/.int sqli
204d0 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
204e0 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
204f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  );.int sqlite3Pu
20500 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67 6e  tVarint32(unsign
20510 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a  ed char*, u32);.
20520 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
20530 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
20540 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
20550 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
20560 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
20570 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
20580 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
20590 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
205a0 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
205b0 68 65 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f  header of a reco
205c0 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  rd consists of a
205d0 20 73 65 71 75 65 6e 63 65 20 76 61 72 69 61 62   sequence variab
205e0 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
205f0 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74  rs..** These int
20600 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74  egers are almost
20610 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e   always small an
20620 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73  d are encoded as
20630 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a   a single byte..
20640 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
20650 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76   macros take adv
20660 61 6e 74 61 67 65 20 74 68 69 73 20 66 61 63 74  antage this fact
20670 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61   to provide a fa
20680 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64  st encode.** and
20690 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69   decode of the i
206a0 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72 65 63  ntegers in a rec
206b0 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49 74 20  ord header.  It 
206c0 69 73 20 66 61 73 74 65 72 20 66 6f 72 20 74 68  is faster for th
206d0 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65  e common.** case
206e0 20 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 67   where the integ
206f0 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62  er is a single b
20700 79 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69  yte.  It is a li
20710 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e  ttle slower when
20720 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
20730 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62  is two or more b
20740 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61  ytes.  But overa
20750 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65 72 2e  ll it is faster.
20760 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  .**.** The follo
20770 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73  wing expressions
20780 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a   are equivalent:
20790 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73  .**.**     x = s
207a0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
207b0 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20  2( A, &B );.**  
207c0 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75     x = sqlite3Pu
207d0 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
207e0 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d  );.**.**     x =
207f0 20 67 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c   getVarint32( A,
20800 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d   B );.**     x =
20810 20 70 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c   putVarint32( A,
20820 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66   B );.**.*/.#def
20830 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
20840 41 2c 42 29 20 20 28 75 38 29 28 28 2a 28 41 29  A,B)  (u8)((*(A)
20850 3c 28 75 38 29 30 78 38 30 29 20 3f 20 28 28 42  <(u8)0x80) ? ((B
20860 29 20 3d 20 28 75 33 32 29 2a 28 41 29 29 2c 31  ) = (u32)*(A)),1
20870 20 3a 20 73 71 6c 69 74 65 33 47 65 74 56 61 72   : sqlite3GetVar
20880 69 6e 74 33 32 28 28 41 29 2c 20 28 75 33 32 20  int32((A), (u32 
20890 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
208a0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
208b0 29 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  )  (u8)(((u32)(B
208c0 29 3c 28 75 33 32 29 30 78 38 30 29 20 3f 20 28  )<(u32)0x80) ? (
208d0 2a 28 41 29 20 3d 20 28 75 6e 73 69 67 6e 65 64  *(A) = (unsigned
208e0 20 63 68 61 72 29 28 42 29 29 2c 31 20 3a 20 73   char)(B)),1 : s
208f0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
20900 32 28 28 41 29 2c 20 28 42 29 29 29 0a 23 64 65  2((A), (B))).#de
20910 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
20920 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
20930 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
20940 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
20950 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
20960 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
20970 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56  dexAffinityStr(V
20980 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  dbe *, Index *);
20990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
209a0 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  leAffinityStr(Vd
209b0 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  be *, Table *);.
209c0 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
209d0 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
209e0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
209f0 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
20a00 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
20a10 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
20a20 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
20a30 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
20a40 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
20a50 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
20a60 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
20a70 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
20a80 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
20a90 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
20aa0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
20ab0 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a  ar*,...);.void *
20ac0 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
20ad0 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
20ae0 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
20af0 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
20b00 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
20b10 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
20b20 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
20b30 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
20b40 6f 6b 65 6e 20 2a 2a 29 3b 0a 63 6f 6e 73 74 20  oken **);.const 
20b50 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
20b60 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
20b70 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
20b80 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
20b90 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
20ba0 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
20bb0 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
20bc0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
20bd0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
20be0 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
20bf0 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
20c00 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
20c10 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
20c20 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
20c30 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
20c40 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
20c50 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
20c60 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
20c70 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 54  pParse, Expr*, T
20c80 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71  oken*);.Expr *sq
20c90 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
20ca0 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
20cb0 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
20cc0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
20cd0 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
20ce0 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
20cf0 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
20d00 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
20d10 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
20d20 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
20d30 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
20d40 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
20d50 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
20d60 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
20d70 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
20d80 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
20d90 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
20da0 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
20db0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
20dc0 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
20dd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
20de0 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
20df0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
20e00 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
20e10 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
20e20 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
20e30 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
20e40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
20e50 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
20e60 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
20e70 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
20e80 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74 29 3b 0a  t char *z,int);.
20e90 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
20ea0 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
20eb0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
20ec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
20ed0 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
20ee0 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
20ef0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
20f00 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
20f10 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
20f20 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20   void *,u8, .   
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
20f50 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
20f60 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
20f70 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
20f80 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
20f90 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
20fa0 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71  te3 *);.char *sq
20fb0 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
20fc0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
20fd0 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
20fe0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
20ff0 41 42 4c 45 5f 53 54 41 54 33 0a 63 68 61 72 20  ABLE_STAT3.char 
21000 2a 73 71 6c 69 74 65 33 55 74 66 38 74 6f 31 36  *sqlite3Utf8to16
21010 28 73 71 6c 69 74 65 33 20 2a 2c 20 75 38 2c 20  (sqlite3 *, u8, 
21020 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
21030 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20   *);.#endif.int 
21040 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d  sqlite3ValueFrom
21050 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
21060 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20  Expr *, u8, u8, 
21070 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
21080 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
21090 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
210a0 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  y(sqlite3_value 
210b0 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e  *, u8, u8);.#ifn
210c0 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
210d0 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63  AMATION.extern c
210e0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
210f0 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  ar sqlite3Opcode
21100 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65  Property[];.exte
21110 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
21120 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
21130 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
21140 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
21150 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
21160 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
21170 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
21180 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
21190 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
211a0 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
211b0 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
211c0 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
211d0 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44  SQLITE_WSD FuncD
211e0 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c  efHash sqlite3Gl
211f0 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  obalFunctions;.#
21200 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21210 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
21220 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
21230 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
21240 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
21250 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
21260 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
21270 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21280 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
21290 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
212a0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
212b0 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
212c0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
212d0 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
212e0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
212f0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
21300 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
21310 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
21320 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
21330 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
21340 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
21350 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
21360 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
21370 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
21380 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
21390 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
213a0 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
213b0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
213c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
213d0 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70  qlite3SelectPrep
213e0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
213f0 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
21400 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63  .int sqlite3Matc
21410 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20  hSpanName(const 
21420 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
21430 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
21440 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69   const char*);.i
21450 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
21460 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43  eExprNames(NameC
21470 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
21480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
21490 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
214a0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
214b0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
214c0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
214d0 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
214e0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
214f0 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
21500 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
21510 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
21520 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
21530 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
21540 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
21550 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
21560 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
21570 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
21580 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
21590 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
215a0 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
215b0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
215c0 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
215d0 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
215e0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
215f0 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
21600 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
21610 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
21620 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ze(Parse*, Token
21630 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
21640 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73  sqlite3InvokeBus
21650 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e  yHandler(BusyHan
21660 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  dler*);.int sqli
21670 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65  te3FindDb(sqlite
21680 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
21690 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61   sqlite3FindDbNa
216a0 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  me(sqlite3 *, co
216b0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
216c0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
216d0 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Load(sqlite3*,in
216e0 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c  t iDB);.void sql
216f0 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53  ite3DeleteIndexS
21700 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c  amples(sqlite3*,
21710 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
21720 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45  lite3DefaultRowE
21730 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  st(Index*);.void
21740 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
21750 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71  LikeFunctions(sq
21760 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
21770 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46  t sqlite3IsLikeF
21780 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
21790 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72  ,Expr*,int*,char
217a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
217b0 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61  MinimumFileForma
217c0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
217d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
217e0 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
217f0 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
21800 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
21810 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
21820 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
21830 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
21840 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
21850 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
21860 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66  lite3IndexKeyinf
21870 6f 28 50 61 72 73 65 20 2a 2c 20 49 6e 64 65 78  o(Parse *, Index
21880 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
21890 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
218a0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
218b0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
218c0 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a  id *, .  void (*
218d0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
218e0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
218f0 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
21900 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
21910 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
21920 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69  3_value **), voi
21930 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
21940 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44  ntext*),.  FuncD
21950 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
21960 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71  ructor.);.int sq
21970 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c  lite3ApiExit(sql
21980 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a  ite3 *db, int);.
21990 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
219a0 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73  empDatabase(Pars
219b0 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
219c0 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
219d0 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a  StrAccum*, char*
219e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
219f0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
21a00 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
21a10 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
21a20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21a30 41 70 70 65 6e 64 53 70 61 63 65 28 53 74 72 41  AppendSpace(StrA
21a40 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72  ccum*,int);.char
21a50 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
21a60 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
21a70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21a80 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74  StrAccumReset(St
21a90 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
21aa0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
21ab0 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
21ac0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
21ad0 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
21ae0 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
21af0 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
21b00 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
21b10 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
21b20 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
21b30 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
21b40 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
21b50 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
21b60 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
21b70 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  8 *);../*.** The
21b80 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
21b90 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
21ba0 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64  d parser.*/.void
21bb0 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
21bc0 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73 69  lloc(void*(*)(si
21bd0 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c  ze_t));.void sql
21be0 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
21bf0 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
21c00 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
21c10 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
21c20 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
21c30 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
21c40 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
21c50 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
21c60 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
21c70 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
21c80 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
21c90 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
21ca0 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
21cb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
21cc0 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
21cd0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
21ce0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
21cf0 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
21d00 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
21d10 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
21d20 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
21d30 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
21d40 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
21d50 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
21d60 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
21d70 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
21d80 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
21d90 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
21da0 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
21db0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
21dc0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
21dd0 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
21de0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
21df0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
21e00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
21e10 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
21e20 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
21e30 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
21e40 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
21e50 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
21e60 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21e70 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
21e80 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
21e90 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
21ea0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21eb0 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
21ec0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
21ed0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20  ite3VtabLock(X) 
21ee0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21ef0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
21f00 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21f10 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
21f20 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
21f30 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
21f40 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
21f50 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
21f60 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
21f70 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
21f80 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
21f90 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
21fa0 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
21fb0 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
21fc0 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
21fd0 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
21fe0 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
21ff0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
22000 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
22010 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 20 20 20 69  , char **);.   i
22020 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
22030 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
22040 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
22050 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
22060 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
22070 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
22080 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
22090 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
220a0 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
220b0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
220c0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
220d0 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
220e0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
220f0 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
22100 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
22110 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
22120 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
22130 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
22140 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
22150 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
22160 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
22170 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
22180 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  =0).#endif.void 
22190 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
221a0 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
221b0 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
221c0 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
221d0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
221e0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
221f0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
22200 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
22210 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
22220 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
22230 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
22240 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
22250 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
22260 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
22270 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
22280 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
22290 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
222a0 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
222b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
222c0 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
222d0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
222e0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
222f0 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
22300 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
22310 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
22320 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
22330 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
22340 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
22350 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
22360 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
22370 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
22380 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
22390 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
223a0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
223b0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
223c0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
223d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
223e0 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
223f0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
22400 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
22410 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
22420 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
22430 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
22440 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t *);.int sqlite
22450 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
22460 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22470 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
22480 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
22490 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
224a0 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
224b0 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
224c0 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
224d0 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
224e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
224f0 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
22500 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
22510 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
22520 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
22530 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
22540 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
22550 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
22560 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
22570 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
22580 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
22590 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
225a0 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
225b0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
225c0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  );.#endif../* De
225d0 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
225e0 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
225f0 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
22600 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
22610 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
22620 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
22630 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
22640 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
22650 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
22660 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
22670 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
22680 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
22690 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
226a0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
226b0 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
226c0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
226d0 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
226e0 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
226f0 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
22700 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
22710 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
22720 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
22730 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
22740 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
22750 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
22760 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
22770 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
22780 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22790 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
227a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
227b0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
227c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
227d0 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
227e0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
227f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
22800 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
22810 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
22820 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
22830 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
22840 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
22850 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20  prList*, int);. 
22860 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
22870 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
22880 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
22890 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
228a0 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
228b0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
228c0 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
228d0 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
228e0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
228f0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
22900 73 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65  s(a,b,c,d).  #de
22910 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
22920 65 63 6b 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23  eck(a,b,c,d).  #
22930 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
22940 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
22950 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22960 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
22970 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
22980 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
22990 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 30 0a 23  red(a,b,c,d) 0.#
229a0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
229b0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
229c0 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
229d0 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
229e0 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
229f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
22a00 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
22a10 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
22a20 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
22a30 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22a40 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
22a50 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
22a60 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
22a70 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
22a80 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
22a90 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
22aa0 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
22ab0 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
22ac0 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
22ad0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
22ae0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
22af0 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
22b00 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
22b10 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
22b20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
22b30 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
22b40 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
22b50 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
22b60 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
22b70 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
22b80 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
22b90 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
22ba0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
22bb0 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  TEST.** is not d
22bc0 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
22bd0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
22be0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f  UILTIN_TEST.  vo
22bf0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
22c00 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
22c10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22c20 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
22c30 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
22c40 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
22c50 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
22c60 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
22c70 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
22c80 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64  loc().#endif..#d
22c90 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
22ca0 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20 31  OWID           1
22cb0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
22cc0 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 20  X_EPH           
22cd0 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    2.#define IN_I
22ce0 4e 44 45 58 5f 49 4e 44 45 58 20 20 20 20 20 20  NDEX_INDEX      
22cf0 20 20 20 20 20 33 0a 69 6e 74 20 73 71 6c 69 74       3.int sqlit
22d00 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
22d10 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
22d20 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt*);..#ifdef SQ
22d30 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
22d40 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
22d50 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
22d60 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
22d70 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
22d80 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
22d90 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  nt, int);.  int 
22da0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
22db0 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
22dc0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22dd0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
22de0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20  lite3_file *);. 
22df0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
22e00 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65  nalExists(sqlite
22e10 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73  3_file *p);.#els
22e20 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22e30 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
22e40 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
22e50 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e  OsFile).  #defin
22e60 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
22e70 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64  Exists(p) 1.#end
22e80 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
22e90 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
22ea0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
22eb0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
22ec0 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
22ed0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
22ee0 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
22ef0 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
22f00 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
22f10 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
22f20 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
22f30 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
22f40 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
22f50 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
22f60 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
22f70 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
22f80 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22f90 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
22fa0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22fb0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
22fc0 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
22fd0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
22fe0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
22ff0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23000 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
23010 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
23020 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
23030 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
23040 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
23050 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
23060 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
23070 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
23080 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
23090 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
230a0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
230b0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
230c0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
230d0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
230e0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
230f0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
23100 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
23110 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
23120 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
23130 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
23140 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
23150 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
23160 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
23170 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
23180 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
23190 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
231a0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
231b0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
231c0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
231d0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
231e0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
231f0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
23200 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
23210 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
23220 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
23230 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
23240 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
23250 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
23260 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
23270 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
23280 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
23290 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
232a0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
232b0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
232c0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
232d0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
232e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
232f0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
23300 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
23310 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
23320 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
23330 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
23340 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
23350 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
23360 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
23370 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
23380 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
23390 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
233a0 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
233b0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
233c0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
233d0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
233e0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
233f0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
23400 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
23410 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
23420 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
23430 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
23440 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
23450 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
23460 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
23470 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
23480 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
23490 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
234a0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
234b0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
234c0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
234d0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
234e0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
234f0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
23500 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
23510 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
23520 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
23530 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
23540 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
23550 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
23560 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
23570 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
23580 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
23590 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
235a0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
235b0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
235c0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
235d0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
235e0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
235f0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
23600 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
23610 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
23620 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
23630 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
23640 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
23650 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
23660 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
23670 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
23680 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
23690 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
236a0 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
236b0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
236c0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
236d0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
236e0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
236f0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
23700 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
23710 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
23720 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
23730 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
23740 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
23750 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
23760 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
23770 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
23780 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
23790 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
237a0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
237b0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
237c0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
237d0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
237e0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
237f0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
23800 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
23810 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
23820 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
23830 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
23840 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
23850 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
23860 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
23870 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
23880 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
23890 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
238a0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
238b0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
238c0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
238d0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
238e0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
238f0 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
23900 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23910 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
23920 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23930 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
23940 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
23950 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
23960 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
23970 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
23980 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
23990 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
239a0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
239b0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
239c0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
239d0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
239e0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
239f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23a00 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
23a10 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
23a20 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23a30 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
23a40 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
23a50 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
23a60 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23a70 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
23a80 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
23a90 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
23aa0 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
23ab0 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
23ac0 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
23ad0 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
23ae0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
23af0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
23b00 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
23b10 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
23b20 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
23b30 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
23b40 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
23b50 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
23b60 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
23b70 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
23b80 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.