/ Hex Artifact Content
Login

Artifact e998703742455b2241731424c6ec142fd8d0258f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63  endif../*.** Inc
08a0: 6c 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65  lude standard he
08b0: 61 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65  ader files as ne
08c0: 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65  cessary.*/.#ifde
08d0: 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a  f HAVE_STDINT_H.
08e0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74  #include <stdint
08f0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h>.#endif.#ifde
0900: 66 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f  f HAVE_INTTYPES_
0910: 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74  H.#include <intt
0920: 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  ypes.h>.#endif..
0930: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
0940: 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75  ing macros are u
0950: 73 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e  sed to cast poin
0960: 74 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73  ters to integers
0970: 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73   and.** integers
0980: 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54   to pointers.  T
0990: 68 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68  he way you do th
09a0: 69 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f  is varies from o
09b0: 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74  ne compiler.** t
09c0: 6f 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77  o the next, so w
09d0: 65 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64  e have developed
09e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
09f0: 65 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d  et of #if statem
0a00: 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72  ents.** to gener
0a10: 61 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  ate appropriate 
0a20: 6d 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64  macros for a wid
0a30: 65 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69  e range of compi
0a40: 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lers..**.** The 
0a50: 63 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77  correct "ANSI" w
0a60: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73  ay to do this is
0a70: 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70   to use the intp
0a80: 74 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55  tr_t type. .** U
0a90: 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68  nfortunately, th
0aa0: 61 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f  at typedef is no
0ab0: 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61  t available on a
0ac0: 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72  ll compilers, or
0ad0: 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61  .** if it is ava
0ae0: 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69  ilable, it requi
0af0: 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20  res an #include 
0b00: 6f 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64  of specific head
0b10: 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79  ers.** that vary
0b20: 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e   from one machin
0b30: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a  e to the next..*
0b40: 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36  *.** Ticket #386
0b50: 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63  0:  The llvm-gcc
0b60: 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72  -4.2 compiler fr
0b70: 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20  om Apple chokes 
0b80: 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64  on.** the ((void
0b90: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0ba0: 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75  ) construct.  Bu
0bb0: 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e  t MSVC chokes on
0bc0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a   ((void*)(X))..*
0bd0: 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20  * So we have to 
0be0: 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f  define the macro
0bf0: 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77  s in different w
0c00: 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ays depending on
0c10: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72   the.** compiler
0c20: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
0c30: 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f  (__PTRDIFF_TYPE_
0c40: 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65  _)  /* This case
0c50: 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72   should work for
0c60: 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65   GCC */.# define
0c70: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0c80: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0c90: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0ca0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
0cb0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0cc0: 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54  (X)  ((int)(__PT
0cd0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29  RDIFF_TYPE__)(X)
0ce0: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
0cf0: 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20  (__GNUC__)      
0d00: 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f   /* Works for co
0d10: 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68  mpilers other th
0d20: 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66  an LLVM */.# def
0d30: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
0d40: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
0d50: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0d60: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0d70: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0d80: 20 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29   ((int)(((char*)
0d90: 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65  X)-(char*)0)).#e
0da0: 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45  lif defined(HAVE
0db0: 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20  _STDINT_H)   /* 
0dc0: 55 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66  Use this case if
0dd0: 20 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65   we have ANSI he
0de0: 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e  aders */.# defin
0df0: 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f  e SQLITE_INT_TO_
0e00: 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29  PTR(X)  ((void*)
0e10: 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23  (intptr_t)(X)).#
0e20: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
0e30: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
0e40: 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58  int)(intptr_t)(X
0e50: 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20  )).#else        
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e70: 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61    /* Generates a
0e80: 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69   warning - but i
0e90: 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a  t always works *
0ea0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
0eb0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
0ec0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20   ((void*)(X)).# 
0ed0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0ee0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0ef0: 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a  nt)(X)).#endif..
0f00: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
0f10: 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72  _THREADSAFE macr
0f20: 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65  o must be define
0f30: 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e  d as 0, 1, or 2.
0f40: 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65  .** 0 means mute
0f50: 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e  xes are permanen
0f60: 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20  tly disable and 
0f70: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e  the library is n
0f80: 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61  ever.** threadsa
0f90: 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65  fe.  1 means the
0fa0: 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69   library is seri
0fb0: 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20  alized which is 
0fc0: 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c  the highest.** l
0fd0: 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61  evel of threadsa
0fe0: 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74  fety.  2 means t
0ff0: 68 65 20 6c 69 62 61 72 79 20 69 73 20 6d 75 6c  he libary is mul
1000: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1010: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1020: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1030: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1040: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
1050: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
1060: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1070: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
1080: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
1090: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10a0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
10b0: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
10c0: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
10d0: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
10e0: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
10f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1100: 48 52 45 41 44 53 41 46 45 29 0a 23 69 66 20 64  HREADSAFE).#if d
1110: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1120: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  E).# define SQLI
1130: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48  TE_THREADSAFE TH
1140: 52 45 41 44 53 41 46 45 0a 23 65 6c 73 65 0a 23  READSAFE.#else.#
1150: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1160: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1170: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1180: 39 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 65 6e 64  9 */.#endif.#end
1190: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73  if../*.** Powers
11a0: 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73  afe overwrite is
11b0: 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20   on by default. 
11c0: 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e   But can be turn
11d0: 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20  ed off using.** 
11e0: 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57  the -DSQLITE_POW
11f0: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1200: 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  =0 command-line 
1210: 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  option..*/.#ifnd
1220: 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ef SQLITE_POWERS
1230: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20  AFE_OVERWRITE.# 
1240: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f  define SQLITE_PO
1250: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1260: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 1.#endif../*.*
1270: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46  * The SQLITE_DEF
1280: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d  AULT_MEMSTATUS m
1290: 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66  acro must be def
12a0: 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30  ined as either 0
12b0: 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74   or 1..** It det
12c0: 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
12d0: 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75  or not the featu
12e0: 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a  res related to .
12f0: 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ** SQLITE_CONFIG
1300: 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61  _MEMSTATUS are a
1310: 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
1320: 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73  ult or not. This
1330: 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65   value can.** be
1340: 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72   overridden at r
1350: 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  untime using the
1360: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
1370: 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64  ) API..*/.#if !d
1380: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1390: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29  FAULT_MEMSTATUS)
13a0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
13b0: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
13c0: 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 1.#endif../*.
13d0: 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  ** Exactly one o
13e0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13f0: 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64  macros must be d
1400: 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20  efined in order 
1410: 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68  to.** specify wh
1420: 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ich memory alloc
1430: 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20  ation subsystem 
1440: 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  to use..**.**   
1450: 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f    SQLITE_SYSTEM_
1460: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
1470: 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79  // Use normal sy
1480: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
1490: 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33       SQLITE_WIN3
14a0: 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  2_MALLOC        
14b0: 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20     // Use Win32 
14c0: 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a  native heap API.
14d0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45  **     SQLITE_ZE
14e0: 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  RO_MALLOC       
14f0: 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74       // Use a st
1500: 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61  ub allocator tha
1510: 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a  t always fails.*
1520: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d  *     SQLITE_MEM
1530: 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20  DEBUG           
1540: 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67      // Debugging
1550: 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74   version of syst
1560: 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a  em malloc().**.*
1570: 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66  * On Windows, if
1580: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33   the SQLITE_WIN3
1590: 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54  2_MALLOC_VALIDAT
15a0: 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  E macro is defin
15b0: 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73  ed and the.** as
15c0: 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20  sert() macro is 
15d0: 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61  enabled, each ca
15e0: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33  ll into the Win3
15f0: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75  2 native heap su
1600: 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20  bsystem.** will 
1610: 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61  cause HeapValida
1620: 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e  te to be called.
1630: 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61    If heap valida
1640: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c  tion should fail
1650: 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f  , an.** assertio
1660: 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65  n will be trigge
1670: 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 28 48 69 73 74  red..**.** (Hist
1680: 6f 72 69 63 61 6c 20 6e 6f 74 65 3a 20 20 54 68  orical note:  Th
1690: 65 72 65 20 75 73 65 64 20 74 6f 20 62 65 20 73  ere used to be s
16a0: 65 76 65 72 61 6c 20 6f 74 68 65 72 20 6f 70 74  everal other opt
16b0: 69 6f 6e 73 2c 20 62 75 74 20 77 65 27 76 65 0a  ions, but we've.
16c0: 2a 2a 20 70 61 72 65 64 20 69 74 20 64 6f 77 6e  ** pared it down
16d0: 20 74 6f 20 6a 75 73 74 20 74 68 65 73 65 20 74   to just these t
16e0: 68 72 65 65 2e 29 0a 2a 2a 0a 2a 2a 20 49 66 20  hree.).**.** If 
16f0: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76  none of the abov
1700: 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74  e are defined, t
1710: 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53  hen set SQLITE_S
1720: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a  YSTEM_MALLOC as.
1730: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a  ** the default..
1740: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1750: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1760: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1770: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
1780: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
1790: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
17a0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
17b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
17c0: 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72  EMDEBUG)>1.# err
17d0: 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20  or "Two or more 
17e0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
17f0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
1800: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
1810: 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65  ons\. are define
1820: 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e  d but at most on
1830: 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20  e is allowed:\. 
1840: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1850: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e  LLOC, SQLITE_WIN
1860: 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  32_MALLOC, SQLIT
1870: 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51  E_MEMDEBUG,\. SQ
1880: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1890: 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ".#endif.#if def
18a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
18b0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
18c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
18d0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
18e0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
18f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
1900: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1910: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d  LITE_MEMDEBUG)==
1920: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
1930: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
1940: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
1950: 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  If SQLITE_MALLOC
1960: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e  _SOFT_LIMIT is n
1970: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72  ot zero, then tr
1980: 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a  y to keep the.**
1990: 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79   sizes of memory
19a0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c   allocations bel
19b0: 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68  ow this value wh
19c0: 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f  ere possible..*/
19d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
19e0: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
19f0: 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65  _LIMIT).# define
1a00: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
1a10: 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23  OFT_LIMIT 1024.#
1a20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20  endif../*.** We 
1a30: 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f  need to define _
1a40: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20  XOPEN_SOURCE as 
1a50: 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72  follows in order
1a60: 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65   to enable.** re
1a70: 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20  cursive mutexes 
1a80: 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73  on most Unix sys
1a90: 74 65 6d 73 2e 20 20 42 75 74 20 4d 61 63 20 4f  tems.  But Mac O
1aa0: 53 20 58 20 69 73 20 64 69 66 66 65 72 65 6e 74  S X is different
1ab0: 2e 0a 2a 2a 20 54 68 65 20 5f 58 4f 50 45 4e 5f  ..** The _XOPEN_
1ac0: 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63 61  SOURCE define ca
1ad0: 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f  uses problems fo
1ae0: 72 20 4d 61 63 20 4f 53 20 58 20 77 65 20 61 72  r Mac OS X we ar
1af0: 65 20 74 6f 6c 64 2c 0a 2a 2a 20 73 6f 20 69 74  e told,.** so it
1b00: 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 72   is omitted ther
1b10: 65 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 23  e.  See ticket #
1b20: 32 36 37 33 2e 0a 2a 2a 0a 2a 2a 20 4c 61 74 65  2673..**.** Late
1b30: 72 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20  r we learn that 
1b40: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 69 73  _XOPEN_SOURCE is
1b50: 20 70 6f 6f 72 6c 79 20 6f 72 20 69 6e 63 6f 72   poorly or incor
1b60: 72 65 63 74 6c 79 0a 2a 2a 20 69 6d 70 6c 65 6d  rectly.** implem
1b70: 65 6e 74 65 64 20 6f 6e 20 73 6f 6d 65 20 73 79  ented on some sy
1b80: 73 74 65 6d 73 2e 20 20 53 6f 20 77 65 20 61 76  stems.  So we av
1b90: 6f 69 64 20 64 65 66 69 6e 69 6e 67 20 69 74 20  oid defining it 
1ba0: 61 74 20 61 6c 6c 0a 2a 2a 20 69 66 20 69 74 20  at all.** if it 
1bb0: 69 73 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e  is already defin
1bc0: 65 64 20 6f 72 20 69 66 20 69 74 20 69 73 20 75  ed or if it is u
1bd0: 6e 6e 65 65 64 65 64 20 62 65 63 61 75 73 65 20  nneeded because 
1be0: 77 65 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 64 6f  we are.** not do
1bf0: 69 6e 67 20 61 20 74 68 72 65 61 64 73 61 66 65  ing a threadsafe
1c00: 20 62 75 69 6c 64 2e 20 20 54 69 63 6b 65 74 20   build.  Ticket 
1c10: 23 32 36 38 31 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  #2681..**.** See
1c20: 20 61 6c 73 6f 20 74 69 63 6b 65 74 20 23 32 37   also ticket #27
1c30: 34 31 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  41..*/.#if !defi
1c40: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
1c50: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
1c60: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
1c70: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
1c80: 29 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45  ) && SQLITE_THRE
1c90: 41 44 53 41 46 45 0a 23 20 20 64 65 66 69 6e 65  ADSAFE.#  define
1ca0: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 35   _XOPEN_SOURCE 5
1cb0: 30 30 20 20 2f 2a 20 4e 65 65 64 65 64 20 74 6f  00  /* Needed to
1cc0: 20 65 6e 61 62 6c 65 20 70 74 68 72 65 61 64 20   enable pthread 
1cd0: 72 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65  recursive mutexe
1ce0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  s */.#endif../*.
1cf0: 2a 2a 20 54 68 65 20 54 43 4c 20 68 65 61 64 65  ** The TCL heade
1d00: 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e 65 65 64  rs are only need
1d10: 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
1d20: 67 20 74 68 65 20 54 43 4c 20 62 69 6e 64 69 6e  g the TCL bindin
1d30: 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  gs..*/.#if defin
1d40: 65 64 28 53 51 4c 49 54 45 5f 54 43 4c 29 20 7c  ed(SQLITE_TCL) |
1d50: 7c 20 64 65 66 69 6e 65 64 28 54 43 4c 53 48 29  | defined(TCLSH)
1d60: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e  .# include <tcl.
1d70: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1d80: 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49   NDEBUG and SQLI
1d90: 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70  TE_DEBUG are opp
1da0: 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75  osites.  It shou
1db0: 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75  ld always be tru
1dc0: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
1dd0: 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69  d(NDEBUG)==!defi
1de0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1df0: 29 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e  ).  If this is n
1e00: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75  ot currently tru
1e10: 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72  e,.** make it tr
1e20: 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f  ue by defining o
1e30: 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45  r undefining NDE
1e40: 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69  BUG..**.** Setti
1e50: 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20  ng NDEBUG makes 
1e60: 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72  the code smaller
1e70: 20 61 6e 64 20 72 75 6e 20 66 61 73 74 65 72 20   and run faster 
1e80: 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65  by disabling the
1e90: 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73 73 65 72  .** number asser
1ea0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
1eb0: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
1ec0: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
1ed0: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
1ee0: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
1ef0: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
1f00: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
1f10: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
1f20: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
1f30: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
1f40: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
1f50: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
1f60: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
1f70: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
1f80: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1f90: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1fa0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
1fb0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
1fc0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
1fd0: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
1fe0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
1ff0: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2000: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2010: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2020: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2030: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2040: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2050: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2060: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2070: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2080: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
2090: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
20a0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
20b0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
20c0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
20d0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
20e0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
20f0: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
2100: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2110: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2120: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2130: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2140: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2150: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2160: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2170: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2180: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
2190: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
21a0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
21b0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
21c0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
21d0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
21e0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
21f0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2200: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2210: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2220: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2230: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2240: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2250: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2260: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2270: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2280: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
2290: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
22a0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
22b0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
22c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
22d0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
22e0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
22f0: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
2300: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2310: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2320: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2330: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2340: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2350: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2360: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2370: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2380: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2390: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
23a0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
23b0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
23c0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
23d0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
23e0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
23f0: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2400: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2410: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2420: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2430: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2440: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2450: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2460: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2470: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2480: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2490: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
24a0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
24b0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
24c0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
24d0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
24e0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
24f0: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2500: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2510: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2520: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2530: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2540: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2550: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2560: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2570: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2580: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2590: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
25a0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
25b0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
25c0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
25d0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
25e0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
25f0: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2600: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2610: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2620: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2630: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2640: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2650: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2660: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2670: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2680: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2690: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
26a0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
26b0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
26c0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
26d0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
26e0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
26f0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2700: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2710: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2720: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2730: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2740: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2750: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2760: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2770: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2780: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2790: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
27a0: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
27b0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
27c0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
27d0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
27e0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
27f0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2800: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2810: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2820: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2830: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2840: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2850: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2860: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2870: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2880: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2890: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
28a0: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
28b0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
28c0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
28d0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
28e0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 6e  chable code then
28f0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
2900: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
2910: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
2920: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2930: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2940: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2950: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
2960: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
2970: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
2980: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
2990: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
29a0: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
29b0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
29c0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
29d0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
29e0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
29f0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
2a00: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2a10: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
2a20: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
2a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
2a40: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
2a50: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
2a60: 74 20 69 73 20 61 20 69 6e 74 65 67 65 72 20 74  t is a integer t
2a70: 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  hat is too large
2a80: 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32  .** to fit in 32
2a90: 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63  -bits.  This mac
2aa0: 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
2ab0: 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73  e of various tes
2ac0: 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f  tcase().** macro
2ad0: 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  s to verify that
2ae0: 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20   we have tested 
2af0: 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65  SQLite for large
2b00: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a  -file support..*
2b10: 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47  /.#define IS_BIG
2b20: 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e  _INT(X)  (((X)&~
2b30: 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (i64)0xffffffff)
2b40: 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  !=0)../*.** The 
2b50: 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29  macro unlikely()
2b60: 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20   is a hint that 
2b70: 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c  surrounds a bool
2b80: 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  ean.** expressio
2b90: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
2ba0: 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20  y false.  Macro 
2bb0: 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e  likely() surroun
2bc0: 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20  ds.** a boolean 
2bd0: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
2be0: 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
2bf0: 20 20 47 43 43 20 69 73 20 61 62 6c 65 20 74 6f    GCC is able to
2c00: 0a 2a 2a 20 75 73 65 20 74 68 65 73 65 20 68 69  .** use these hi
2c10: 6e 74 73 20 74 6f 20 67 65 6e 65 72 61 74 65 20  nts to generate 
2c20: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 73 6f 6d  better code, som
2c30: 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69 66 20 64  etimes..*/.#if d
2c40: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2c50: 20 26 26 20 30 0a 23 20 64 65 66 69 6e 65 20 6c   && 0.# define l
2c60: 69 6b 65 6c 79 28 58 29 20 20 20 20 5f 5f 62 75  ikely(X)    __bu
2c70: 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29  iltin_expect((X)
2c80: 2c 31 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c  ,1).# define unl
2c90: 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62 75 69 6c  ikely(X)  __buil
2ca0: 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c 30  tin_expect((X),0
2cb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
2cc0: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 21 21   likely(X)    !!
2cd0: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c  (X).# define unl
2ce0: 69 6b 65 6c 79 28 58 29 20 20 21 21 28 58 29 0a  ikely(X)  !!(X).
2cf0: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65  #endif..#include
2d00: 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e   "sqlite3.h".#in
2d10: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
2d20: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
2d30: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
2d40: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
2d50: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
2d60: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
2d70: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
2d80: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
2d90: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
2da0: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
2db0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
2dc0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
2dd0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
2de0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
2df0: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
2e00: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
2e10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
2e20: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
2e30: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
2e40: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
2e50: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
2e60: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
2e70: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
2e80: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
2e90: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
2ea0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
2eb0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
2ec0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
2ed0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
2ee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2ef0: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
2f00: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
2f10: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
2f20: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
2f30: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
2f40: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
2f50: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
2f60: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2f70: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
2f80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
2f90: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
2fa0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
2fb0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
2fc0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
2fd0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
2fe0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
2ff0: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
3000: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
3010: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
3020: 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a  e C compiler .**
3030: 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73   to omit code us
3040: 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65  ed by TEMP table
3050: 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20  s without messy 
3060: 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e  #ifndef statemen
3070: 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ts..*/.#ifdef SQ
3080: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
3090: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
30a0: 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65  MPDB 1.#else.#de
30b0: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
30c0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
30d0: 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61   The "file forma
30e0: 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20  t" number is an 
30f0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
3100: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
3110: 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45  ever.** the VDBE
3120: 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d  -level file form
3130: 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65  at changes.  The
3140: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
3150: 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20  s define the.** 
3160: 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65  the default file
3170: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20   format for new 
3180: 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68  databases and th
3190: 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66  e maximum file f
31a0: 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68  ormat.** that th
31b0: 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65  e library can re
31c0: 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ad..*/.#define S
31d0: 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46  QLITE_MAX_FILE_F
31e0: 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20  ORMAT 4.#ifndef 
31f0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
3200: 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66  ILE_FORMAT.# def
3210: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
3220: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  LT_FILE_FORMAT 4
3230: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
3240: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3250: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65   triggers are re
3260: 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75  cursive by defau
3270: 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  lt.  This can be
3280: 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72  .** changed at r
3290: 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20  un-time using a 
32a0: 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64  pragma..*/.#ifnd
32b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
32c0: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
32d0: 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51  GERS.# define SQ
32e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
32f0: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20  URSIVE_TRIGGERS 
3300: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3310: 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c  Provide a defaul
3320: 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49  t value for SQLI
3330: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e  TE_TEMP_STORE in
3340: 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20   case it is not 
3350: 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20  specified.** on 
3360: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
3370: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3380: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20  TE_TEMP_STORE.# 
3390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
33a0: 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69  MP_STORE 1.#endi
33b0: 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65  f../*.** GCC doe
33c0: 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65  s not define the
33d0: 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72   offsetof() macr
33e0: 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20  o so we'll have 
33f0: 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73  to do it.** ours
3400: 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  elves..*/.#ifnde
3410: 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69  f offsetof.#defi
3420: 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55  ne offsetof(STRU
3430: 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69  CTURE,FIELD) ((i
3440: 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54  nt)((char*)&((ST
3450: 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45  RUCTURE*)0)->FIE
3460: 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  LD)).#endif../*.
3470: 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  ** Check to see 
3480: 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20  if this machine 
3490: 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59  uses EBCDIC.  (Y
34a0: 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f  es, believe it o
34b0: 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20  r.** not, there 
34c0: 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e  are still machin
34d0: 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61  es out there tha
34e0: 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a  t use EBCDIC.).*
34f0: 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33  /.#if 'A' == '\3
3500: 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  01'.# define SQL
3510: 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c  ITE_EBCDIC 1.#el
3520: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
3530: 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69  TE_ASCII 1.#endi
3540: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72  f../*.** Integer
3550: 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73  s of known sizes
3560: 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66  .  These typedef
3570: 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  s might change f
3580: 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73  or architectures
3590: 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69  .** where the si
35a0: 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72  zes very.  Prepr
35b0: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61  ocessor macros a
35c0: 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20  re available so 
35d0: 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65  that the.** type
35e0: 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69  s can be conveni
35f0: 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20  ently redefined 
3600: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e  at compile-type.
3610: 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a    Like this:.**.
3620: 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d  **         cc '-
3630: 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f  DUINTPTR_TYPE=lo
3640: 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e  ng long int' ...
3650: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  .*/.#ifndef UINT
3660: 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  32_TYPE.# ifdef 
3670: 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20  HAVE_UINT32_T.# 
3680: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
3690: 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65  YPE uint32_t.# e
36a0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
36b0: 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT32_TYPE unsign
36c0: 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  ed int.# endif.#
36d0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
36e0: 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65  NT16_TYPE.# ifde
36f0: 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a  f HAVE_UINT16_T.
3700: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
3710: 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23  _TYPE uint16_t.#
3720: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
3730: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69  UINT16_TYPE unsi
3740: 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23  gned short int.#
3750: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3760: 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  fndef INT16_TYPE
3770: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e  .# ifdef HAVE_IN
3780: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
3790: 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36  INT16_TYPE int16
37a0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
37b0: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73  ine INT16_TYPE s
37c0: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
37d0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
37e0: 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64  UINT8_TYPE.# ifd
37f0: 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a  ef HAVE_UINT8_T.
3800: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
3810: 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65  TYPE uint8_t.# e
3820: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
3830: 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  NT8_TYPE unsigne
3840: 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23  d char.# endif.#
3850: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
3860: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
3870: 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64  HAVE_INT8_T.#  d
3880: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
3890: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
38a0: 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50   define INT8_TYP
38b0: 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  E signed char.# 
38c0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
38d0: 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  ndef LONGDOUBLE_
38e0: 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f  TYPE.# define LO
38f0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f  NGDOUBLE_TYPE lo
3900: 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66  ng double.#endif
3910: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3920: 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20  int64 i64;      
3930: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69      /* 8-byte si
3940: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3950: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75  typedef sqlite_u
3960: 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20  int64 u64;      
3970: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73     /* 8-byte uns
3980: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3990: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f  .typedef UINT32_
39a0: 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20  TYPE u32;       
39b0: 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e      /* 4-byte un
39c0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
39d0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36  /.typedef UINT16
39e0: 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20  _TYPE u16;      
39f0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75       /* 2-byte u
3a00: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
3a10: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
3a20: 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20  _TYPE i16;      
3a30: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
3a40: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3a50: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f  /.typedef UINT8_
3a60: 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20  TYPE u8;        
3a70: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75       /* 1-byte u
3a80: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
3a90: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f  */.typedef INT8_
3aa0: 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20  TYPE i8;        
3ab0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
3ac0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3ad0: 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  /../*.** SQLITE_
3ae0: 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34  MAX_U32 is a u64
3af0: 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69   constant that i
3b00: 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36  s the maximum u6
3b10: 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20  4 value.** that 
3b20: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e  can be stored in
3b30: 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c   a u32 without l
3b40: 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68  oss of data.  Th
3b50: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78  e value.** is 0x
3b60: 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66  00000000ffffffff
3b70: 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f  .  But because o
3b80: 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65  f quirks of some
3b90: 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a   compilers, we.*
3ba0: 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66  * have to specif
3bb0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74  y the value in t
3bc0: 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76  he less intuitiv
3bd0: 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a  e manner shown:.
3be0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
3bf0: 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75  E_MAX_U32  ((((u
3c00: 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f  64)1)<<32)-1)../
3c10: 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
3c20: 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
3c30: 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65  estimates of the
3c40: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
3c50: 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72  in a.** table or
3c60: 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73   index.  This is
3c70: 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74   an unsigned int
3c80: 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20  eger type.  For 
3c90: 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20  99.9% of.** the 
3ca0: 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20  world, a 32-bit 
3cb0: 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69  integer is suffi
3cc0: 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34  cient.  But a 64
3cd0: 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
3ce0: 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63  can be used at c
3cf0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64  ompile-time if d
3d00: 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  esired..*/.#ifde
3d10: 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53  f SQLITE_64BIT_S
3d20: 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36  TATS. typedef u6
3d30: 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a  4 tRowcnt;    /*
3d40: 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20   64-bit only if 
3d50: 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d  requested at com
3d60: 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c  pile-time */.#el
3d70: 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20  se. typedef u32 
3d80: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33  tRowcnt;    /* 3
3d90: 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66  2-bit is the def
3da0: 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  ault */.#endif..
3db0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
3dc0: 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
3dd0: 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73  r the machine is
3de0: 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65   big or little e
3df0: 6e 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61  ndian,.** evalua
3e00: 74 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  ted at runtime..
3e10: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
3e20: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f  _AMALGAMATION.co
3e30: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
3e40: 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78  ne = 1;.#else.ex
3e50: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
3e60: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69  qlite3one;.#endi
3e70: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69 33  f.#if defined(i3
3e80: 38 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  86) || defined(_
3e90: 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69  _i386__) || defi
3ea0: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20  ned(_M_IX86)\.  
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ec0: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65             || de
3ed0: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20  fined(__x86_64) 
3ee0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
3ef0: 5f 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  _64__).# define 
3f00: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
3f10: 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53      0.# define S
3f20: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
3f30: 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 1.# define SQ
3f40: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
3f50: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45    SQLITE_UTF16LE
3f60: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3f70: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
3f80: 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26      (*(char *)(&
3f90: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a  sqlite3one)==0).
3fa0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3fb0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28  LITTLEENDIAN (*(
3fc0: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
3fd0: 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e  one)==1).# defin
3fe0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
3ff0: 54 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47  TIVE (SQLITE_BIG
4000: 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54  ENDIAN?SQLITE_UT
4010: 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46  F16BE:SQLITE_UTF
4020: 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  16LE).#endif../*
4030: 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f  .** Constants fo
4040: 72 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e  r the largest an
4050: 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69  d smallest possi
4060: 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65  ble 64-bit signe
4070: 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54  d integers..** T
4080: 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20  hese macros are 
4090: 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b  designed to work
40a0: 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f   correctly on bo
40b0: 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34  th 32-bit and 64
40c0: 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  -bit.** compiler
40d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41  s..*/.#define LA
40e0: 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78  RGEST_INT64  (0x
40f0: 66 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29  ffffffff|(((i64)
4100: 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
4110: 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45  ).#define SMALLE
4120: 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29  ST_INT64 (((i64)
4130: 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e  -1) - LARGEST_IN
4140: 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75  T64)../* .** Rou
4150: 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74  nd up a number t
4160: 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65  o the next large
4170: 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e  r multiple of 8.
4180: 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a    This is used.*
4190: 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74  * to force 8-byt
41a0: 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36  e alignment on 6
41b0: 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75  4-bit architectu
41c0: 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
41d0: 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28  ROUND8(x)     ((
41e0: 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  (x)+7)&~7)../*.*
41f0: 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20  * Round down to 
4200: 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74  the nearest mult
4210: 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65  iple of 8.*/.#de
4220: 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28  fine ROUNDDOWN8(
4230: 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a  x) ((x)&~7)../*.
4240: 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  ** Assert that t
4250: 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20  he pointer X is 
4260: 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d  aligned to an 8-
4270: 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20  byte boundary.  
4280: 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73  This.** macro is
4290: 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69   used only withi
42a0: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65  n assert() to ve
42b0: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f  rify that the co
42c0: 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61  de gets.** all a
42d0: 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63  lignment restric
42e0: 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a  tions correct..*
42f0: 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20  *.** Except, if 
4300: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4310: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20  IGNED_MALLOC is 
4320: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68  defined, then th
4330: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
4340: 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65  malloc() impleme
4350: 6e 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75  ntion might retu
4360: 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69  rn us 4-byte ali
4370: 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73  gned.** pointers
4380: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
4390: 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62   only verify 4-b
43a0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a  yte alignment..*
43b0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
43c0: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
43d0: 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45  ALLOC.# define E
43e0: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
43f0: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
4400: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
4410: 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  0)&3)==0).#else.
4420: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
4430: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
4440: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
4450: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d   - (char*)0)&7)=
4460: 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  =0).#endif.../*.
4470: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
4480: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
4490: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
44a0: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
44b0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
44c0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
44d0: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
44e0: 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  e. .**.** The sq
44f0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
4500: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
4510: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
4520: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
4530: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
4540: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
4550: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
4560: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
4570: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
4580: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
4590: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
45a0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
45b0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
45c0: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
45d0: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
45e0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
45f0: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
4600: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
4610: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
4620: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
4630: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46  ler {.  int (*xF
4640: 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29  unc)(void *,int)
4650: 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63  ;  /* The busy c
4660: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
4670: 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20  d *pArg;        
4680: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
4690: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
46a0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
46b0: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
46c0: 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65        /* Increme
46d0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62  nted with each b
46e0: 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a  usy call */.};..
46f0: 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68  /*.** Name of th
4700: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
4710: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61  e table.  The ma
4720: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
4730: 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63  ble.** is a spec
4740: 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68  ial table that h
4750: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61  olds the names a
4760: 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  nd attributes of
4770: 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62   all.** user tab
4780: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
4790: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
47a0: 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73  ER_NAME       "s
47b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64  qlite_master".#d
47c0: 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45  efine TEMP_MASTE
47d0: 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f  R_NAME  "sqlite_
47e0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a  temp_master"../*
47f0: 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67  .** The root-pag
4800: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
4810: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a  database table..
4820: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
4830: 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a  R_ROOT       1..
4840: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f  /*.** The name o
4850: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  f the schema tab
4860: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
4870: 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20  CHEMA_TABLE(x)  
4880: 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26  ((!OMIT_TEMPDB)&
4890: 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53  &(x==1)?TEMP_MAS
48a0: 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f  TER_NAME:MASTER_
48b0: 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63  NAME)../*.** A c
48c0: 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f  onvenience macro
48d0: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
48e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
48f0: 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72  ents in.** an ar
4900: 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ray..*/.#define 
4910: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20  ArraySize(X)    
4920: 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29  ((int)(sizeof(X)
4930: 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a  /sizeof(X[0]))).
4940: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
4950: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
4960: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
4970: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
4980: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
4990: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
49a0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
49b0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
49c0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
49d0: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
49e0: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
49f0: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
4a00: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
4a10: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
4a20: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
4a30: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
4a40: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
4a50: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
4a60: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
4a70: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
4a80: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
4a90: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
4aa0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
4ab0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
4ac0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
4ad0: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
4ae0: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
4af0: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
4b00: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
4b10: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
4b20: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
4b30: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
4b40: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
4b50: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
4b60: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
4b70: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
4b80: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
4b90: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
4ba0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
4bb0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
4bc0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
4bd0: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
4be0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
4bf0: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
4c00: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
4c10: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
4c20: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
4c30: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
4c40: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
4c50: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
4c60: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
4c70: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
4c80: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
4c90: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
4ca0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
4cb0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
4cc0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
4cd0: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
4ce0: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
4cf0: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
4d00: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
4d10: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
4d20: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
4d30: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
4d40: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
4d50: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
4d60: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
4d70: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
4d80: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
4d90: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
4da0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
4db0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
4dc0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
4dd0: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
4de0: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
4df0: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
4e00: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
4e10: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
4e20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
4e30: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
4e40: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
4e50: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
4e60: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
4e70: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
4e80: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
4e90: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
4ea0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
4eb0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
4ec0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
4ed0: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
4ee0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
4ef0: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
4f00: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
4f10: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
4f20: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
4f30: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
4f40: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
4f50: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
4f60: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
4f70: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
4f80: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
4f90: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
4fa0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
4fb0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
4fc0: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
4fd0: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
4fe0: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
4ff0: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
5000: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
5010: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
5020: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
5030: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
5040: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5050: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
5060: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
5070: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
5080: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
5090: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
50a0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
50b0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
50c0: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
50d0: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
50e0: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
50f0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
5100: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
5110: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
5120: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
5130: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
5140: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
5150: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
5160: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
5170: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
5180: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
5190: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
51a0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
51b0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
51c0: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
51d0: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
51e0: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
51f0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
5200: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
5210: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
5220: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
5230: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
5240: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
5250: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
5260: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
5270: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
5280: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
5290: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
52a0: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
52b0: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
52c0: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
52d0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
52e0: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
52f0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
5300: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
5310: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
5320: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
5330: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
5340: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
5350: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
5360: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
5370: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
5380: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
5390: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
53a0: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
53b0: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
53c0: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
53d0: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
53e0: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
53f0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
5400: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
5410: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5420: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
5430: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
5440: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
5450: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
5460: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
5470: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
5480: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
5490: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
54a0: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
54b0: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
54c0: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
54d0: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
54e0: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
54f0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
5500: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5510: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
5520: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
5530: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
5540: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5550: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
5560: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
5570: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
5580: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
5590: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
55a0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
55b0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
55c0: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
55d0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
55e0: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
55f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5600: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
5610: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
5620: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
5630: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
5640: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
5650: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
5660: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
5670: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
5680: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
5690: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
56a0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
56b0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
56c0: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
56d0: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
56e0: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
56f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5700: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
5710: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
5720: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
5730: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
5740: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
5750: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
5760: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
5770: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
5780: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
5790: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
57a0: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
57b0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
57c0: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
57d0: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
57e0: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
57f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5800: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
5810: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
5820: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
5830: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5840: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
5850: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5860: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
5870: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
5880: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
5890: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
58a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
58b0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
58c0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
58d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
58e0: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
58f0: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
5900: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
5910: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
5920: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
5930: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 50 6c  f struct WherePl
5940: 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a 74 79  an WherePlan;.ty
5950: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
5960: 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f  reInfo WhereInfo
5970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5980: 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72   WhereLevel Wher
5990: 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20 44  eLevel;../*.** D
59a0: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
59b0: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
59c0: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
59d0: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
59e0: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
59f0: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
5a00: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
5a10: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
5a20: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
5a30: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
5a40: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
5a50: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
5a60: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
5a70: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
5a80: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
5a90: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
5aa0: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
5ab0: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
5ac0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
5ad0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
5ae0: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
5af0: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
5b00: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
5b10: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5b20: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
5b30: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
5b40: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
5b50: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
5b60: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
5b70: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
5b80: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
5b90: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
5ba0: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
5bb0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
5bc0: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
5bd0: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
5be0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
5bf0: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
5c00: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
5c10: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
5c20: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
5c30: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
5c40: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
5c50: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
5c60: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
5c70: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
5c80: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 69  e file */.  u8 i
5c90: 6e 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  nTrans;         
5ca0: 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72 69 74 61   /* 0: not writa
5cb0: 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e 73 61 63  ble.  1: Transac
5cc0: 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65 63 6b 70  tion.  2: Checkp
5cd0: 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20 73 61 66  oint */.  u8 saf
5ce0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
5cf0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
5d00: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
5d10: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63   to disk */.  Sc
5d20: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
5d30: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
5d40: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
5d50: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
5d60: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
5d70: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
5d80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
5d90: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
5da0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
5db0: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
5dc0: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
5dd0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
5de0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
5df0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
5e00: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
5e10: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
5e20: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
5e30: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
5e40: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
5e50: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
5e60: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
5e70: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
5e80: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
5e90: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
5ea0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
5eb0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
5ec0: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
5ed0: 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65   .** Schema obje
5ee0: 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  cts are automati
5ef0: 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65  cally deallocate
5f00: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
5f10: 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65  Btree that.** re
5f20: 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73  ferences them is
5f30: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68   destroyed.   Th
5f40: 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73  e TEMP Schema is
5f50: 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20   manually freed 
5f60: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  by.** sqlite3_cl
5f70: 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68  ose()..*.** A th
5f80: 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c  read must be hol
5f90: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
5fa0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
5fb0: 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72  g Btree in order
5fc0: 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63  .** to access Sc
5fd0: 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54  hema content.  T
5fe0: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
5ff0: 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74   the thread must
6000: 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64   also be.** hold
6010: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
6020: 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65  he sqlite3 conne
6030: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68  ction pointer th
6040: 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65  at owns the Btre
6050: 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50  e..** For a TEMP
6060: 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68   Schema, only th
6070: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  e connection mut
6080: 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  ex is required..
6090: 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61  */.struct Schema
60a0: 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f   {.  int schema_
60b0: 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74  cookie;   /* Dat
60c0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72  abase schema ver
60d0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
60e0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
60f0: 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20  nt iGeneration; 
6100: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f      /* Generatio
6110: 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72  n counter.  Incr
6120: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
6130: 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61  h change */.  Ha
6140: 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20  sh tblHash;     
6150: 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73     /* All tables
6160: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
6170: 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61   */.  Hash idxHa
6180: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
6190: 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65  l (named) indice
61a0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
61b0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67  e */.  Hash trig
61c0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
61d0: 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65  ll triggers inde
61e0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
61f0: 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20   Hash fkeyHash; 
6200: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72        /* All for
6210: 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66  eign keys by ref
6220: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61  erenced table na
6230: 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  me */.  Table *p
6240: 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20  SeqTab;      /* 
6250: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
6260: 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  nce table used b
6270: 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  y AUTOINCREMENT 
6280: 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72  */.  u8 file_for
6290: 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68  mat;      /* Sch
62a0: 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ema format versi
62b0: 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  on for this file
62c0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
62d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
62e0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
62f0: 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73   by this databas
6300: 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  e */.  u16 flags
6310: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
6320: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
6330: 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61  with this schema
6340: 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f   */.  int cache_
6350: 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75  size;      /* Nu
6360: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
6370: 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68   use in the cach
6380: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  e */.};../*.** T
6390: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
63a0: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
63b0: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
63c0: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44  its in the .** D
63d0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
63e0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
63f0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
6400: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
6410: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6420: 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  a->flags&(P))==(
6430: 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61  P)).#define DbHa
6440: 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49  sAnyProperty(D,I
6450: 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b  ,P)  (((D)->aDb[
6460: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  I].pSchema->flag
6470: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
6480: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
6490: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
64a0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
64b0: 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
64c0: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
64d0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
64e0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
64f0: 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
6500: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
6510: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
6520: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
6530: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
6540: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
6550: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
6560: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
6570: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
6580: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
6590: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
65a0: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
65b0: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
65c0: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
65d0: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
65e0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
65f0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
6600: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
6610: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
6620: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
6630: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
6640: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
6650: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
6660: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
6670: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
6680: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
6690: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
66a0: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
66b0: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
66c0: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
66d0: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
66e0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
66f0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
6700: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
6710: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
6720: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
6730: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
6740: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
6750: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
6760: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
6770: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
6780: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
6790: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
67a0: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
67b0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
67c0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
67d0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
67e0: 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a  ER_DEPTH+1)../*.
67f0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
6800: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
6810: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
6820: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
6830: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
6840: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
6850: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
6860: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
6870: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
6880: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
6890: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
68a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
68b0: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
68c0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
68d0: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
68e0: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
68f0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
6900: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
6910: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
6920: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
6930: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
6940: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
6950: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
6960: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
6970: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
6980: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
6990: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
69a0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
69b0: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
69c0: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
69d0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
69e0: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
69f0: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
6a00: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
6a10: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
6a20: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
6a30: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
6a40: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
6a50: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
6a60: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
6a70: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
6a80: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
6a90: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
6aa0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
6ab0: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
6ac0: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
6ad0: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
6ae0: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
6af0: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
6b00: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
6b10: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
6b20: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
6b30: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
6b40: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
6b50: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
6b60: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
6b70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
6b80: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
6b90: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
6ba0: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
6bb0: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
6bc0: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
6bd0: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
6be0: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
6bf0: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
6c00: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20  okaside {.  u16 
6c10: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
6c20: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
6c30: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
6c40: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61  tes */.  u8 bEna
6c50: 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
6c60: 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73   /* False to dis
6c70: 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69  able new lookasi
6c80: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  de allocations *
6c90: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
6ca0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
6cb0: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
6cc0: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
6cd0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
6ce0: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20    int nOut;     
6cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6d00: 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63  ber of buffers c
6d10: 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
6d20: 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78   out */.  int mx
6d30: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
6d40: 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d    /* Highwater m
6d50: 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a  ark for nOut */.
6d60: 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b    int anStat[3];
6d70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20            /* 0: 
6d80: 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d  hits.  1: size m
6d90: 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20  isses.  2: full 
6da0: 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b  misses */.  Look
6db0: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
6dc0: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
6dd0: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
6de0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
6df0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
6e00: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
6e10: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
6e20: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
6e30: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
6e40: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
6e50: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
6e60: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
6e70: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
6e80: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
6e90: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
6ea0: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
6eb0: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
6ec0: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
6ed0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
6ee0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
6ef0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
6f00: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  ns..**.** Hash e
6f10: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
6f20: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
6f30: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
6f40: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
6f50: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
6f60: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48  n the FuncDef.pH
6f70: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74  ash chain..*/.st
6f80: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
6f90: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
6fa0: 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  23];       /* Ha
6fb0: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
6fc0: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ctions */.};../*
6fd0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
6fe0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
6ff0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
7000: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7010: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
7020: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
7030: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
7040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
7050: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
7060: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
7070: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
7080: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
7090: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
70a0: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
70b0: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
70c0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
70d0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
70e0: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
70f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
7100: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
7110: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
7120: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
7130: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
7140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
7150: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
7160: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7180: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
7190: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
71a0: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
71b0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
71c0: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
71d0: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
71e0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
71f0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
7200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
7210: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
7220: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
7230: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 75 6e 73 69  above) */.  unsi
7240: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
7250: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
7260: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
7270: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
7280: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
7290: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
72a0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
72b0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
72c0: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
72d0: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
72f0: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
7300: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
7310: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
7320: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
7330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
7340: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
7350: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
7360: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74  ions */.  u8 aut
7370: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
7380: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
7390: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
73a0: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
73b0: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
73c0: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
73d0: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
73e0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
73f0: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
7400: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
7410: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
7420: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
7430: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
7440: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
7450: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
7460: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
7470: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
7480: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
7490: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
74a0: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
74b0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
74c0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
74d0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
74e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
74f0: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
7500: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
7510: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
7520: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
7530: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
7540: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
7550: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
7560: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
7570: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
7580: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
7590: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
75a0: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
75b0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
75c0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
75d0: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
75e0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
75f0: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7610: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
7620: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
7630: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
7640: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7660: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
7670: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
7680: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
7690: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
76a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
76b0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
76c0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
76d0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
76e0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
76f0: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
7700: 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  its */.  struct 
7710: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
7720: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
7730: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
7740: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
7750: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
7760: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
7770: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
7780: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
7790: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
77a0: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
77c0: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
77d0: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
77e0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
77f0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
7800: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
7810: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
7820: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
7830: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
7840: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
7850: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
7860: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
7870: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
7880: 69 74 3b 0a 20 20 69 6e 74 20 61 63 74 69 76 65  it;.  int active
7890: 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20  VdbeCnt;        
78a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
78b0: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
78c0: 20 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20   executing */.  
78d0: 69 6e 74 20 77 72 69 74 65 56 64 62 65 43 6e 74  int writeVdbeCnt
78e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
78f0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
7900: 65 20 56 44 42 45 73 20 74 68 61 74 20 61 72 65  e VDBEs that are
7910: 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69 6e   writing */.  in
7920: 74 20 76 64 62 65 45 78 65 63 43 6e 74 3b 20 20  t vdbeExecCnt;  
7930: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7940: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
7950: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
7960: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78  c() */.  int nEx
7970: 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  tension;        
7980: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7990: 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e   of loaded exten
79a0: 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20  sions */.  void 
79b0: 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  **aExtension;   
79c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
79d0: 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72  y of shared libr
79e0: 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20  ary handles */. 
79f0: 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28   void (*xTrace)(
7a00: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
7a10: 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72  *);        /* Tr
7a20: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
7a30: 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72    void *pTraceAr
7a40: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7a60: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74  rgument to the t
7a70: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
7a80: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
7a90: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
7aa0: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
7ab0: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
7ac0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
7ad0: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7af0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
7b00: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
7b10: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f  n */.  void *pCo
7b20: 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20  mmitArg;        
7b30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
7b40: 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43  ment to xCommitC
7b50: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a  allback() */   .
7b60: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
7b70: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
7b80: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
7b90: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
7ba0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
7bb0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
7bc0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7bd0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
7be0: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a  allback() */   .
7bf0: 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61    void (*xRollba
7c00: 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  ckCallback)(void
7c10: 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61  *); /* Invoked a
7c20: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
7c30: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61  */.  void *pUpda
7c40: 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a  teArg;.  void (*
7c50: 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
7c60: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
7c70: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
7c80: 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34  ar*,sqlite_int64
7c90: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
7ca0: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
7cb0: 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29   (*xWalCallback)
7cc0: 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33  (void *, sqlite3
7cd0: 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
7ce0: 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
7cf0: 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a  pWalArg;.#endif.
7d00: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
7d10: 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  ded)(void*,sqlit
7d20: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
7d30: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
7d40: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
7d50: 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69  ed16)(void*,sqli
7d60: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
7d70: 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  p,const void*);.
7d80: 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65    void *pCollNee
7d90: 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65  dedArg;.  sqlite
7da0: 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20  3_value *pErr;  
7db0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7dc0: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
7dd0: 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  sage */.  char *
7de0: 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20  zErrMsg;        
7df0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7e00: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
7e10: 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f  sage (UTF-8 enco
7e20: 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ded) */.  char *
7e30: 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20  zErrMsg16;      
7e40: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7e50: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
7e60: 73 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63  sage (UTF-16 enc
7e70: 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e  oded) */.  union
7e80: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
7e90: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
7ea0: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
7eb0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
7ec0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
7ed0: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
7ee0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
7ef0: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
7f00: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
7f10: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
7f20: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
7f30: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
7f40: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
7f50: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7f60: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
7f70: 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f   int (*xAuth)(vo
7f80: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
7f90: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
7fa0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
7fb0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20  t char*);.      
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
7fe0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
7ff0: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
8000: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
8010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8020: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
8030: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
8040: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
8050: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
8060: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
8070: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
8080: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
8090: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
80a0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
80b0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
80c0: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
80d0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
80e0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
80f0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
8100: 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  int nProgressOps
8110: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
8120: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
8130: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
8140: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
8150: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
8160: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
8170: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
8180: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
8190: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
81a0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
81b0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
81c0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
81d0: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
81e0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
81f0: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
8200: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
8210: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
8220: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
8230: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
8240: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
8250: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
8260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
8270: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
8280: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
8290: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
82a0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
82b0: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
82c0: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
82d0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
82e0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63  */.#endif.  Func
82f0: 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20  DefHash aFunc;  
8300: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
8310: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
8320: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
8330: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
8340: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
8350: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
8360: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
8370: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
8380: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
8390: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
83a0: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
83b0: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
83c0: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
83d0: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
83e0: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
83f0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
8400: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
8410: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
8420: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
8430: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
8440: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
8450: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
8460: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
8470: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
8480: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
8490: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
84a0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
84b0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
84c0: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
84d0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
84e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
84f0: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
8500: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
8510: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
8520: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
8530: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
8540: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
8550: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
8560: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
8570: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
8580: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
8590: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
85a0: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
85b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
85c0: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
85d0: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
85e0: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
85f0: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
8600: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
8610: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
8620: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
8630: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
8640: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
8650: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
8660: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
8670: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
8680: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
8690: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
86a0: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
86b0: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
86c0: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
86d0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
86e0: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
86f0: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
8700: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
8710: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
8720: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
8730: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
8740: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
8750: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
8760: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
8770: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
8780: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
8790: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
87a0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
87b0: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
87c0: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
87d0: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
87e0: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
87f0: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
8800: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
8810: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
8820: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8840: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
8850: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
8860: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
8870: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
8880: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
8890: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
88a0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
88b0: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
88c0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
88d0: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
88e0: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
88f0: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
8900: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
8910: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
8920: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
8930: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e  e..*/.#define EN
8940: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
8950: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
8960: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
8970: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
8980: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
8990: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
89a0: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
89b0: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
89c0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
89d0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
89e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
89f0: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
8a00: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
8a10: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
8a20: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
8a30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
8a40: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
8a50: 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77  0000004  /* Show
8a60: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
8a70: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
8a80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
8a90: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
8aa0: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 53 68 6f  00000008  /* Sho
8ab0: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
8ac0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
8ad0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
8ae0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 31  s      0x0000001
8af0: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
8b00: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
8b10: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
8b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b40: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
8b50: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
8b60: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b90: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
8ba0: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
8bb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8bc0: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
8bd0: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
8be0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
8bf0: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
8c00: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8c30: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
8c40: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
8c50: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
8c60: 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30  e       0x000000
8c70: 34 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  40  /* Debug pri
8c80: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
8c90: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
8ca0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
8cb0: 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 30 38  ing    0x0000008
8cc0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
8cd0: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
8ce0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
8cf0: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
8d00: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 31 30  ema    0x0000010
8d10: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  0  /* OK to upda
8d20: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
8d30: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8d50: 20 20 30 78 30 30 30 30 30 32 30 30 20 20 55 6e    0x00000200  Un
8d60: 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
8d70: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
8d80: 63 6b 73 20 20 20 30 78 30 30 30 30 30 34 30 30  cks   0x00000400
8d90: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
8da0: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
8db0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
8dc0: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
8dd0: 6d 6d 69 74 74 65 64 20 30 78 30 30 30 30 38 30  mmitted 0x000080
8de0: 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64  0  /* For shared
8df0: 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
8e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
8e10: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
8e20: 30 30 30 31 30 30 30 20 20 2f 2a 20 43 72 65 61  0001000  /* Crea
8e30: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
8e40: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
8e50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
8e60: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
8e70: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 55 73 65  00002000  /* Use
8e80: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
8e90: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
8ea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
8eb0: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
8ec0: 30 30 34 30 30 30 20 20 2f 2a 20 55 73 65 20 66  004000  /* Use f
8ed0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
8ee0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
8ef0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76  ine SQLITE_Recov
8f00: 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 30  eryMode   0x0000
8f10: 38 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20  8000  /* Ignore 
8f20: 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f  schema errors */
8f30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8f40: 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30  ReverseOrder   0
8f50: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 52 65  x00010000  /* Re
8f60: 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20  verse unordered 
8f70: 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69  SELECTs */.#defi
8f80: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69  ne SQLITE_RecTri
8f90: 67 67 65 72 73 20 20 20 20 30 78 30 30 30 32 30  ggers    0x00020
8fa0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72  000  /* Enable r
8fb0: 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
8fc0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8fd0: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
8fe0: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
8ff0: 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67  * Enforce foreig
9000: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
9010: 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s  */.#define SQ
9020: 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20  LITE_AutoIndex  
9030: 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20      0x00080000  
9040: 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61  /* Enable automa
9050: 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  tic indexes */.#
9060: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
9070: 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30  eferBuiltin  0x0
9080: 30 31 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66  0100000  /* Pref
9090: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
90a0: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66  in funcs */.#def
90b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
90c0: 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 32 30  xtension  0x0020
90d0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
90e0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a  load_extension *
90f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9100: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
9110: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 54  0x00400000  /* T
9120: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
9130: 69 67 67 65 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  iggers */../*.**
9140: 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c   Bits of the sql
9150: 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20  ite3.dbOptFlags 
9160: 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75  field that are u
9170: 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  sed by the.** sq
9180: 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
9190: 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
91a0: 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
91b0: 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20  ,...) interface 
91c0: 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c  to.** selectivel
91d0: 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75  y disable variou
91e0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
91f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
9200: 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65  TE_QueryFlattene
9210: 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75  r 0x0001   /* Qu
9220: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
9230: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9240: 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20  _ColumnCache    
9250: 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75  0x0002   /* Colu
9260: 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  mn cache */.#def
9270: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
9280: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
9290: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
92a0: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
92b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
92c0: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
92d0: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
92e0: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
92f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9300: 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20 20  _IdxRealAsInt   
9310: 30 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f 72  0x0010   /* Stor
9320: 65 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69 6e  e REAL as INT in
9330: 20 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65 66   indices */.#def
9340: 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69  ine SQLITE_Disti
9350: 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30  nctOpt    0x0020
9360: 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75     /* DISTINCT u
9370: 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a  sing indexes */.
9380: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
9390: 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78  overIdxScan   0x
93a0: 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69  0040   /* Coveri
93b0: 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a  ng index scans *
93c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
93d0: 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20  _OrderByIdxJoin 
93e0: 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45  0x0080   /* ORDE
93f0: 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69  R BY of joins vi
9400: 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  a index */.#defi
9410: 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f  ne SQLITE_SubqCo
9420: 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20  routine  0x0100 
9430: 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75    /* Evaluate su
9440: 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f  bqueries as coro
9450: 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e  utines */.#defin
9460: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
9470: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
9480: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
9490: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
94a0: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
94b0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
94c0: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
94d0: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
94e0: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e  isabled..*/.#ifn
94f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9500: 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65  BUILTIN_TEST.#de
9510: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
9520: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
9530: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
9540: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
9550: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
9560: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
9570: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
9580: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
9590: 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65  mask))==0).#else
95a0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
95b0: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
95c0: 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69  , mask)  0.#defi
95d0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
95e0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
95f0: 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     1.#endif../*.
9600: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
9610: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
9620: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
9630: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
9640: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
9650: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
9660: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
9670: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
9680: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
9690: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
96a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
96b0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
96c0: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
96d0: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
96e0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
96f0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
9700: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
9710: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
9720: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
9730: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
9740: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
9750: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
9760: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
9770: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9780: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
9790: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
97a0: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
97b0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
97c0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
97d0: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
97e0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
97f0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
9800: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
9810: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9820: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
9830: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
9840: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
9850: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
9860: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
9870: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
9880: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
9890: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
98a0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20  * structure.  A 
98b0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
98c0: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f  structure is sto
98d0: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
98e0: 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20  e.aFunc.** hash 
98f0: 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c  table.  When mul
9900: 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  tiple functions 
9910: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61  have the same na
9920: 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62  me, the hash tab
9930: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20  le.** points to 
9940: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
9950: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
9960: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
9970: 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72  cDef {.  i16 nAr
9980: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
9990: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
99a0: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
99b0: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
99c0: 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20 20  8 iPrefEnc;     
99d0: 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65 64      /* Preferred
99e0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 28   text encoding (
99f0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36 4c  SQLITE_UTF8, 16L
9a00: 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75 38  E, 16BE) */.  u8
9a10: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
9a20: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
9a30: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
9a40: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
9a50: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
9a60: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
9a70: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
9a80: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
9a90: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
9aa0: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
9ab0: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
9ac0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
9ad0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
9ae0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
9af0: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
9b00: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
9b10: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
9b20: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
9b30: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
9b40: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
9b50: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
9b60: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
9b70: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
9b80: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
9b90: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
9ba0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
9bb0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
9bc0: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
9bd0: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
9be0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
9bf0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
9c00: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
9c10: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
9c20: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
9c30: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
9c40: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
9c50: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
9c60: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
9c70: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
9c80: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
9c90: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
9ca0: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
9cb0: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
9cc0: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
9cd0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
9ce0: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
9cf0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
9d00: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
9d10: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
9d20: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
9d30: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
9d40: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
9d50: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
9d60: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
9d70: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
9d80: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
9d90: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
9da0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
9db0: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
9dc0: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
9dd0: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
9de0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
9df0: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
9e00: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
9e10: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
9e20: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
9e30: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
9e40: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
9e50: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
9e60: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
9e70: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
9e80: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
9e90: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
9ea0: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
9eb0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
9ec0: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
9ed0: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
9ee0: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
9ef0: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
9f00: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
9f10: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
9f20: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
9f30: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
9f40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
9f50: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
9f60: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
9f70: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
9f80: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
9f90: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
9fa0: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
9fb0: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
9fc0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
9fd0: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
9fe0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
9ff0: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
a000: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
a010: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
a020: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
a030: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
a040: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
a050: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
a060: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
a070: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
a080: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
a090: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
a0a0: 4b 45 20 20 20 20 20 30 78 30 31 20 2f 2a 20 43  KE     0x01 /* C
a0b0: 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65  andidate for the
a0c0: 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69   LIKE optimizati
a0d0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
a0e0: 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20  LITE_FUNC_CASE  
a0f0: 20 20 20 30 78 30 32 20 2f 2a 20 43 61 73 65 2d     0x02 /* Case-
a100: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
a110: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
a120: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a130: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
a140: 34 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  4 /* Ephemeral. 
a150: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
a160: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
a170: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
a180: 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c 69 74 65  L 0x08 /* sqlite
a190: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
a1a0: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
a1b0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
a1c0: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
a1d0: 20 20 30 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d    0x10 /* Built-
a1e0: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
a1f0: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
a200: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
a210: 4c 45 53 43 45 20 30 78 32 30 20 2f 2a 20 42 75  LESCE 0x20 /* Bu
a220: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
a230: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66 75  ) or ifnull() fu
a240: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a250: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
a260: 4e 47 54 48 20 20 20 30 78 34 30 20 2f 2a 20 42  NGTH   0x40 /* B
a270: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
a280: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a290: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a2a0: 5f 54 59 50 45 4f 46 20 20 20 30 78 38 30 20 2f  _TYPEOF   0x80 /
a2b0: 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f  * Built-in typeo
a2c0: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  f() function */.
a2d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
a2e0: 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
a2f0: 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
a300: 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
a310: 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
a320: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
a330: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
a340: 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
a350: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
a360: 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
a370: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
a380: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
a390: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
a3a0: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
a3b0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
a3c0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
a3d0: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c  ame .**     impl
a3e0: 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e  emented by C fun
a3f0: 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74  ction xFunc that
a400: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
a410: 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20  guments. The.** 
a420: 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64      value passed
a430: 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74   as iArg is cast
a440: 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e   to a (void*) an
a450: 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  d made available
a460: 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75  .**     as the u
a470: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
a480: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66  3_user_data()) f
a490: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  or the function.
a4a0: 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75   If .**     argu
a4b0: 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
a4c0: 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
a4d0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
a4e0: 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
a4f0: 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a  **   AGGREGATE(z
a500: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
a510: 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46  , bNC, xStep, xF
a520: 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65  inal).**     Use
a530: 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
a540: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
a550: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
a560: 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
a570: 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
a580: 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
a590: 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
a5a0: 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
a5b0: 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
a5c0: 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
a5d0: 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
a5e0: 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
a5f0: 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
a600: 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
a610: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
a620: 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
a630: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
a640: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
a650: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
a660: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
a670: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
a680: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
a690: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
a6a0: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
a6b0: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a  y a call to C .*
a6c0: 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
a6d0: 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
a6e0: 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
a6f0: 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
a700: 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
a710: 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
a720: 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
a730: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
a740: 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
a750: 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
a760: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
a770: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
a780: 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
a790: 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
a7a0: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
a7b0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
a7c0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
a7d0: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
a7e0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28  , SQLITE_UTF8, (
a7f0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
a800: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
a810: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
a820: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
a830: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
a840: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46   0, 0}.#define F
a850: 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20  UNCTION2(zName, 
a860: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
a870: 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61   xFunc, extraFla
a880: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
a890: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
a8a0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
a8b0: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
a8c0: 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
a8d0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
a8e0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
a8f0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
a900: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
a910: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
a920: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
a930: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
a940: 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53  LITE_UTF8, bNC*S
a950: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
a960: 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  OLL, \.   pArg, 
a970: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
a980: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
a990: 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a  efine LIKEFUNC(z
a9a0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
a9b0: 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72   flags) \.  {nAr
a9c0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g, SQLITE_UTF8, 
a9d0: 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29 61  flags, (void *)a
a9e0: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
a9f0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
aa00: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  , 0}.#define AGG
aa10: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
aa20: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
aa30: 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20  ep, xFinal) \.  
aa40: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
aa50: 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8, nc*SQLITE_FU
aa60: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20  NC_NEEDCOLL, \. 
aa70: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
aa80: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
aa90: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
aaa0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
aab0: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
aac0: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
aad0: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
aae0: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
aaf0: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
ab00: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
ab10: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
ab20: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
ab30: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
ab40: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
ab50: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
ab60: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
ab70: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
ab80: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
ab90: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
aba0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
abb0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abd0: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
abe0: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
abf0: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
ac00: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
ac30: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
ac40: 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  ons */.  Savepoi
ac50: 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ac70: 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
ac80: 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
ac90: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
aca0: 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
acb0: 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
acc0: 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
acd0: 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
ace0: 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
acf0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
ad00: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
ad10: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
ad20: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
ad30: 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
ad40: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
ad50: 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
ad60: 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
ad70: 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
ad80: 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
ad90: 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
ada0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
adb0: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
adc0: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
add0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
ade0: 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
adf0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
ae00: 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
ae10: 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
ae20: 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
ae30: 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
ae40: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
ae50: 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
ae60: 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
ae70: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ae90: 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
aea0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
aeb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
aee0: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
aef0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
af00: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
af10: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
af20: 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
af30: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
af40: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
af50: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
af60: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
af70: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
af80: 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
af90: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
afa0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
afb0: 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
afc0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
afd0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
afe0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70   column */.  Exp
aff0: 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
b000: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
b010: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
b020: 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20  .  char *zDflt; 
b030: 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
b040: 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66 61  text of the defa
b050: 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63  ult value */.  c
b060: 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20  har *zType;     
b070: 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f 72  /* Data type for
b080: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
b090: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
b0a0: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
b0b0: 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
b0c0: 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
b0d0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
b0e0: 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
b0f0: 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
b100: 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
b110: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
b120: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
b130: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
b140: 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
b150: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 63  alues */.  u16 c
b160: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 42  olFlags;    /* B
b170: 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
b180: 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
b190: 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
b1a0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
b1b0: 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
b1c0: 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
b1d0: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
b1e0: 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
b1f0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
b200: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
b210: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
b220: 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
b230: 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
b240: 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
b250: 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
b260: 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ble */../*.** A 
b270: 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65  "Collating Seque
b280: 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20  nce" is defined 
b290: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
b2a0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
b2b0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f  ** structure. Co
b2c0: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f  nceptually, a co
b2d0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b2e0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e   consists of a n
b2f0: 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d  ame and.** a com
b300: 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20  parison routine 
b310: 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
b320: 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73   order of that s
b330: 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49  equence..**.** I
b340: 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69  f CollSeq.xCmp i
b350: 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73  s NULL, it means
b360: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c   that the.** col
b370: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
b380: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49  is undefined.  I
b390: 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20  ndices built on 
b3a0: 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20  an undefined.** 
b3b0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
b3c0: 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65  ce may not be re
b3d0: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a  ad or written..*
b3e0: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  /.struct CollSeq
b3f0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
b400: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
b410: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
b420: 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54  ing sequence, UT
b430: 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
b440: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
b450: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
b460: 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
b470: 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76  by xCmp() */.  v
b480: 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
b490: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
b4a0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29  gument to xCmp()
b4b0: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70   */.  int (*xCmp
b4c0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
b4d0: 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  st void*, int, c
b4e0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
b4f0: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
b500: 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74  *);  /* Destruct
b510: 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a  or for pUser */.
b520: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74  };../*.** A sort
b530: 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69   order can be ei
b540: 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
b550: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b560: 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20  ITE_SO_ASC      
b570: 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   0  /* Sort in a
b580: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
b590: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b5a0: 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20  _SO_DESC      1 
b5b0: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
b5c0: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a  nding order */..
b5d0: 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
b5e0: 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
b5f0: 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
b600: 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
b610: 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
b620: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
b630: 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
b640: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
b650: 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
b660: 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
b670: 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
b680: 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
b690: 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
b6a0: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
b6b0: 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a  nsecutively.  .*
b6c0: 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
b6d0: 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
b6e0: 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
b6f0: 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61 74   with 'a'.  That
b700: 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
b710: 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
b720: 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
b730: 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
b740: 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
b750: 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
b760: 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
b770: 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
b780: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
b790: 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
b7a0: 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
b7b0: 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
b7c0: 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
b7d0: 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
b7e0: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
b7f0: 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65  mparison..*/.#de
b800: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b810: 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64 65  TEXT     'a'.#de
b820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b830: 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65  NONE     'b'.#de
b840: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b850: 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65  NUMERIC  'c'.#de
b860: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b870: 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64 65  INTEGER  'd'.#de
b880: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b890: 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64  REAL     'e'..#d
b8a0: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
b8b0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
b8c0: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
b8d0: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
b8e0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
b8f0: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
b900: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
b910: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
b920: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
b930: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
b940: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
b950: 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a  SK     0x67../*.
b960: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
b970: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
b980: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
b990: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
b9a0: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
b9b0: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a  he affinity..*/.
b9c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
b9d0: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38  UMPIFNULL   0x08
b9e0: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
b9f0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
ba00: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
ba10: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
ba20: 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f      0x10  /* Sto
ba30: 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
ba40: 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
ba50: 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
ba60: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
ba70: 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
ba80: 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  LL=NULL */../*.*
ba90: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
baa0: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
bab0: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
bac0: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
bad0: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
bae0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a  abase schema. .*
baf0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
bb00: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
bb10: 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
bb20: 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
bb30: 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
bb40: 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
bb50: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
bb60: 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
bb70: 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
bb80: 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
bb90: 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
bba0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
bbb0: 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
bbc0: 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
bbd0: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
bbe0: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
bbf0: 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
bc00: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
bc10: 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70  al table .** imp
bc20: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
bc30: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
bc40: 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
bc50: 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a  ared between .**
bc60: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
bc70: 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
bc80: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
bc90: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
bca0: 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69  ase .** schema i
bcb0: 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
bcc0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bcd0: 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
bce0: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
bcf0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
bd00: 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
bd10: 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
bd20: 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
bd30: 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
bd40: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
bd50: 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
bd60: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
bd70: 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
bd80: 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
bd90: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
bda0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bdb0: 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
bdc0: 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e  ables .** within
bdd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
bde0: 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
bdf0: 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
be00: 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72  e callers .** tr
be10: 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
be20: 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
be30: 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
be40: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
be50: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
be60: 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
be70: 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
be80: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
be90: 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
bea0: 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
beb0: 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
bec0: 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
bed0: 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
bee0: 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
bef0: 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
bf00: 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
bf10: 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
bf20: 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
bf30: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
bf40: 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
bf50: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
bf60: 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
bf70: 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
bf80: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
bf90: 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
bfa0: 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
bfb0: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
bfc0: 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
bfd0: 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
bfe0: 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
bff0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
c000: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
c010: 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
c020: 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
c030: 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
c040: 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
c050: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
c060: 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
c070: 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
c080: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
c090: 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
c0a0: 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
c0b0: 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
c0c0: 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
c0d0: 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
c0e0: 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
c0f0: 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
c100: 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  ot .** deleted a
c110: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
c120: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
c130: 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
c140: 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61  ()ed .** immedia
c150: 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
c160: 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
c170: 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
c180: 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
c190: 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
c1a0: 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
c1b0: 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
c1c0: 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
c1d0: 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
c1e0: 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
c1f0: 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
c200: 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
c210: 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20  isconnected .** 
c220: 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
c230: 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
c240: 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
c250: 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
c260: 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
c270: 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
c280: 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
c290: 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
c2a0: 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
c2b0: 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
c2c0: 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
c2d0: 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
c2e0: 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
c2f0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
c300: 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
c310: 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
c320: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
c330: 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
c340: 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
c350: 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
c360: 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
c370: 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
c380: 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
c390: 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
c3a0: 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
c3b0: 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73  located by .** s
c3c0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
c3d0: 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
c3e0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
c3f0: 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
c400: 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72  b as .** the fir
c410: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
c420: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
c430: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
c440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c450: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
c460: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
c470: 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
c480: 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4a0: 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
c4b0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
c4c0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
c4d0: 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
c4e0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
c4f0: 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
c500: 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
c510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c520: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
c530: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
c540: 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
c550: 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
c560: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
c570: 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
c580: 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
c590: 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
c5a0: 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
c5b0: 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
c5c0: 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
c5d0: 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
c5e0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
c5f0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
c600: 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
c610: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61  *.** Each SQL ta
c620: 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
c630: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
c640: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
c650: 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  he.** following 
c660: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
c670: 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20   Table.zName is 
c680: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
c690: 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65  table.  The case
c6a0: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
c6b0: 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45  .** CREATE TABLE
c6c0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
c6d0: 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20 69  ored, but case i
c6e0: 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e  s not significan
c6f0: 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69  t for.** compari
c700: 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  sons..**.** Tabl
c710: 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75  e.nCol is the nu
c720: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
c730: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20  in this table.  
c740: 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a  Table.aCol is a.
c750: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e  ** pointer to an
c760: 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e   array of Column
c770: 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65   structures, one
c780: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
c790: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74  ..**.** If the t
c7a0: 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45  able has an INTE
c7b0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
c7c0: 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65   then Table.iPKe
c7d0: 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  y is the index o
c7e0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20  f.** the column 
c7f0: 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65 79  that is that key
c800: 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54 61  .   Otherwise Ta
c810: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67  ble.iPKey is neg
c820: 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20  ative.  Note.** 
c830: 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79 70  that the datatyp
c840: 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  e of the PRIMARY
c850: 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54   KEY must be INT
c860: 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66 69  EGER for this fi
c870: 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74  eld to.** be set
c880: 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52  .  An INTEGER PR
c890: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73 65  IMARY KEY is use
c8a0: 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 66  d as the rowid f
c8b0: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a  or each row of.*
c8c0: 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  * the table.  If
c8d0: 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20   a table has no 
c8e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c8f0: 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64  KEY, then a rand
c900: 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67  om rowid.** is g
c910: 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61 63  enerated for eac
c920: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
c930: 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61  le.  TF_HasPrima
c940: 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a  ryKey is set if.
c950: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  ** the table has
c960: 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59   any PRIMARY KEY
c970: 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68  , INTEGER or oth
c980: 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  erwise..**.** Ta
c990: 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20  ble.tnum is the 
c9a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
c9b0: 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70  the root BTree p
c9c0: 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
c9d0: 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   in the.** datab
c9e0: 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61  ase file.  If Ta
c9f0: 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20 69  ble.iDb is the i
ca00: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
ca10: 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65  base table backe
ca20: 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e  nd.** in sqlite.
ca30: 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72  aDb[].  0 is for
ca40: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
ca50: 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20  se and 1 is for 
ca60: 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a  the file that.**
ca70: 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79   holds temporary
ca80: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
ca90: 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65  ces.  If TF_Ephe
caa0: 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20  meral is set.** 
cab0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
cac0: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69  s stored in a fi
cad0: 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d  le that is autom
cae0: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
caf0: 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42  .** when the VDB
cb00: 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  E cursor to the 
cb10: 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
cb20: 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 54    In this case T
cb30: 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65  able.tnum .** re
cb40: 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f 72  fers VDBE cursor
cb50: 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c   number that hol
cb60: 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65  ds the table ope
cb70: 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f  n, not to the ro
cb80: 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65  ot.** page numbe
cb90: 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61  r.  Transient ta
cba0: 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  bles are used to
cbb0: 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74   hold the result
cbc0: 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75  s of a.** sub-qu
cbd0: 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72 73  ery that appears
cbe0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65   instead of a re
cbf0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  al table name in
cc00: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
cc10: 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54   .** of a SELECT
cc20: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
cc30: 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
cc40: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
cc50: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
cc60: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
cc70: 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
cc80: 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
cc90: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
cca0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
ccb0: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
ccc0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
ccd0: 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
cce0: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
ccf0: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
cd00: 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
cd10: 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
cd20: 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
cd30: 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
cd40: 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
cd50: 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
cd60: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
cd70: 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
cd80: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
cd90: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
cda0: 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
cdb0: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
cdc0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
cdd0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cde0: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45  E_OMIT_CHECK.  E
cdf0: 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
ce00: 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
ce10: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
ce20: 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e 74  #endif.  tRowcnt
ce30: 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a   nRowEst;     /*
ce40: 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
ce50: 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
ce60: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
ce70: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  le */.  int tnum
ce80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ce90: 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20  Root BTree node 
cea0: 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28  for this table (
ceb0: 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20  see note above) 
cec0: 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
ced0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
cee0: 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
cef0: 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
cf00: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
cf10: 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
cf20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cf30: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
cf40: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
cf50: 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
cf60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
cf70: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
cf80: 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
cf90: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
cfa0: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
cfb0: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
cfc0: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
cfd0: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
cfe0: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
cff0: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
d000: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
d010: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d020: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
d030: 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
d040: 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
d050: 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
d060: 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
d070: 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
d080: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d090: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d0a0: 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
d0b0: 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
d0c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
d0d0: 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
d0e0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
d0f0: 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78  duleArg;  /* Tex
d100: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
d110: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
d120: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54  ule name */.  VT
d130: 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
d140: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
d150: 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
d160: 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
d170: 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
d180: 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
d190: 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
d1a0: 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
d1b0: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
d1c0: 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
d1d0: 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
d1e0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
d1f0: 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
d200: 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
d210: 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
d220: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
d230: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
d240: 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a   Tabe.tabFlags..
d250: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
d260: 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
d270: 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
d280: 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
d290: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
d2a0: 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
d2b0: 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
d2c0: 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
d2d0: 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
d2e0: 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
d2f0: 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
d300: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
d310: 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
d320: 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
d330: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
d340: 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
d350: 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
d360: 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
d370: 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
d380: 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
d390: 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a   table */.../*.*
d3a0: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
d3b0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
d3c0: 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
d3d0: 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
d3e0: 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
d3f0: 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
d400: 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
d410: 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
d420: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
d430: 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
d440: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
d450: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
d460: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d470: 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
d480: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
d490: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
d4a0: 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
d4b0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
d4c0: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
d4d0: 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
d4e0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
d4f0: 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
d500: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
d510: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
d520: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
d530: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  X) 0.#endif../*.
d540: 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
d550: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
d560: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
d570: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
d580: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
d590: 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
d5a0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
d5b0: 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
d5c0: 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
d5d0: 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
d5e0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
d5f0: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
d600: 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
d610: 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
d620: 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
d630: 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
d640: 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
d650: 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
d660: 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
d670: 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
d680: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
d690: 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
d6a0: 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
d6b0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
d6c0: 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
d6d0: 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
d6e0: 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
d6f0: 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
d700: 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
d710: 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
d720: 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
d730: 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
d740: 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a  le is "ex2"..**.
d750: 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
d760: 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
d770: 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
d780: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
d790: 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
d7a0: 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
d7b0: 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
d7c0: 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
d7d0: 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
d7e0: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
d7f0: 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
d800: 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
d810: 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
d820: 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
d830: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
d840: 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
d850: 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
d860: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
d870: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
d880: 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
d890: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
d8a0: 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72  om;  /* Next for
d8b0: 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f  eign key in pFro
d8c0: 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
d8d0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
d8e0: 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
d8f0: 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
d900: 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
d910: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
d920: 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f  o;    /* Next fo
d930: 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62  reign key on tab
d940: 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a  le named zTo */.
d950: 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
d960: 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
d970: 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74  foreign key on t
d980: 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a  able named zTo *
d990: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
d9a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d9b0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
d9c0: 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
d9d0: 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
d9e0: 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
d9f0: 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  red;    /* True 
da00: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
da10: 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
da20: 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
da30: 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
da40: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ];          /* O
da50: 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
da60: 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
da70: 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
da80: 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
da90: 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69  gger[2];  /* Tri
daa0: 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
dab0: 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
dac0: 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
dad0: 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66  {  /* Mapping of
dae0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
daf0: 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
db00: 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
db10: 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  From;         /*
db20: 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
db30: 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
db40: 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
db50: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
db60: 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
db70: 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59 20  f 0 use PRIMARY 
db80: 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
db90: 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  1];        /* On
dba0: 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
dbb0: 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20   of nCol column 
dbc0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
dbd0: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
dbe0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
dbf0: 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
dc00: 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
dc10: 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
dc20: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
dc30: 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
dc40: 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
dc50: 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
dc60: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
dc70: 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
dc80: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
dc90: 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
dca0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
dcb0: 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
dcc0: 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
dcd0: 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
dce0: 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
dcf0: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
dd00: 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
dd10: 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
dd20: 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
dd30: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
dd40: 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
dd50: 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
dd60: 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
dd70: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
dd80: 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
dd90: 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
dda0: 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
ddb0: 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
ddc0: 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
ddd0: 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
dde0: 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
ddf0: 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
de00: 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
de10: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
de20: 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
de30: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
de40: 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
de50: 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
de60: 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
de70: 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
de80: 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
de90: 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
dea0: 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
deb0: 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
dec0: 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
ded0: 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
dee0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
def0: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
df00: 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
df10: 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
df20: 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
df30: 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
df40: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
df50: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
df60: 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
df70: 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
df80: 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
df90: 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
dfa0: 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
dfb0: 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
dfc0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
dfd0: 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
dfe0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
dff0: 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
e000: 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
e010: 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
e020: 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
e030: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
e040: 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
e050: 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
e060: 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
e070: 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
e080: 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
e090: 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
e0a0: 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
e0b0: 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
e0c0: 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
e0d0: 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66  ey..** .** The f
e0e0: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
e0f0: 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
e100: 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
e110: 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
e120: 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
e130: 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
e140: 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
e150: 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
e160: 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
e170: 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
e180: 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
e190: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
e1a0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
e1b0: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
e1c0: 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
e1d0: 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
e1e0: 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
e1f0: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
e200: 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
e210: 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
e220: 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
e230: 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
e240: 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
e250: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
e260: 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
e270: 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
e280: 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
e290: 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
e2a0: 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
e2b0: 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
e2c0: 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
e2d0: 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
e2e0: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
e2f0: 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
e300: 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
e310: 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
e320: 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
e330: 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
e340: 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
e350: 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
e360: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
e370: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
e380: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
e390: 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
e3a0: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
e3b0: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
e3c0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
e3d0: 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
e3e0: 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
e3f0: 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
e400: 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
e410: 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77 68 61  t  99  /* Do wha
e420: 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
e430: 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
e440: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
e450: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
e460: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
e470: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
e480: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
e490: 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
e4a0: 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
e4b0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
e4c0: 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69   the .** compari
e4d0: 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
e4e0: 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74  ndex keys..*/.st
e4f0: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
e500: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
e510: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
e520: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
e530: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
e540: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
e550: 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
e560: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
e570: 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
e580: 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
e590: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e5a0: 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c  entries in aColl
e5b0: 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  [] */.  u8 *aSor
e5c0: 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53  tOrder;     /* S
e5d0: 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61  ort order for ea
e5e0: 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20  ch column.  May 
e5f0: 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c  be NULL */.  Col
e600: 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
e610: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
e620: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
e630: 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
e640: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
e650: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e660: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
e670: 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
e680: 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a  ation about a.**
e690: 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65   single index re
e6a0: 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
e6b0: 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65  ready been parse
e6c0: 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
e6d0: 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e  idual.** values.
e6e0: 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
e6f0: 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
e700: 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
e710: 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
e720: 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
e730: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
e740: 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
e750: 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
e760: 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
e770: 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
e780: 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
e790: 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
e7a0: 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
e7b0: 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
e7c0: 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
e7d0: 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
e7e0: 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
e7f0: 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
e800: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  pcode..**.** Thi
e810: 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  s structure hold
e820: 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  s a record that 
e830: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
e840: 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a   disassembled.**
e850: 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69   into its consti
e860: 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f  tuent fields..*/
e870: 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
e880: 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
e890: 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
e8a0: 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
e8b0: 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
e8c0: 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
e8d0: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
e8e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
e8f0: 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
e900: 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20  */.  u8 flags;  
e910: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c           /* Bool
e920: 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20 55  ean settings.  U
e930: 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f  NPACKED_... belo
e940: 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64  w */.  i64 rowid
e950: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  ;          /* Us
e960: 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f 50  ed by UNPACKED_P
e970: 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a  REFIX_SEARCH */.
e980: 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
e990: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
e9a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
e9b0: 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20 55  owed values of U
e9c0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c  npackedRecord.fl
e9d0: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ags.*/.#define U
e9e0: 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
e9f0: 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 4d        0x01  /* M
ea00: 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e 20  ake this key an 
ea10: 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a  epsilon larger *
ea20: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
ea30: 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 20  ED_PREFIX_MATCH 
ea40: 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72 65 66   0x02  /* A pref
ea50: 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e 73  ix match is cons
ea60: 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65  idered OK */.#de
ea70: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52  fine UNPACKED_PR
ea80: 45 46 49 58 5f 53 45 41 52 43 48 20 30 78 30 34  EFIX_SEARCH 0x04
ea90: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61    /* Ignore fina
eaa0: 6c 20 28 72 6f 77 69 64 29 20 66 69 65 6c 64 20  l (rowid) field 
eab0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
eac0: 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
ead0: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
eae0: 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
eaf0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
eb00: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
eb10: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
eb20: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
eb30: 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
eb40: 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
eb50: 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
eb60: 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
eb70: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
eb80: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
eb90: 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
eba0: 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
ebb0: 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
ebc0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
ebd0: 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
ebe0: 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
ebf0: 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
ec00: 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
ec10: 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
ec20: 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
ec30: 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
ec40: 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
ec50: 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
ec60: 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
ec70: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
ec80: 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
ec90: 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
eca0: 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
ecb0: 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
ecc0: 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
ecd0: 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
ece0: 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
ecf0: 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
ed00: 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
ed10: 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
ed20: 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74  se the .** first
ed30: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
ed40: 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61  dexed (c3) has a
ed50: 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20  n index of 2 in 
ed60: 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54  Ex1.aCol[]..** T
ed70: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
ed80: 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
ed90: 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c1) has an index
eda0: 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e   of 0 in.** Ex1.
edb0: 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78  aCol[], hence Ex
edc0: 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30  2.aiColumn[1]==0
edd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65  ..**.** The Inde
ede0: 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20  x.onError field 
edf0: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
ee00: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e  er or not the in
ee10: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  dexed columns.**
ee20: 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20   must be unique 
ee30: 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69  and what to do i
ee40: 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20  f they are not. 
ee50: 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72   When Index.onEr
ee60: 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20  ror=OE_None,.** 
ee70: 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73  it means this is
ee80: 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e   not a unique in
ee90: 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20  dex.  Otherwise 
eea0: 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69  it is a unique i
eeb0: 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ndex.** and the 
eec0: 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f  value of Index.o
eed0: 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20  nError indicate 
eee0: 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69  the which confli
eef0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a  ct resolution .*
ef00: 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
ef10: 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
ef20: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
ef30: 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
ef40: 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
ef50: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ent..*/.struct I
ef60: 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
ef70: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
ef80: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
ef90: 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  s index */.  int
efa0: 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
efb0: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
efc0: 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
efd0: 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
efe0: 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 74 52  1st is 0 */.  tR
eff0: 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b  owcnt *aiRowEst;
f000: 20 20 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41         /* From A
f010: 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
f020: 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
f030: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
f040: 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
f050: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
f060: 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
f070: 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
f080: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
f090: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
f0a0: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
f0b0: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
f0c0: 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
f0d0: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
f0e0: 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
f0f0: 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
f100: 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
f110: 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
f120: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
f130: 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
f140: 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
f150: 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
f160: 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
f170: 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
f180: 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
f190: 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
f1a0: 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20  har **azColl;   
f1b0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
f1c0: 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
f1d0: 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
f1e0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
f1f0: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
f200: 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
f210: 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
f220: 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
f230: 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
f240: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f250: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f260: 20 69 6e 20 74 61 62 6c 65 20 75 73 65 64 20 62   in table used b
f270: 79 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  y this index */.
f280: 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
f290: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
f2a0: 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
f2b0: 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
f2c0: 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
f2d0: 6e 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64 65  nsigned autoInde
f2e0: 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  x:2;    /* 1==UN
f2f0: 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
f300: 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
f310: 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
f320: 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
f330: 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
f340: 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
f350: 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
f360: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
f370: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 20 20  _ENABLE_STAT3.  
f380: 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
f390: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f3a0: 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
f3b0: 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
f3c0: 20 74 52 6f 77 63 6e 74 20 61 76 67 45 71 3b 20   tRowcnt avgEq; 
f3d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65            /* Ave
f3e0: 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 20 66  rage nEq value f
f3f0: 6f 72 20 6b 65 79 20 76 61 6c 75 65 73 20 6e 6f  or key values no
f400: 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
f410: 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
f420: 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
f430: 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
f440: 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65  t-most key */.#e
f450: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  ndif.};../*.** E
f460: 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
f470: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
f480: 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
f490: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
f4a0: 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61  mory .** using a
f4b0: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
f4c0: 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
f4d0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
f4e0: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
f4f0: 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
f500: 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
f510: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f520: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
f530: 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e 69  exSample {.  uni
f540: 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
f550: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
f560: 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53 51  e if eType is SQ
f570: 4c 49 54 45 5f 54 45 58 54 20 6f 72 20 53 51 4c  LITE_TEXT or SQL
f580: 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20 20  ITE_BLOB */.    
f590: 64 6f 75 62 6c 65 20 72 3b 20 20 20 20 20 20 20  double r;       
f5a0: 2f 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79 70  /* Value if eTyp
f5b0: 65 20 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f 41  e is SQLITE_FLOA
f5c0: 54 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 3b 20  T */.    i64 i; 
f5d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
f5e0: 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53 51  e if eType is SQ
f5f0: 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2a 2f 0a  LITE_INTEGER */.
f600: 20 20 7d 20 75 3b 0a 20 20 75 38 20 65 54 79 70    } u;.  u8 eTyp
f610: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51  e;         /* SQ
f620: 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49 54  LITE_NULL, SQLIT
f630: 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e 20 65 74  E_INTEGER ... et
f640: 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  c. */.  int nByt
f650: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  e;        /* Siz
f660: 65 20 69 6e 20 62 79 74 65 20 6f 66 20 74 65 78  e in byte of tex
f670: 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a 20 20  t or blob. */.  
f680: 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20 20 20 20  tRowcnt nEq;    
f690: 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
f6a0: 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
f6b0: 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
f6c0: 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
f6d0: 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20 20 20 20  Rowcnt nLt;     
f6e0: 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
f6f0: 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
f700: 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
f710: 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
f720: 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b 20 20 20  tRowcnt nDLt;   
f730: 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
f740: 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
f750: 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
f760: 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
f770: 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
f780: 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
f790: 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
f7a0: 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
f7b0: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
f7c0: 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
f7d0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
f7e0: 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
f7f0: 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
f800: 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
f810: 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
f820: 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
f830: 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
f840: 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
f850: 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
f860: 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
f870: 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
f880: 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
f890: 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
f8a0: 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
f8b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
f8c0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
f8d0: 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
f8e0: 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
f8f0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
f900: 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
f910: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
f920: 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
f930: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
f940: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
f950: 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
f960: 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
f970: 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
f980: 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
f990: 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
f9a0: 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
f9b0: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
f9c0: 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
f9d0: 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
f9e0: 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
f9f0: 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
fa00: 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
fa10: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
fa20: 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
fa30: 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
fa40: 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
fa50: 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
fa60: 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
fa70: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
fa80: 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
fa90: 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
faa0: 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
fab0: 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
fac0: 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
fad0: 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
fae0: 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
faf0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
fb00: 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
fb10: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
fb20: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
fb30: 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
fb40: 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
fb50: 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
fb60: 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
fb70: 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
fb80: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
fb90: 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
fba0: 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
fbb0: 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
fbc0: 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
fbd0: 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
fbe0: 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc00: 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
fc10: 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
fc20: 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
fc30: 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
fc40: 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
fc50: 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
fc60: 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
fc70: 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
fc80: 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fca0: 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
fcb0: 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
fcc0: 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
fcd0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
fce0: 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
fcf0: 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
fd00: 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
fd10: 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75  xPTab;     /* Cu
fd20: 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  rsor number of p
fd30: 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
fd40: 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c   int nSortingCol
fd50: 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
fd60: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
fd70: 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
fd80: 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ex */.  ExprList
fd90: 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
fda0: 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20  /* The group by 
fdb0: 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
fdc0: 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
fdd0: 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
fde0: 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
fdf0: 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
fe00: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
fe10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fe20: 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
fe30: 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fe50: 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
fe60: 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
fe70: 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
fe80: 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
fe90: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
fea0: 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
feb0: 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
fec0: 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
fed0: 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
fee0: 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
fef0: 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
ff00: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
ff10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ff20: 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
ff30: 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
ff40: 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
ff50: 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ff70: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
ff80: 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
ff90: 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
ffa0: 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
ffb0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
ffc0: 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
ffd0: 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
ffe0: 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
fff0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
10000 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
10010 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
10020 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
10050 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
10060 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
10070 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
10080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10090 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
100a0 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
100b0 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
100c0 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
100d0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
100e0 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
100f0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
10100 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
10110 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
10120 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
10130 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
10140 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
10150 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10160 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
10170 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
101a0 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
101b0 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
101c0 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
101d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
101e0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75  phemeral table u
101f0 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44  sed to enforce D
10200 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a  ISTINCT */.  } *
10210 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75  aFunc;.  int nFu
10220 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
10230 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
10240 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d  tries in aFunc[]
10250 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
10260 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72  e datatype ynVar
10270 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74   is a signed int
10280 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d  eger, either 16-
10290 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a  bit or 32-bit..*
102a0 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20  * Usually it is 
102b0 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66  16-bits.  But if
102c0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
102d0 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67  ABLE_NUMBER is g
102e0 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33  reater.** than 3
102f0 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20  2767 we have to 
10300 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20  make it 32-bit. 
10310 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65   16-bit is prefe
10320 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20  rred because.** 
10330 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d  it uses less mem
10340 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20  ory in the Expr 
10350 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73  object, which is
10360 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73   a big memory us
10370 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73  er.** in systems
10380 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72   with lots of pr
10390 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
103a0 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c  s.  And few appl
103b0 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64  ications.** need
103c0 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74   more than about
103d0 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62   10 or 20 variab
103e0 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65  les.  But some e
103f0 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e  xtreme users wan
10400 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65  t.** to have pre
10410 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
10420 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37   with over 32767
10430 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20   variables, and 
10440 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20  for them.** the 
10450 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  option is availa
10460 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d  ble (at compile-
10470 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51  time)..*/.#if SQ
10480 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
10490 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a  E_NUMBER<=32767.
104a0 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61  typedef i16 ynVa
104b0 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66  r;.#else.typedef
104c0 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64   int ynVar;.#end
104d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  if../*.** Each n
104e0 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
104f0 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
10500 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
10510 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
10520 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
10530 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
10540 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74   opcode. The int
10550 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
10560 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
10570 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
10580 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70   here. For examp
10590 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64  le, the parser d
105a0 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20  efines TK_GE to 
105b0 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  be an integer.**
105c0 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69   code representi
105d0 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72  ng the ">=" oper
105e0 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20  ator. This same 
105f0 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20  integer code is 
10600 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70  reused.** to rep
10610 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74  resent the great
10620 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c  er-than-or-equal
10630 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  -to operator in 
10640 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a  the expression.*
10650 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  * tree..**.** If
10660 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
10670 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
10680 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54  l (TK_INTEGER, T
10690 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42  K_FLOAT, TK_BLOB
106a0 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  , .** or TK_STRI
106b0 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
106c0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
106d0 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
106e0 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
106f0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
10700 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
10710 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
10720 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
10730 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61  tains the .** va
10740 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
10750 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
10760 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
10770 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
10780 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
10790 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
107a0 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
107b0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
107c0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
107d0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
107e0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
107f0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
10800 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
10810 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
10820 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
10830 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
10840 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
10850 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
10860 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
10870 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
10880 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
10890 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
108a0 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
108b0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
108c0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
108d0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
108e0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
108f0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
10900 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
10910 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
10920 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
10930 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
10940 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
10950 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
10960 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
10970 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
10980 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
10990 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
109a0 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
109b0 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
109c0 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a  is .** valid..**
109d0 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
109e0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
109f0 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
10a00 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
10a10 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
10a20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
10a30 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
10a40 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
10a50 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
10a60 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
10a70 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
10a80 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
10a90 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
10aa0 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
10ab0 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
10ac0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
10ad0 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
10ae0 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
10af0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
10b00 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
10b10 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
10b20 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
10b30 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
10b40 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
10b50 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
10b60 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
10b70 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
10b80 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
10b90 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
10ba0 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
10bb0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
10bc0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
10bd0 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
10be0 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
10bf0 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20  estion mark .** 
10c00 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e  character '?' in
10c10 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
10c20 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72  L) then the Expr
10c30 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68  .iTable holds th
10c40 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62  e index .** numb
10c50 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
10c60 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
10c70 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
10c80 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
10c90 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
10ca0 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
10cb0 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
10cc0 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
10cd0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
10ce0 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
10cf0 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
10d00 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
10d10 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
10d20 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
10d30 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
10d40 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
10d50 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
10d60 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
10d70 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
10d80 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
10d90 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
10da0 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
10db0 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
10dc0 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
10dd0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
10de0 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
10df0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
10e00 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
10e10 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
10e20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
10e30 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
10e40 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
10e50 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
10e60 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
10e70 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
10e80 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
10e90 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
10ea0 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
10eb0 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
10ec0 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
10ed0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
10ee0 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
10ef0 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
10f00 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
10f10 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
10f20 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
10f30 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
10f40 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
10f50 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
10f60 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
10f70 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
10f80 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
10f90 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
10fa0 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
10fb0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
10fc0 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
10fd0 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
10fe0 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
10ff0 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
11000 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
11010 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
11020 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
11030 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
11040 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
11050 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
11060 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
11070 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
11080 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
11090 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
110a0 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
110b0 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
110c0 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
110d0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
110e0 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
110f0 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
11100 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
11110 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
11120 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
11130 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
11140 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
11150 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
11160 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
11170 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
11180 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111a0 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
111b0 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
111c0 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
111d0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
111e0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
111f0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
11200 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
11210 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  mn */.  u16 flag
11220 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
11230 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
11240 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
11250 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
11260 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
11270 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
11280 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
11290 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
112a0 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
112b0 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
112c0 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
112d0 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
112e0 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
112f0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
11300 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
11310 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
11320 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
11330 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
11340 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
11350 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
11360 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
11370 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
11380 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
11390 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
113a0 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
113b0 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
113c0 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n. .  **********
113d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
113e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
113f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
11410 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
11420 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
11430 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
11440 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
11450 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
11460 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
11470 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
11480 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75 6e  List;     /* Fun
11490 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20  ction arguments 
114a0 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49 4e  or in "<expr> IN
114b0 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20 2a   (<expr-list)" *
114c0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
114d0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55 73  elect;     /* Us
114e0 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65 63  ed for sub-selec
114f0 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20 49  ts and "<expr> I
11500 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a 2f  N (<select>)" */
11510 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
11520 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
11530 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
11540 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
11550 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
11560 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
11570 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
11580 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
11590 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
115a0 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
115b0 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
115c0 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
115d0 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
115e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11620 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
11630 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
11640 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
11650 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
11660 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
11670 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
11680 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
11690 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
116a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
116b0 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
116c0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
116d0 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
11700 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
11710 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
11740 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
11750 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  d */.  ynVar iCo
11760 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
11770 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
11780 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
11790 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117b0 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
117c0 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
117d0 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
117e0 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11800 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
11810 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
11820 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
11830 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
11840 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
11850 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
11860 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
11870 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
11880 66 6c 61 67 73 32 3b 20 20 20 20 20 20 20 20 20  flags2;         
11890 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 73 65      /* Second se
118a0 74 20 6f 66 20 66 6c 61 67 73 2e 20 20 45 50 32  t of flags.  EP2
118b0 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  _... */.  u8 op2
118c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
118d0 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
118e0 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
118f0 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11910 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
11920 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
11930 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11950 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
11960 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
11970 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
11980 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
11990 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
119a0 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
119b0 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
119c0 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
119d0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
119e0 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
119f0 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
11a00 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ns. */.};../*.**
11a10 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
11a20 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
11a30 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
11a40 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
11a50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
11a60 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 31  romJoin   0x0001
11a70 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20    /* Originated 
11a80 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  in ON or USING c
11a90 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
11aa0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
11ab0 67 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20  g        0x0002 
11ac0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
11ad0 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
11ae0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
11af0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c  #define EP_Resol
11b00 76 65 64 20 20 20 30 78 30 30 30 34 20 20 2f 2a  ved   0x0004  /*
11b10 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72   IDs have been r
11b20 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d  esolved to COLUM
11b30 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  Ns */.#define EP
11b40 5f 45 72 72 6f 72 20 20 20 20 20 20 30 78 30 30  _Error      0x00
11b50 30 38 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f  08  /* Expressio
11b60 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  n contains one o
11b70 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f  r more errors */
11b80 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74  .#define EP_Dist
11b90 69 6e 63 74 20 20 20 30 78 30 30 31 30 20 20 2f  inct   0x0010  /
11ba0 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
11bb0 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e  tion with DISTIN
11bc0 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  CT keyword */.#d
11bd0 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65  efine EP_VarSele
11be0 63 74 20 20 30 78 30 30 32 30 20 20 2f 2a 20 70  ct  0x0020  /* p
11bf0 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c  Select is correl
11c00 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61  ated, not consta
11c10 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
11c20 5f 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30  _DblQuoted  0x00
11c30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77  40  /* token.z w
11c40 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e  as originally in
11c50 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e   "..." */.#defin
11c60 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20  e EP_InfixFunc  
11c70 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20  0x0080  /* True 
11c80 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e  for an infix fun
11c90 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f  ction: LIKE, GLO
11ca0 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e  B, etc */.#defin
11cb0 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 20  e EP_Collate    
11cc0 30 78 30 31 30 30 20 20 2f 2a 20 54 72 65 65 20  0x0100  /* Tree 
11cd0 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f  contains a TK_CO
11ce0 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f 72 20 2a  LLATE opeartor *
11cf0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78  /.#define EP_Fix
11d00 65 64 44 65 73 74 20 20 30 78 30 32 30 30 20 20  edDest  0x0200  
11d10 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65 64 65 64  /* Result needed
11d20 20 69 6e 20 61 20 73 70 65 63 69 66 69 63 20 72   in a specific r
11d30 65 67 69 73 74 65 72 20 2a 2f 0a 23 64 65 66 69  egister */.#defi
11d40 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
11d50 20 30 78 30 34 30 30 20 20 2f 2a 20 49 6e 74 65   0x0400  /* Inte
11d60 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
11d70 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
11d80 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
11d90 73 53 65 6c 65 63 74 20 20 30 78 30 38 30 30 20  sSelect  0x0800 
11da0 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
11db0 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
11dc0 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
11dd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 69 6e 74  .#define EP_Hint
11de0 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f         0x1000  /
11df0 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  * Not used */.#d
11e00 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
11e10 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 45      0x2000  /* E
11e20 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45 58  xpr struct is EX
11e30 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62  PR_REDUCEDSIZE b
11e40 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
11e50 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c  fine EP_TokenOnl
11e60 79 20 20 30 78 34 30 30 30 20 20 2f 2a 20 45 78  y  0x4000  /* Ex
11e70 70 72 20 73 74 72 75 63 74 20 69 73 20 45 58 50  pr struct is EXP
11e80 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
11e90 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
11ea0 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
11eb0 20 20 20 20 30 78 38 30 30 30 20 20 2f 2a 20 48      0x8000  /* H
11ec0 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
11ed0 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
11ee0 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f 2a 0a  malloc() */../*.
11ef0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
11f00 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
11f10 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
11f20 20 45 78 70 72 2e 66 6c 61 67 73 32 20 66 69 65   Expr.flags2 fie
11f30 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
11f40 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b 65 6e  P2_MallocedToken
11f50 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4e 65 65    0x0001  /* Nee
11f60 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
11f70 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
11f80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 32 5f   */.#define EP2_
11f90 49 72 72 65 64 75 63 69 62 6c 65 20 20 20 20 30  Irreducible    0
11fa0 78 30 30 30 32 20 20 2f 2a 20 43 61 6e 6e 6f 74  x0002  /* Cannot
11fb0 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
11fc0 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 0a 2f 2a  this Expr */../*
11fd0 0a 2a 2a 20 54 68 65 20 70 73 65 75 64 6f 2d 72  .** The pseudo-r
11fe0 6f 75 74 69 6e 65 20 73 71 6c 69 74 65 33 45 78  outine sqlite3Ex
11ff0 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c 65  prSetIrreducible
12000 20 73 65 74 73 20 74 68 65 20 45 50 32 5f 49 72   sets the EP2_Ir
12010 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20 66 6c 61  reducible.** fla
12020 67 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69  g on an expressi
12030 6f 6e 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  on structure.  T
12040 68 69 73 20 66 6c 61 67 20 69 73 20 75 73 65 64  his flag is used
12050 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c 79 2e 20   for VV&A only. 
12060 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 20   The.** routine 
12070 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61  is implemented a
12080 73 20 61 20 6d 61 63 72 6f 20 74 68 61 74 20 6f  s a macro that o
12090 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65 6e 20 69  nly works when i
120a0 6e 20 64 65 62 75 67 67 69 6e 67 20 6d 6f 64 65  n debugging mode
120b0 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f 74 20 74  ,.** so as not t
120c0 6f 20 62 75 72 64 65 6e 20 70 72 6f 64 75 63 74  o burden product
120d0 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66  ion code..*/.#if
120e0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
120f0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
12100 74 49 72 72 65 64 75 63 69 62 6c 65 28 58 29 20  tIrreducible(X) 
12110 20 28 58 29 2d 3e 66 6c 61 67 73 32 20 7c 3d 20   (X)->flags2 |= 
12120 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65 0a  EP2_Irreducible.
12130 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
12140 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
12150 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e(X).#endif../*.
12160 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
12170 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
12180 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
12190 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
121a0 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
121b0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
121c0 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
121d0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
121e0 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
121f0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
12200 41 6e 79 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AnyProperty(E,P)
12210 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
12220 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
12230 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
12240 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
12250 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
12260 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
12270 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
12280 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
12290 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
122a0 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
122b0 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
122c0 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
122d0 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20  xpr .** struct, 
122e0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
122f0 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
12300 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
12310 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e  xpr.flags .** an
12320 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  d an Expr struct
12330 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b   with the EP_Tok
12340 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e  enOnly flag set.
12350 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
12360 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20  _FULLSIZE       
12370 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29      sizeof(Expr)
12380 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
12390 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69  ll size */.#defi
123a0 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ne EXPR_REDUCEDS
123b0 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65  IZE        offse
123c0 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29  tof(Expr,iTable)
123d0 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74    /* Common feat
123e0 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ures */.#define 
123f0 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
12400 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66  ZE      offsetof
12410 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f  (Expr,pLeft)   /
12420 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73  * Fewer features
12430 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73   */../*.** Flags
12440 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
12450 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
12460 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68  function. See th
12470 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
12480 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74   .** above sqlit
12490 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
124a0 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
124b0 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
124c0 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
124d0 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
124e0 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
124f0 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
12500 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
12510 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
12520 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
12530 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
12540 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
12550 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
12560 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
12570 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
12580 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
12590 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
125a0 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
125b0 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
125c0 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
125d0 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
125e0 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
125f0 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
12600 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
12610 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
12620 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
12630 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
12640 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
12650 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
12660 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
12670 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
12680 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
12690 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
126a0 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
126b0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
126c0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
126d0 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
126e0 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
126f0 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
12700 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
12710 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
12720 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
12730 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
12740 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
12750 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
12760 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
12770 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
12780 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
12790 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
127a0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
127b0 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
127c0 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
127d0 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
127e0 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
127f0 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
12800 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
12810 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
12820 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
12830 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
12840 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
12850 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
12860 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
12870 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
12880 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12890 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
128a0 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
128b0 20 69 6e 74 20 69 45 43 75 72 73 6f 72 3b 20 20   int iECursor;  
128c0 20 20 20 20 20 20 20 20 2f 2a 20 56 44 42 45 20          /* VDBE 
128d0 43 75 72 73 6f 72 20 61 73 73 6f 63 69 61 74 65  Cursor associate
128e0 64 20 77 69 74 68 20 74 68 69 73 20 45 78 70 72  d with this Expr
128f0 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  List */.  struct
12900 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
12910 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
12920 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
12930 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
12940 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
12950 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f     /* The list o
12960 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  f expressions */
12970 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
12980 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12990 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
129a0 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
129b0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
129c0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
129d0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
129e0 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
129f0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
12a00 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
12a10 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
12a20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
12a30 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
12a40 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
12a50 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
12a60 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
12a70 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
12a80 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
12a90 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
12aa0 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
12ab0 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
12ac0 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 4f 72 64   */.    u16 iOrd
12ad0 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 20 20  erByCol;        
12ae0 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
12af0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
12b00 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
12b10 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
12b20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
12b30 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
12b40 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
12b50 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20  me */.  } *a;   
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12b70 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20  * Alloc a power 
12b80 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f  of two greater o
12b90 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72  r equal to nExpr
12ba0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
12bb0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
12bc0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
12bd0 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65  sed by the parse
12be0 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68  r to record both
12bf0 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72  .** the parse tr
12c00 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73  ee for an expres
12c10 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61  sion and the spa
12c20 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  n of input text 
12c30 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73  for an.** expres
12c40 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  sion..*/.struct 
12c50 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70  ExprSpan {.  Exp
12c60 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
12c70 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73     /* The expres
12c80 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20  sion parse tree 
12c90 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
12ca0 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69  *zStart;   /* Fi
12cb0 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
12cc0 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20   input text */. 
12cd0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e   const char *zEn
12ce0 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68  d;     /* One ch
12cf0 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65  aracter past the
12d00 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65   end of input te
12d10 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  xt */.};../*.** 
12d20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
12d30 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
12d40 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
12d50 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
12d60 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
12d70 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
12d80 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
12d90 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
12da0 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
12db0 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
12dc0 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
12dd0 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
12de0 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
12df0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
12e00 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
12e10 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
12e20 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
12e30 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
12e40 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
12e50 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
12e60 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
12e70 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
12e80 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
12e90 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
12ea0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
12eb0 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
12ec0 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
12ed0 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
12ee0 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
12ef0 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
12f00 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
12f10 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
12f20 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
12f30 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
12f40 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  .  struct IdList
12f50 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
12f60 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
12f70 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65   Name of the ide
12f80 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  ntifier */.    i
12f90 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
12fa0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d   /* Index in som
12fb0 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f  e Table.aCol[] o
12fc0 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  f a column named
12fd0 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
12fe0 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20  ;.  int nId;    
12ff0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13000 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  f identifiers on
13010 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
13020 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
13030 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
13040 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
13050 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
13060 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
13070 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
13080 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
13090 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
130a0 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
130b0 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
130c0 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
130d0 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
130e0 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
130f0 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
13100 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
13110 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
13120 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75  86..*/.typedef u
13130 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a  64 Bitmask;../*.
13140 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
13150 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
13160 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
13170 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
13180 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
13190 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
131a0 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
131b0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
131c0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
131d0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
131e0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
131f0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
13200 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
13210 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
13220 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
13230 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
13240 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
13250 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
13260 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
13270 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
13280 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
13290 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
132a0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
132b0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
132c0 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
132d0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
132e0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
132f0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
13300 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
13310 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
13320 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
13330 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
13340 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
13350 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
13360 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
13370 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
13380 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
13390 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
133a0 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
133b0 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
133c0 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
133d0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
133e0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
133f0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
13400 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
13410 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
13420 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
13430 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
13440 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
13450 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
13460 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
13470 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
13480 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
13490 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
134a0 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
134b0 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
134c0 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
134d0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
134e0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
134f0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
13500 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
13510 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
13520 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
13530 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
13540 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
13550 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
13560 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
13570 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
13580 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
13590 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
135a0 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 31 36 20  SrcList {.  i16 
135b0 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
135c0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
135d0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
135e0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
135f0 65 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c 6c 6f  e */.  i16 nAllo
13600 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
13610 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
13620 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
13630 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
13640 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
13650 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
13660 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
13670 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
13680 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
13690 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
136a0 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
136b0 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
136c0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
136d0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
136e0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
136f0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
13700 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
13710 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
13720 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
13730 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
13740 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
13750 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
13760 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
13770 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
13780 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
13790 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
137a0 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
137b0 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
137c0 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
137d0 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
137e0 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
137f0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
13800 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
13810 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
13820 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
13830 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
13840 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
13850 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
13860 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
13870 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
13880 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
13890 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
138a0 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72   able and the pr
138b0 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e  evious */.    un
138c0 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
138d0 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
138e0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
138f0 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
13900 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
13910 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a  d isCorrelated :
13920 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73  1;  /* True if s
13930 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72  ub-query is corr
13940 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e  elated */.    un
13950 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
13960 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
13970 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
13980 72 6f 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64  routine */.#ifnd
13990 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
139a0 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
139b0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
139c0 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
139d0 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
139e0 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
139f0 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
13a00 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
13a10 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
13a20 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
13a30 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
13a40 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
13a50 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
13a60 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
13a70 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
13a80 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
13a90 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
13aa0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
13ab0 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
13ac0 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
13ad0 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
13ae0 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
13af0 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68  s used */.    ch
13b00 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20  ar *zIndex;     
13b10 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
13b20 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
13b30 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
13b40 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
13b50 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65  ndex;    /* Inde
13b60 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
13b70 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e  esponding to zIn
13b80 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  dex, if any */. 
13b90 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
13ba0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
13bb0 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
13bc0 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
13bd0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
13be0 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
13bf0 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
13c00 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
13c10 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
13c20 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
13c30 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
13c40 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
13c50 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
13c60 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
13c70 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
13c80 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
13c90 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
13ca0 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
13cb0 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
13cc0 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
13cd0 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
13ce0 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
13cf0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
13d00 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
13d10 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
13d20 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
13d30 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
13d40 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
13d50 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
13d60 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
13d70 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
13d80 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
13d90 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
13da0 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
13db0 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
13dc0 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
13dd0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68 65  */.../*.** A Whe
13de0 72 65 50 6c 61 6e 20 6f 62 6a 65 63 74 20 68 6f  rePlan object ho
13df0 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
13e00 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 61  that describes a
13e10 20 6c 6f 6f 6b 75 70 0a 2a 2a 20 73 74 72 61 74   lookup.** strat
13e20 65 67 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  egy..**.** This 
13e30 6f 62 6a 65 63 74 20 69 73 20 69 6e 74 65 6e 64  object is intend
13e40 65 64 20 74 6f 20 62 65 20 6f 70 61 71 75 65 20  ed to be opaque 
13e50 6f 75 74 73 69 64 65 20 6f 66 20 74 68 65 20 77  outside of the w
13e60 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a  here.c module..*
13e70 2a 20 49 74 20 69 73 20 69 6e 63 6c 75 64 65 64  * It is included
13e80 20 68 65 72 65 20 6f 6e 6c 79 20 73 6f 20 74 68   here only so th
13e90 61 74 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 72  at that compiler
13ea0 20 77 69 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20 62   will know how b
13eb0 69 67 20 69 74 0a 2a 2a 20 69 73 2e 20 20 4e 6f  ig it.** is.  No
13ec0 6e 65 20 6f 66 20 74 68 65 20 66 69 65 6c 64 73  ne of the fields
13ed0 20 69 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   in this object 
13ee0 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 6f  should be used o
13ef0 75 74 73 69 64 65 20 6f 66 0a 2a 2a 20 74 68 65  utside of.** the
13f00 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e   where.c module.
13f10 0a 2a 2a 0a 2a 2a 20 57 69 74 68 69 6e 20 74 68  .**.** Within th
13f20 65 20 75 6e 69 6f 6e 2c 20 70 49 64 78 20 69 73  e union, pIdx is
13f30 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20   only used when 
13f40 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e  wsFlags&WHERE_IN
13f50 44 45 58 45 44 20 69 73 20 74 72 75 65 2e 0a 2a  DEXED is true..*
13f60 2a 20 70 54 65 72 6d 20 69 73 20 6f 6e 6c 79 20  * pTerm is only 
13f70 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67  used when wsFlag
13f80 73 26 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52  s&WHERE_MULTI_OR
13f90 20 69 73 20 74 72 75 65 2e 20 20 41 6e 64 20 70   is true.  And p
13fa0 56 74 61 62 49 64 78 0a 2a 2a 20 69 73 20 6f 6e  VtabIdx.** is on
13fb0 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73 46  ly used when wsF
13fc0 6c 61 67 73 26 57 48 45 52 45 5f 56 49 52 54 55  lags&WHERE_VIRTU
13fd0 41 4c 54 41 42 4c 45 20 69 73 20 74 72 75 65 2e  ALTABLE is true.
13fe0 20 20 49 74 20 69 73 20 6e 65 76 65 72 20 74 68    It is never th
13ff0 65 0a 2a 2a 20 63 61 73 65 20 74 68 61 74 20 6d  e.** case that m
14000 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66 20  ore than one of 
14010 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73  these conditions
14020 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 72   is true..*/.str
14030 75 63 74 20 57 68 65 72 65 50 6c 61 6e 20 7b 0a  uct WherePlan {.
14040 20 20 75 33 32 20 77 73 46 6c 61 67 73 3b 20 20    u32 wsFlags;  
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 20 2f 2a 20 57 48 45 52 45 5f 2a 20 66 6c 61 67   /* WHERE_* flag
14070 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 20  s that describe 
14080 74 68 65 20 73 74 72 61 74 65 67 79 20 2a 2f 0a  the strategy */.
14090 20 20 75 31 36 20 6e 45 71 3b 20 20 20 20 20 20    u16 nEq;      
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 3d 3d   /* Number of ==
140c0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
140d0 20 20 75 31 36 20 6e 4f 42 53 61 74 3b 20 20 20    u16 nOBSat;   
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52   /* Number of OR
14100 44 45 52 20 42 59 20 74 65 72 6d 73 20 73 61 74  DER BY terms sat
14110 69 73 66 69 65 64 20 2a 2f 0a 20 20 64 6f 75 62  isfied */.  doub
14120 6c 65 20 6e 52 6f 77 3b 20 20 20 20 20 20 20 20  le nRow;        
14130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73             /* Es
14140 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
14150 66 20 72 6f 77 73 20 28 66 6f 72 20 45 51 50 29  f rows (for EQP)
14160 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
14170 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20    Index *pIdx;  
14180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14190 20 2f 2a 20 49 6e 64 65 78 20 77 68 65 6e 20 57   /* Index when W
141a0 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20  HERE_INDEXED is 
141b0 74 72 75 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  true */.    stru
141c0 63 74 20 57 68 65 72 65 54 65 72 6d 20 2a 70 54  ct WhereTerm *pT
141d0 65 72 6d 3b 20 20 20 20 20 20 20 2f 2a 20 57 48  erm;       /* WH
141e0 45 52 45 20 63 6c 61 75 73 65 20 74 65 72 6d 20  ERE clause term 
141f0 66 6f 72 20 4f 52 2d 73 65 61 72 63 68 20 2a 2f  for OR-search */
14200 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 64  .    sqlite3_ind
14210 65 78 5f 69 6e 66 6f 20 2a 70 56 74 61 62 49 64  ex_info *pVtabId
14220 78 3b 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74  x;  /* Virtual t
14230 61 62 6c 65 20 69 6e 64 65 78 20 74 6f 20 75 73  able index to us
14240 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  e */.  } u;.};..
14250 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68 20 6e  /*.** For each n
14260 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20 61 20  ested loop in a 
14270 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 6d 70  WHERE clause imp
14280 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
14290 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20 73 74   WhereInfo.** st
142a0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
142b0 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   a single instan
142c0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
142d0 74 75 72 65 2e 20 20 54 68 69 73 20 73 74 72 75  ture.  This stru
142e0 63 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e 74 65  cture.** is inte
142f0 6e 64 65 64 20 74 6f 20 62 65 20 70 72 69 76 61  nded to be priva
14300 74 65 20 74 6f 20 74 68 65 20 77 68 65 72 65 2e  te to the where.
14310 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20 73 68 6f  c module and sho
14320 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63  uld not be.** ac
14330 63 65 73 73 20 6f 72 20 6d 6f 64 69 66 69 65 64  cess or modified
14340 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c 65   by other module
14350 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 49 64  s..**.** The pId
14360 78 49 6e 66 6f 20 66 69 65 6c 64 20 69 73 20 75  xInfo field is u
14370 73 65 64 20 74 6f 20 68 65 6c 70 20 70 69 63 6b  sed to help pick
14380 20 74 68 65 20 62 65 73 74 20 69 6e 64 65 78 20   the best index 
14390 6f 6e 20 61 0a 2a 2a 20 76 69 72 74 75 61 6c 20  on a.** virtual 
143a0 74 61 62 6c 65 2e 20 20 54 68 65 20 70 49 64 78  table.  The pIdx
143b0 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20 63 6f 6e  Info pointer con
143c0 74 61 69 6e 73 20 69 6e 64 65 78 69 6e 67 0a 2a  tains indexing.*
143d0 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  * information fo
143e0 72 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c 65  r the i-th table
143f0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
14400 75 73 65 20 62 65 66 6f 72 65 20 72 65 6f 72 64  use before reord
14410 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20 74 68  ering..** All th
14420 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74  e pIdxInfo point
14430 65 72 73 20 61 72 65 20 66 72 65 65 64 20 62 79  ers are freed by
14440 20 77 68 65 72 65 49 6e 66 6f 46 72 65 65 28 29   whereInfoFree()
14450 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a 2a 2a 20   in where.c..** 
14460 41 6c 6c 20 6f 74 68 65 72 20 69 6e 66 6f 72 6d  All other inform
14470 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 2d 74  ation in the i-t
14480 68 20 57 68 65 72 65 4c 65 76 65 6c 20 6f 62 6a  h WhereLevel obj
14490 65 63 74 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ect for the i-th
144a0 20 74 61 62 6c 65 0a 2a 2a 20 61 66 74 65 72 20   table.** after 
144b0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 72 64 65  FROM clause orde
144c0 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ring..*/.struct 
144d0 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20 57  WhereLevel {.  W
144e0 68 65 72 65 50 6c 61 6e 20 70 6c 61 6e 3b 20 20  herePlan plan;  
144f0 20 20 20 20 20 2f 2a 20 71 75 65 72 79 20 70 6c       /* query pl
14500 61 6e 20 66 6f 72 20 74 68 69 73 20 65 6c 65 6d  an for this elem
14510 65 6e 74 20 6f 66 20 74 68 65 20 46 52 4f 4d 20  ent of the FROM 
14520 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  clause */.  int 
14530 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20 20 20  iLeftJoin;      
14540 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    /* Memory cell
14550 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
14560 6e 74 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f  nt LEFT OUTER JO
14570 49 4e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61 62  IN */.  int iTab
14580 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Cur;          /*
14590 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
145a0 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
145b0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  the table */.  i
145c0 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20 20  nt iIdxCur;     
145d0 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
145e0 20 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20   cursor used to 
145f0 61 63 63 65 73 73 20 70 49 64 78 20 2a 2f 0a 20  access pIdx */. 
14600 20 69 6e 74 20 61 64 64 72 42 72 6b 3b 20 20 20   int addrBrk;   
14610 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
14620 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74  ere to break out
14630 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a   of the loop */.
14640 20 20 69 6e 74 20 61 64 64 72 4e 78 74 3b 20 20    int addrNxt;  
14650 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
14660 68 65 72 65 20 74 6f 20 73 74 61 72 74 20 74 68  here to start th
14670 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d 62 69 6e  e next IN combin
14680 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61  ation */.  int a
14690 64 64 72 43 6f 6e 74 3b 20 20 20 20 20 20 20 20  ddrCont;        
146a0 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f   /* Jump here to
146b0 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74   continue with t
146c0 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79 63  he next loop cyc
146d0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  le */.  int addr
146e0 46 69 72 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  First;        /*
146f0 20 46 69 72 73 74 20 69 6e 73 74 72 75 63 74 69   First instructi
14700 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 6f  on of interior o
14710 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20  f the loop */.  
14720 75 38 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  u8 iFrom;       
14730 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
14740 6e 74 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  ntry in the FROM
14750 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20   clause */.  u8 
14760 6f 70 2c 20 70 35 3b 20 20 20 20 20 20 20 20 20  op, p5;         
14770 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 61 6e 64     /* Opcode and
14780 20 50 35 20 6f 66 20 74 68 65 20 6f 70 63 6f 64   P5 of the opcod
14790 65 20 74 68 61 74 20 65 6e 64 73 20 74 68 65 20  e that ends the 
147a0 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 70 31  loop */.  int p1
147b0 2c 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  , p2;           
147c0 2f 2a 20 4f 70 65 72 61 6e 64 73 20 6f 66 20 74  /* Operands of t
147d0 68 65 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  he opcode used t
147e0 6f 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70 20  o ends the loop 
147f0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
14800 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
14810 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 64  formation that d
14820 65 70 65 6e 64 73 20 6f 6e 20 70 6c 61 6e 2e 77  epends on plan.w
14830 73 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20 73 74  sFlags */.    st
14840 72 75 63 74 20 7b 0a 20 20 20 20 20 20 69 6e 74  ruct {.      int
14850 20 6e 49 6e 3b 20 20 20 20 20 20 20 20 20 20 20   nIn;           
14860 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14870 65 6e 74 72 69 65 73 20 69 6e 20 61 49 6e 4c 6f  entries in aInLo
14880 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20 20 20 73 74  op[] */.      st
14890 72 75 63 74 20 49 6e 4c 6f 6f 70 20 7b 0a 20 20  ruct InLoop {.  
148a0 20 20 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20        int iCur; 
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
148c0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
148d0 75 73 65 64 20 62 79 20 74 68 69 73 20 49 4e 20  used by this IN 
148e0 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  operator */.    
148f0 20 20 20 20 69 6e 74 20 61 64 64 72 49 6e 54 6f      int addrInTo
14900 70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  p;         /* To
14910 70 20 6f 66 20 74 68 65 20 49 4e 20 6c 6f 6f 70  p of the IN loop
14920 20 2a 2f 0a 20 20 20 20 20 20 7d 20 2a 61 49 6e   */.      } *aIn
14930 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  Loop;           
14940 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
14950 62 6f 75 74 20 65 61 63 68 20 6e 65 73 74 65 64  bout each nested
14960 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a   IN operator */.
14970 20 20 20 20 7d 20 69 6e 3b 20 20 20 20 20 20 20      } in;       
14980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
14990 64 20 77 68 65 6e 20 70 6c 61 6e 2e 77 73 46 6c  d when plan.wsFl
149a0 61 67 73 26 57 48 45 52 45 5f 49 4e 5f 41 42 4c  ags&WHERE_IN_ABL
149b0 45 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a  E */.    Index *
149c0 70 43 6f 76 69 64 78 3b 20 20 20 20 20 20 20 2f  pCovidx;       /
149d0 2a 20 50 6f 73 73 69 62 6c 65 20 63 6f 76 65 72  * Possible cover
149e0 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 20 57 48  ing index for WH
149f0 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 2a 2f 0a  ERE_MULTI_OR */.
14a00 20 20 7d 20 75 3b 0a 20 20 64 6f 75 62 6c 65 20    } u;.  double 
14a10 72 4f 70 74 43 6f 73 74 3b 20 20 20 20 20 20 2f  rOptCost;      /
14a20 2a 20 22 4f 70 74 69 6d 61 6c 22 20 63 6f 73 74  * "Optimal" cost
14a30 20 66 6f 72 20 74 68 69 73 20 6c 65 76 65 6c 20   for this level 
14a40 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  */..  /* The fol
14a50 6c 6f 77 69 6e 67 20 66 69 65 6c 64 20 69 73 20  lowing field is 
14a60 72 65 61 6c 6c 79 20 6e 6f 74 20 70 61 72 74 20  really not part 
14a70 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c  of the current l
14a80 65 76 65 6c 2e 20 20 42 75 74 0a 20 20 2a 2a 20  evel.  But.  ** 
14a90 77 65 20 6e 65 65 64 20 61 20 70 6c 61 63 65 20  we need a place 
14aa0 74 6f 20 63 61 63 68 65 20 76 69 72 74 75 61 6c  to cache virtual
14ab0 20 74 61 62 6c 65 20 69 6e 64 65 78 20 69 6e 66   table index inf
14ac0 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61 63  ormation for eac
14ad0 68 0a 20 20 2a 2a 20 76 69 72 74 75 61 6c 20 74  h.  ** virtual t
14ae0 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  able in the FROM
14af0 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20   clause and the 
14b00 57 68 65 72 65 4c 65 76 65 6c 20 73 74 72 75 63  WhereLevel struc
14b10 74 75 72 65 20 69 73 0a 20 20 2a 2a 20 61 20 63  ture is.  ** a c
14b20 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 20  onvenient place 
14b30 73 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 6f  since there is o
14b40 6e 65 20 57 68 65 72 65 4c 65 76 65 6c 20 66 6f  ne WhereLevel fo
14b50 72 20 65 61 63 68 20 46 52 4f 4d 20 63 6c 61 75  r each FROM clau
14b60 73 65 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e  se.  ** element.
14b70 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  .  */.  sqlite3_
14b80 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 49 64 78  index_info *pIdx
14b90 49 6e 66 6f 3b 20 20 2f 2a 20 49 6e 64 65 78 20  Info;  /* Index 
14ba0 69 6e 66 6f 20 66 6f 72 20 6e 2d 74 68 20 73 6f  info for n-th so
14bb0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b  urce table */.};
14bc0 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
14bd0 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
14be0 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
14bf0 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
14c00 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
14c10 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
14c20 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
14c30 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  mber..*/.#define
14c40 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
14c50 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f  ORMAL   0x0000 /
14c60 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69  * No-op */.#defi
14c70 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
14c80 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31  _MIN      0x0001
14c90 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
14ca0 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28  cessing for min(
14cb0 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
14cc0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
14cd0 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20  MAX      0x0002 
14ce0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
14cf0 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29  essing for max()
14d00 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
14d10 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44   WHERE_ONEPASS_D
14d20 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f  ESIRED  0x0004 /
14d30 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65  * Want to do one
14d40 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c  -pass UPDATE/DEL
14d50 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ETE */.#define W
14d60 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
14d70 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  OK    0x0008 /* 
14d80 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
14d90 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
14da0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
14db0 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f  RE_OMIT_OPEN_CLO
14dc0 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61  SE  0x0010 /* Ta
14dd0 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20  ble cursors are 
14de0 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a  already open */.
14df0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f  #define WHERE_FO
14e00 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30  RCE_TABLE      0
14e10 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x0020 /* Do not 
14e20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c  use an index-onl
14e30 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66  y search */.#def
14e40 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42  ine WHERE_ONETAB
14e50 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34  LE_ONLY    0x004
14e60 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74  0 /* Only code t
14e70 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20  he 1st table in 
14e80 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66  pTabList */.#def
14e90 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e  ine WHERE_AND_ON
14ea0 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30 38  LY         0x008
14eb0 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69  0 /* Don't use i
14ec0 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65  ndices for OR te
14ed0 72 6d 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  rms */../*.** Th
14ee0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 70  e WHERE clause p
14ef0 72 6f 63 65 73 73 69 6e 67 20 72 6f 75 74 69 6e  rocessing routin
14f00 65 20 68 61 73 20 74 77 6f 20 68 61 6c 76 65 73  e has two halves
14f10 2e 20 20 54 68 65 0a 2a 2a 20 66 69 72 73 74 20  .  The.** first 
14f20 70 61 72 74 20 64 6f 65 73 20 74 68 65 20 73 74  part does the st
14f30 61 72 74 20 6f 66 20 74 68 65 20 57 48 45 52 45  art of the WHERE
14f40 20 6c 6f 6f 70 20 61 6e 64 20 74 68 65 20 73 65   loop and the se
14f50 63 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65  cond.** half doe
14f60 73 20 74 68 65 20 74 61 69 6c 20 6f 66 20 74 68  s the tail of th
14f70 65 20 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41  e WHERE loop.  A
14f80 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
14f90 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
14fa0 69 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  is returned by t
14fb0 68 65 20 66 69 72 73 74 20 68 61 6c 66 20 61 6e  he first half an
14fc0 64 20 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f  d passed.** into
14fd0 20 74 68 65 20 73 65 63 6f 6e 64 20 68 61 6c 66   the second half
14fe0 20 74 6f 20 67 69 76 65 20 73 6f 6d 65 20 63 6f   to give some co
14ff0 6e 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72  ntinuity..*/.str
15000 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a  uct WhereInfo {.
15010 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
15020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
15030 61 72 73 69 6e 67 20 61 6e 64 20 63 6f 64 65 20  arsing and code 
15040 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 6e 74 65  generating conte
15050 78 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  xt */.  SrcList 
15060 2a 70 54 61 62 4c 69 73 74 3b 20 20 20 20 20 20  *pTabList;      
15070 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61 62    /* List of tab
15080 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 20  les in the join 
15090 2a 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b  */.  u16 nOBSat;
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
150b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44 45  * Number of ORDE
150c0 52 20 42 59 20 74 65 72 6d 73 20 73 61 74 69 73  R BY terms satis
150d0 66 69 65 64 20 62 79 20 69 6e 64 69 63 65 73 20  fied by indices 
150e0 2a 2f 0a 20 20 75 31 36 20 77 63 74 72 6c 46 6c  */.  u16 wctrlFl
150f0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ags;           /
15100 2a 20 46 6c 61 67 73 20 6f 72 69 67 69 6e 61 6c  * Flags original
15110 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  ly passed to sql
15120 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
15130 20 2a 2f 0a 20 20 75 38 20 6f 6b 4f 6e 65 50 61   */.  u8 okOnePa
15140 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
15150 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e 65  /* Ok to use one
15160 2d 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d 20  -pass algorithm 
15170 66 6f 72 20 55 50 44 41 54 45 2f 44 45 4c 45 54  for UPDATE/DELET
15180 45 20 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73 74  E */.  u8 untest
15190 65 64 54 65 72 6d 73 3b 20 20 20 20 20 20 20 20  edTerms;        
151a0 20 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52   /* Not all WHER
151b0 45 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65 64  E terms resolved
151c0 20 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a   by outer loop *
151d0 2f 0a 20 20 75 38 20 65 44 69 73 74 69 6e 63 74  /.  u8 eDistinct
151e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
151f0 20 4f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 52   One of the WHER
15200 45 5f 44 49 53 54 49 4e 43 54 5f 2a 20 76 61 6c  E_DISTINCT_* val
15210 75 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  ues below */.  i
15220 6e 74 20 69 54 6f 70 3b 20 20 20 20 20 20 20 20  nt iTop;        
15230 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15240 76 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f  very beginning o
15250 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70  f the WHERE loop
15260 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69   */.  int iConti
15270 6e 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nue;            
15280 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
15290 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65  continue with ne
152a0 78 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  xt record */.  i
152b0 6e 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20  nt iBreak;      
152c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
152d0 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f   here to break o
152e0 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  ut of the loop *
152f0 2f 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b 20  /.  int nLevel; 
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15310 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
15320 64 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75  d loop */.  stru
15330 63 74 20 57 68 65 72 65 43 6c 61 75 73 65 20 2a  ct WhereClause *
15340 70 57 43 3b 20 20 2f 2a 20 44 65 63 6f 6d 70 6f  pWC;  /* Decompo
15350 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48  sition of the WH
15360 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
15370 64 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75 65  double savedNQue
15380 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 70 50 61  ryLoop;   /* pPa
15390 72 73 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70 20  rse->nQueryLoop 
153a0 6f 75 74 73 69 64 65 20 74 68 65 20 57 48 45 52  outside the WHER
153b0 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75 62  E loop */.  doub
153c0 6c 65 20 6e 52 6f 77 4f 75 74 3b 20 20 20 20 20  le nRowOut;     
153d0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
153e0 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74  ed number of out
153f0 70 75 74 20 72 6f 77 73 20 2a 2f 0a 20 20 57 68  put rows */.  Wh
15400 65 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20  ereLevel a[1];  
15410 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
15420 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
15430 68 20 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57  h nest loop in W
15440 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  HERE */.};../* A
15450 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
15460 72 20 57 68 65 72 65 49 6e 66 6f 2e 65 44 69 73  r WhereInfo.eDis
15470 74 69 6e 63 74 20 61 6e 64 20 44 69 73 74 69 6e  tinct and Distin
15480 63 74 43 74 78 2e 65 54 6e 63 74 54 79 70 65 20  ctCtx.eTnctType 
15490 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
154a0 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
154b0 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
154c0 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
154d0 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
154e0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
154f0 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
15500 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
15510 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
15520 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
15530 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
15540 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
15550 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
15560 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
15570 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
15580 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
15590 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
155a0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
155b0 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
155c0 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
155d0 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
155e0 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
155f0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
15600 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
15610 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
15620 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
15630 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
15640 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
15650 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
15660 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
15670 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
15680 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
15690 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
156a0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
156b0 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
156c0 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
156d0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
156e0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
156f0 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
15700 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
15710 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
15720 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
15730 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
15740 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
15750 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
15760 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
15770 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
15780 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
15790 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
157a0 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  t .** context is
157b0 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
157c0 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
157d0 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
157e0 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
157f0 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
15800 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
15810 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
15820 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
15830 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
15840 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
15850 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
15860 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
15870 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
15880 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
15890 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
158a0 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
158b0 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
158c0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
158d0 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
158e0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a   incremented. .*
158f0 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
15900 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
15910 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
15920 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
15930 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
15940 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
15950 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
15960 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
15970 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
15980 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
15990 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
159a0 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
159b0 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
159c0 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
159d0 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
159e0 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
159f0 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
15a00 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
15a10 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
15a20 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
15a30 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
15a40 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
15a50 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
15a60 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
15a70 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
15a80 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
15a90 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  nal list of name
15aa0 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  d expressions */
15ab0 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
15ac0 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
15ad0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
15ae0 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
15af0 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43  level */.  NameC
15b00 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
15b10 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
15b20 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
15b30 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
15b40 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
15b50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15b60 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
15b70 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
15b80 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
15b90 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
15ba0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
15bb0 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
15bc0 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
15bd0 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63  names */.  u8 nc
15be0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
15bf0 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
15c00 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
15c10 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  ed below */.};..
15c20 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
15c30 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
15c40 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
15c50 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15c60 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
15c70 20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72   0x01    /* Aggr
15c80 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
15c90 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
15ca0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
15cb0 61 73 41 67 67 20 20 20 20 30 78 30 32 20 20 20  asAgg    0x02   
15cc0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
15cd0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15ce0 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
15cf0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
15d00 20 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65   0x04    /* True
15d10 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
15d20 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
15d30 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
15d40 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
15d50 63 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75  c 0x08    /* Tru
15d60 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
15d70 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
15d80 67 67 20 66 75 6e 63 20 2a 2f 0a 0a 2f 2a 0a 2a  gg func */../*.*
15d90 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
15da0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
15db0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
15dc0 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
15dd0 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
15de0 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
15df0 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
15e00 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
15e10 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20  * nLimit is set 
15e20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69  to -1 if there i
15e30 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73  s no LIMIT claus
15e40 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73  e.  nOffset is s
15e50 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74  et to 0..** If t
15e60 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20  here is a LIMIT 
15e70 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73  clause, the pars
15e80 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74  er sets nLimit t
15e90 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
15ea0 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20  he.** limit and 
15eb0 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76  nOffset to the v
15ec0 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73  alue of the offs
15ed0 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72  et (or 0 if ther
15ee0 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73  e is not.** offs
15ef0 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20  et).  But later 
15f00 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e  on, nLimit and n
15f10 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68  Offset become th
15f20 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
15f30 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42  ns.** in the VDB
15f40 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68  E that record th
15f50 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73  e limit and offs
15f60 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a  et counters..**.
15f70 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
15f80 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
15f90 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
15fa0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
15fb0 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
15fc0 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
15fd0 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
15fe0 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
15ff0 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
16000 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
16010 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
16020 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
16030 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
16040 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
16050 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
16060 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
16070 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
16080 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
16090 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
160a0 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
160b0 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
160c0 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
160d0 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
160e0 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
160f0 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
16100 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
16110 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
16120 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
16130 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
16140 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
16150 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
16160 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
16170 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
16180 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
16190 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
161a0 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
161b0 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
161c0 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
161d0 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
161e0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
161f0 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
16200 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16220 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
16230 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
16240 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
16250 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61   */.  u16 selFla
16260 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
16270 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
16280 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
16290 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
162a0 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
162b0 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
162c0 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
162d0 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  ers */.  int add
162e0 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20  rOpenEphm[3];   
162f0 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
16300 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
16310 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
16320 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c 65  /.  double nSele
16330 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  ctRow;     /* Es
16340 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
16350 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
16360 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
16370 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
16380 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
16390 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
163a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
163b0 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
163c0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
163d0 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
163e0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
163f0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
16400 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
16410 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
16420 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
16430 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
16440 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
16450 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
16460 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
16470 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
16480 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
16490 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
164a0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
164b0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
164c0 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
164d0 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
164e0 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  und */.  Select 
164f0 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20  *pRightmost;    
16500 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65  /* Right-most se
16510 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
16520 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
16530 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ent */.  Expr *p
16540 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
16550 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
16560 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
16570 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
16580 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
16590 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
165a0 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
165b0 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
165c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
165d0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
165e0 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
165f0 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
16600 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
16610 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
16620 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
16630 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78  stinct        0x
16640 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
16650 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
16660 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
16670 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
16680 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e   0x0002  /* Iden
16690 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
166a0 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
166b0 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
166c0 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20  te       0x0004 
166d0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
166e0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
166f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
16700 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30  sesEphemeral   0
16710 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74  x0008  /* Uses t
16720 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
16730 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
16740 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
16750 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a        0x0010  /*
16760 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
16770 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
16780 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
16790 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
167a0 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46      0x0020  /* F
167b0 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
167c0 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
167d0 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
167e0 5f 55 73 65 53 6f 72 74 65 72 20 20 20 20 20 20  _UseSorter      
167f0 20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72 74   0x0040  /* Sort
16800 20 75 73 69 6e 67 20 61 20 73 6f 72 74 65 72 20   using a sorter 
16810 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61  */.#define SF_Va
16820 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30 78  lues          0x
16830 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65 73  0080  /* Synthes
16840 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53  ized from VALUES
16850 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
16860 6e 65 20 53 46 5f 4d 61 74 65 72 69 61 6c 69 7a  ne SF_Materializ
16870 65 20 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a  e     0x0100  /*
16880 20 46 6f 72 63 65 20 6d 61 74 65 72 69 61 6c 69   Force materiali
16890 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65 77 73 20  zation of views 
168a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
168b0 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78  stedFrom      0x
168c0 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0200  /* Part of
168d0 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
168e0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
168f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
16900 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20  lts of a select 
16910 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
16920 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
16930 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54  ys.  The.** "SRT
16940 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
16950 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79  SELECT Result Ty
16960 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  pe"..*/.#define 
16970 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
16980 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
16990 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
169a0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
169b0 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
169c0 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
169d0 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
169e0 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
169f0 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
16a00 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
16a10 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
16a20 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
16a30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
16a40 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
16a50 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
16a60 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
16a70 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  re */../* The OR
16a80 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
16a90 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
16aa0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
16ab0 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
16ac0 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
16ad0 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
16ae0 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20  scard)..#define 
16af0 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
16b00 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   5  /* Output ea
16b10 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
16b20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16b30 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20 20  Mem          6  
16b40 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
16b50 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
16b60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16b70 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20 20  Set          7  
16b80 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
16b90 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
16ba0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
16bb0 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
16bc0 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   8  /* Store res
16bd0 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
16be0 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
16bf0 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
16c00 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20  RT_EphemTab     
16c10 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  9  /* Create tra
16c20 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
16c30 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
16c40 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
16c50 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
16c60 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  0  /* Generate a
16c70 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
16c80 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  esult */../*.** 
16c90 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
16ca0 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
16cb0 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
16cc0 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
16cd0 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
16ce0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
16cf0 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
16d00 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
16d10 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
16d20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
16d30 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
16d40 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
16d50 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20   char affSdst;  
16d60 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
16d70 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
16d80 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74  SRT_Set */.  int
16d90 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 2f   iSDParm;      /
16da0 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
16db0 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
16dc0 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
16dd0 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
16de0 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
16df0 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
16e00 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
16e10 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
16e20 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
16e30 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
16e40 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b 0a  allocated */.};.
16e50 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
16e60 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
16e70 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
16e80 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
16e90 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a   AUTOINCREMENT .
16ea0 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66  ** tables, the f
16eb0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61  ollowing informa
16ec0 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64  tion is attached
16ed0 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e   to the Table.u.
16ee0 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69  autoInc.p.** poi
16ef0 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74  nter of each aut
16f00 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65  oincrement table
16f10 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20   to record some 
16f20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  side information
16f30 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64   that.** the cod
16f40 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64  e generator need
16f50 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b  s.  We have to k
16f60 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75  eep per-table au
16f70 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69  toincrement.** i
16f80 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61  nformation in ca
16f90 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64  se inserts are d
16fa0 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67 67  own within trigg
16fb0 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64  ers.  Triggers d
16fc0 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c  o not.** normall
16fd0 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  y coordinate the
16fe0 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62  ir activities, b
16ff0 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f  ut we do need to
17000 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a   coordinate the.
17010 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73  ** loading and s
17020 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63  aving of autoinc
17030 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69  rement informati
17040 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  on..*/.struct Au
17050 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75  toincInfo {.  Au
17060 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74  toincInfo *pNext
17070 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f  ;   /* Next info
17080 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74   block in a list
17090 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a   of them all */.
170a0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
170b0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
170c0 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b   this info block
170d0 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20   refers to */.  
170e0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
170f0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
17100 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
17110 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
17120 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e  ing pTab */.  in
17130 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20  t regCtr;       
17140 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65      /* Memory re
17150 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74  gister holding t
17160 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72  he rowid counter
17170 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
17180 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ze of the column
17190 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65   cache.*/.#ifnde
171a0 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  f SQLITE_N_COLCA
171b0 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  CHE.# define SQL
171c0 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31  ITE_N_COLCACHE 1
171d0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
171e0 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73  At least one ins
171f0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
17200 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
17210 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
17220 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65 72  each .** trigger
17230 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
17240 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
17250 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
17260 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
17270 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
17280 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
17290 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
172a0 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
172b0 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
172c0 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
172d0 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
172e0 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
172f0 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
17300 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
17310 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
17320 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
17330 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
17340 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
17350 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
17360 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
17370 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
17380 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
17390 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
173a0 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
173b0 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
173c0 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
173d0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
173e0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
173f0 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
17400 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
17410 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
17420 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
17430 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
17440 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
17450 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
17460 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
17470 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
17480 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
17490 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
174a0 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
174b0 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
174c0 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
174d0 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74 65  INSERT .** state
174e0 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
174f0 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
17500 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
17510 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
17520 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
17530 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
17540 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
17550 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
17560 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
17570 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
17580 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
17590 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
175a0 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
175b0 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
175c0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
175d0 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
175e0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
175f0 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
17600 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
17610 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
17620 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
17630 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
17640 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
17650 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
17660 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
17670 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
17680 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
17690 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
176a0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
176b0 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
176c0 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
176d0 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
176e0 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
176f0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
17700 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
17710 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
17720 20 20 74 79 70 65 64 65 66 20 73 71 6c 69 74 65    typedef sqlite
17730 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73 6b  3_uint64 yDbMask
17740 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
17750 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79  f unsigned int y
17760 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a  DbMask;.#endif..
17770 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
17780 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
17790 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
177a0 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
177b0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
177c0 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
177d0 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
177e0 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
177f0 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
17800 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
17810 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
17820 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
17830 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
17840 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
17850 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
17860 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
17870 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
17880 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
17890 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
178a0 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
178b0 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
178c0 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
178d0 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
178e0 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
178f0 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
17900 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
17910 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
17920 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
17930 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
17940 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
17950 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
17960 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
17970 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20  hared-cache .** 
17980 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
17990 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
179a0 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
179b0 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
179c0 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
179d0 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
179e0 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
179f0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
17a00 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
17a10 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
17a20 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
17a30 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
17a40 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
17a50 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
17a60 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
17a70 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
17a80 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
17a90 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
17aa0 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
17ab0 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
17ac0 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
17ad0 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
17ae0 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
17af0 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
17b00 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
17b10 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
17b20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
17b30 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
17b40 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
17b50 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
17b60 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
17b70 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
17b80 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
17b90 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
17ba0 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
17bb0 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
17bc0 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
17bd0 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
17be0 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
17bf0 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
17c00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17c10 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
17c20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
17c30 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
17c40 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
17c50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17c60 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
17c70 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
17c80 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  [] */.  u8 nTemp
17c90 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  InUse;       /* 
17ca0 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70 52  Number of aTempR
17cb0 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20 63  eg[] currently c
17cc0 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
17cd0 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20  u8 nColCache;   
17ce0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17cf0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
17d00 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38  lCache[] */.  u8
17d10 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20   iColCache;     
17d20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
17d30 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20   in aColCache[] 
17d40 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20  to replace */.  
17d50 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
17d60 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
17d70 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
17d80 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
17d90 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
17da0 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
17db0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
17dc0 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
17dd0 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
17de0 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61  ption */.  int a
17df0 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20  TempReg[8];     
17e00 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
17e10 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
17e20 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74  gisters */.  int
17e30 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   nRangeReg;     
17e40 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
17e50 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
17e60 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
17e70 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20  nt iRangeReg;   
17e80 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67      /* First reg
17e90 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61  ister in tempora
17ea0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
17eb0 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  k */.  int nErr;
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17ed0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
17ee0 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  seen */.  int nT
17ef0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ab;            /
17f00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76  * Number of prev
17f10 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64  iously allocated
17f20 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f   VDBE cursors */
17f30 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
17f40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17f50 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
17f60 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
17f70 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20  .  int nSet;    
17f80 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17f90 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73  r of sets used s
17fa0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
17fb0 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20  Once;           
17fc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f  /* Number of OP_
17fd0 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  Once instruction
17fe0 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  s so far */.  in
17ff0 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20  t ckBase;       
18000 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
18010 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69  ter of data duri
18020 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ng check constra
18030 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ints */.  int iC
18040 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
18050 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
18060 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
18070 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
18080 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
18090 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
180a0 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
180b0 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
180c0 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
180d0 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79  es */.  struct y
180e0 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69  ColCache {.    i
180f0 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
18100 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75       /* Table cu
18110 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
18120 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
18130 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
18140 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
18150 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65  */.    u8 tempRe
18160 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
18170 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72  iReg is a temp r
18180 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65  egister that nee
18190 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a  ds to be freed *
181a0 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c  /.    int iLevel
181b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
181c0 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a  esting level */.
181d0 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20      int iReg;   
181e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
181f0 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74   with value of t
18200 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65  his column. 0 me
18210 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20  ans none. */.   
18220 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20   int lru;       
18230 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20         /* Least 
18240 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e  recently used en
18250 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c  try has the smal
18260 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  lest value */.  
18270 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49  } aColCache[SQLI
18280 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20  TE_N_COLCACHE]; 
18290 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68   /* One for each
182a0 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e   column cache en
182b0 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  try */.  yDbMask
182c0 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
182d0 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
182e0 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
182f0 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
18300 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
18310 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
18320 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
18330 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
18340 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47  */.  int cookieG
18350 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64 64  oto;      /* Add
18360 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20  ress of OP_Goto 
18370 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66 69  to cookie verifi
18380 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f  er subroutine */
18390 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c  .  int cookieVal
183a0 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  ue[SQLITE_MAX_AT
183b0 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56  TACHED+2];  /* V
183c0 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73  alues of cookies
183d0 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20   to verify */.  
183e0 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
183f0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
18400 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
18410 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
18420 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
18430 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
18440 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
18450 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
18460 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
18470 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
18480 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
18490 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
184a0 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
184b0 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
184c0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
184d0 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
184e0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
184f0 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
18500 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 23  eing parsed */.#
18510 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
18520 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
18530 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
18540 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
18550 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
18560 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
18570 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
18580 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
18590 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
185a0 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
185b0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
185c0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
185d0 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
185e0 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
185f0 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
18600 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d   */..  /* Inform
18610 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65  ation used while
18620 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20   coding trigger 
18630 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50  programs. */.  P
18640 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
18650 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
18660 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
18670 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
18680 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
18690 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
186a0 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
186b0 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
186c0 72 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 51  r */.  double nQ
186d0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 45  ueryLoop;   /* E
186e0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
186f0 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
18700 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 75 33   a query */.  u3
18710 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
18720 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
18730 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
18740 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
18750 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
18760 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
18770 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
18780 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
18790 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
187a0 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
187b0 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
187c0 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
187d0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
187e0 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
187f0 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
18800 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
18810 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
18820 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
18830 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
18840 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f  ers */..  /* Abo
18850 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
18860 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
18870 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
18880 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
18890 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
188a0 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e  cursion */..  in
188b0 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
188c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
188d0 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
188e0 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
188f0 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
18900 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
18910 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18920 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
18930 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
18940 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
18950 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18960 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
18970 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
18980 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
18990 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
189a0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
189b0 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
189c0 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
189d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
189e0 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
189f0 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
18a00 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
18a10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18a20 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
18a30 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
18a40 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41  .#endif.  int nA
18a50 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
18a60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18a70 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20   aliased result 
18a80 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
18a90 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
18aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
18ab0 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
18ac0 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
18ad0 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69  sub-select */.#i
18ae0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
18af0 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
18b00 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  iSelectId;      
18b10 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63        /* ID of c
18b20 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f  urrent select fo
18b30 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
18b40 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53   */.  int iNextS
18b50 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
18b60 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c  /* Next availabl
18b70 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20  e select ID for 
18b80 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
18b90 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20  /.#endif.  char 
18ba0 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20  **azVar;        
18bb0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73       /* Pointers
18bc0 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72   to names of par
18bd0 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62  ameters */.  Vdb
18be0 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20  e *pReprepare;  
18bf0 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69         /* VM bei
18c00 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73  ng reprepared (s
18c10 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
18c20 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41 6c  )) */.  int *aAl
18c30 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
18c40 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75 73    /* Register us
18c50 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73  ed to hold alias
18c60 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 63  ed result */.  c
18c70 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
18c80 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
18c90 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
18ca0 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
18cb0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
18cc0 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
18cd0 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
18ce0 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
18cf0 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
18d00 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
18d10 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
18d20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
18d30 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
18d40 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
18d50 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
18d60 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
18d70 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
18d80 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
18d90 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
18da0 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
18db0 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
18dc0 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
18dd0 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
18de0 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
18df0 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
18e00 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
18e10 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
18e20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
18e30 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
18e40 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
18e50 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
18e60 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
18e70 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
18e80 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
18e90 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
18ea0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
18eb0 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
18ec0 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
18ed0 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
18ee0 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
18ef0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
18f00 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
18f10 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
18f20 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
18f30 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
18f40 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
18f50 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
18f60 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d 3b  d triggers */.};
18f70 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
18f80 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
18f90 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
18fa0 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
18fb0 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
18fc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
18fd0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
18fe0 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
18ff0 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
19000 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
19010 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
19020 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
19030 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
19040 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
19050 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
19060 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
19070 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
19080 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
19090 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
190a0 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
190b0 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
190c0 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
190d0 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
190e0 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
190f0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
19100 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
19110 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
19120 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
19130 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
19140 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19150 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
19160 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
19170 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
19180 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
19190 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
191a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
191b0 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
191c0 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
191d0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
191e0 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
191f0 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
19200 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
19210 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
19220 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
19230 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
19240 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
19250 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
19260 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
19270 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
19280 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
19290 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
192a0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
192b0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
192c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
192d0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
192e0 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
192f0 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
19300 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
19310 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
19320 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20  AG_CLEARCACHE   
19330 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61   0x20    /* Clea
19340 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  r pseudo-table c
19350 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d  ache in OP_Colum
19360 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
19370 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
19380 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
19390 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
193a0 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
193b0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
193c0 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
193d0 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
193e0 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
193f0 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
19400 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
19410 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
19420 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
19430 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
19440 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
19450 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ne OPFLAG_P2ISRE
19460 47 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  G       0x02    
19470 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e  /* P2 to OP_Open
19480 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72  ** is a register
19490 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69   number */.#defi
194a0 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ne OPFLAG_PERMUT
194b0 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
194c0 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75  /* OP_Compare: u
194d0 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  se the permutati
194e0 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  on */../*. * Eac
194f0 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
19500 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
19510 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
19520 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
19530 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
19540 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50  rigger. . *. * P
19550 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
19560 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
19570 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
19580 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
19590 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
195a0 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
195b0 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
195c0 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
195d0 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20  resents the . * 
195e0 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
195f0 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
19600 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
19610 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
19620 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
19630 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
19640 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
19650 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
19660 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
19670 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
19680 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
19690 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
196a0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
196b0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
196c0 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
196d0 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
196e0 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
196f0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
19700 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
19710 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
19720 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
19730 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
19740 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
19750 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
19760 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
19770 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
19780 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
19790 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
197a0 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
197b0 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
197c0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
197d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
197e0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
197f0 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
19800 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
19810 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
19820 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
19830 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
19840 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
19850 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
19860 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
19870 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
19880 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
19890 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
198a0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
198b0 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
198c0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
198d0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
198e0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
198f0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
19900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
19910 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
19920 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
19930 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
19940 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
19950 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
19960 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
19970 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
19980 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
199b0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
199c0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
199d0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
199e0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
199f0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
19a00 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
19a10 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
19a20 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
19a30 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
19a40 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
19a50 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
19a60 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
19a70 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
19a80 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
19a90 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
19aa0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
19ab0 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
19ac0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
19ad0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
19ae0 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
19af0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
19b00 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
19b10 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
19b20 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
19b30 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
19b40 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  which. .**.** If
19b50 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69   there are multi
19b60 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f  ple triggers, yo
19b70 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20  u might of some 
19b80 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20  BEFORE and some 
19b90 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61  AFTER..** In tha
19ba0 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e  t cases, the con
19bb0 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e  stants below can
19bc0 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65   be ORed togethe
19bd0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52  r..*/.#define TR
19be0 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a  IGGER_BEFORE  1.
19bf0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
19c00 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a  AFTER   2../*. *
19c10 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
19c20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
19c30 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ep is used to st
19c40 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c  ore a single SQL
19c50 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68   statement. * th
19c60 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  at is a part of 
19c70 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
19c80 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  m. . *. * Instan
19c90 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
19ca0 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
19cb0 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
19cc0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
19cd0 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
19ce0 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
19cf0 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
19d00 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
19d10 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20  member of the . 
19d20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
19d30 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
19d40 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
19d50 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
19d60 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
19d70 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
19d80 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
19d90 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54  rogram.. * . * T
19da0 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69  he "op" member i
19db0 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72  ndicates whether
19dc0 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45   this is a "DELE
19dd0 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22  TE", "INSERT", "
19de0 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53  UPDATE" or. * "S
19df0 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74  ELECT" statement
19e00 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  . The meanings o
19e10 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62  f the other memb
19e20 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ers is determine
19e30 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c  d by the . * val
19e40 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
19e50 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
19e60 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
19e70 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
19e80 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
19e90 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
19ea0 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
19eb0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
19ec0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
19ed0 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
19ee0 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
19ef0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
19f00 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
19f10 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
19f20 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
19f30 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65  e NULL.. * targe
19f40 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
19f50 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
19f60 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
19f70 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
19f80 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
19f90 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
19fa0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
19fb0 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
19fc0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19fe0 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
19ff0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
1a000 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1a010 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
1a020 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1a030 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
1a040 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
1a050 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20  VALUES ... . *  
1a060 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1a070 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
1a080 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
1a090 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
1a0a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
1a0b0 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
1a0c0 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
1a0d0 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20  LETE). * target 
1a0e0 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f     -> A token ho
1a0f0 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64  lding the quoted
1a100 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1a110 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
1a120 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
1a130 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1a140 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
1a150 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1a160 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1a170 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1a180 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1a190 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  . * . * (op == T
1a1a0 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72  K_UPDATE). * tar
1a1b0 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
1a1c0 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
1a1d0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1a1e0 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
1a1f0 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68   rows of.. * pWh
1a200 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1a210 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1a220 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
1a230 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1a240 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1a250 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1a260 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
1a270 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
1a280 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
1a290 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
1a2a0 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
1a2b0 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
1a2c0 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
1a2d0 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
1a2e0 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
1a2f0 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
1a300 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
1a310 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f  rgument.. * . */
1a320 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
1a330 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a350 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1a360 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1a370 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
1a380 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
1a390 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
1a3a0 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
1a3b0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
1a3c0 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
1a3d0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
1a3e0 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
1a3f0 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
1a400 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
1a410 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e  * SELECT statmen
1a420 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
1a430 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43  RT INTO .. SELEC
1a440 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e  T ... */.  Token
1a450 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20   target;        
1a460 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
1a470 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
1a480 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
1a490 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1a4a0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
1a4b0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
1a4c0 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
1a4d0 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
1a4e0 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
1a4f0 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
1a500 55 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20  UPDATE.  VALUES 
1a510 63 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52  clause for INSER
1a520 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  T */.  IdList *p
1a530 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1a540 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1a550 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1a560 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1a570 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1a580 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1a590 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1a5a0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1a5b0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1a5c0 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1a5d0 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1a5e0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1a5f0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1a600 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1a610 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1a620 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1a630 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1a640 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1a650 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1a660 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1a670 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1a680 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1a690 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1a6a0 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1a6b0 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1a6c0 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1a6d0 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1a6e0 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1a6f0 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1a700 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1a710 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1a720 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1a730 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ema */.  const c
1a740 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
1a750 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
1a760 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
1a770 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
1a780 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
1a790 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
1a7a0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
1a7b0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1a7c0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1a7d0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
1a7e0 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
1a7f0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1a800 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1a810 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1a820 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
1a830 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
1a840 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
1a850 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
1a860 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
1a870 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
1a880 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
1a890 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
1a8a0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
1a8b0 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
1a8c0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1a8d0 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
1a8e0 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
1a8f0 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
1a900 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
1a910 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
1a920 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
1a930 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
1a940 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
1a950 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
1a960 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
1a970 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
1a980 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72   */.  int  nChar
1a990 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
1a9a0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
1a9b0 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ng so far */.  i
1a9c0 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  nt  nAlloc;     
1a9d0 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
1a9e0 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
1a9f0 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69   in zText */.  i
1aa00 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  nt  mxAlloc;    
1aa10 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
1aa20 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65  llowed string le
1aa30 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 6d  ngth */.  u8   m
1aa40 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 2f  allocFailed;   /
1aa50 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69  * Becomes true i
1aa60 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c 6c  f any memory all
1aa70 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a 2f  ocation fails */
1aa80 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f  .  u8   useMallo
1aa90 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f  c;      /* 0: no
1aaa0 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44  ne,  1: sqlite3D
1aab0 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c  bMalloc,  2: sql
1aac0 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20  ite3_malloc */. 
1aad0 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20 20   u8   tooBig;   
1aae0 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73        /* Becomes
1aaf0 20 74 72 75 65 20 69 66 20 73 74 72 69 6e 67 20   true if string 
1ab00 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69 6d  size exceeds lim
1ab10 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  its */.};../*.**
1ab20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1ab30 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1ab40 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
1ab50 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
1ab60 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
1ab70 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
1ab80 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
1ab90 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1aba0 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
1abb0 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
1abc0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
1abd0 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
1abe0 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
1abf0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
1ac00 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
1ac10 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
1ac20 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
1ac30 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1ac40 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
1ac50 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
1ac60 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
1ac70 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
1ac80 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
1ac90 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
1aca0 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
1acb0 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
1acc0 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
1acd0 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
1ace0 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
1acf0 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
1ad00 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
1ad10 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
1ad20 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
1ad30 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
1ad40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
1ad50 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
1ad60 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1ad90 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
1ada0 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
1adb0 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1adc0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1add0 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
1ade0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1adf0 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ae10 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1ae20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
1ae30 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1ae60 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
1ae70 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
1ae80 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
1aeb0 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
1aec0 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
1aed0 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aef0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
1af00 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
1af10 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1af40 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1af50 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1af60 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1af70 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1af80 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1af90 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1afa0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1afb0 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1afc0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1afd0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1afe0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1aff0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1b000 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1b010 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1b020 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1b030 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1b040 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1b050 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1b060 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1b070 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1b080 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b0a0 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1b0b0 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1b0c0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1b0e0 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1b0f0 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1b100 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1b110 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1b120 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1b130 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 76 6f  ts sizes */.  vo
1b140 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b160 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1b170 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1b180 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1b190 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1b1a0 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1b1b0 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1b1c0 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b1e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1b1f0 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1b200 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1b230 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1b240 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b260 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1b270 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1b280 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b2b0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1b2c0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1b2d0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1b2e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1b2f0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1b300 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1b310 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1b320 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1b330 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1b340 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1b350 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1b360 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
1b370 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
1b380 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
1b390 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
1b3a0 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
1b3b0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
1b3c0 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
1b3d0 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
1b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3f0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1b400 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
1b410 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
1b420 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
1b430 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
1b440 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
1b450 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
1b460 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
1b470 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
1b480 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1b490 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1b4a0 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
1b4b0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1b4c0 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
1b4d0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1b4e0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1b4f0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1b500 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1b510 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b530 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1b540 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1b550 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ed */.  sqlite3_
1b560 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
1b570 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
1b580 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
1b590 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
1b5a0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
1b5b0 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
1b5c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b5d0 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
1b5e0 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69  itMutex */.  voi
1b5f0 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
1b600 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1b610 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
1b620 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
1b630 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b650 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
1b660 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
1b670 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74  */.  int bLocalt
1b680 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20  imeFault;       
1b690 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1b6a0 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65  o fail localtime
1b6b0 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 64  () calls */.#ifd
1b6c0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1b6d0 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
1b6e0 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
1b6f0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1b700 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
1b710 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
1b720 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
1b730 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
1b740 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
1b750 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
1b760 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
1b770 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45  ker {.  int (*xE
1b780 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
1b790 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
1b7a0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
1b7b0 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
1b7c0 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
1b7d0 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
1b7e0 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
1b7f0 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
1b800 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ECTs */.  Parse 
1b810 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
1b840 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
1b850 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b870 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b880 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
1b890 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b8c0 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
1b8d0 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
1b8e0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
1b8f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
1b910 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
1b920 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20      int i;      
1b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b950 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
1b960 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
1b970 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
1b9a0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
1b9b0 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
1b9c0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
1b9d0 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
1b9e0 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
1b9f0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
1ba00 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
1ba10 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
1ba20 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
1ba30 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
1ba40 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1ba50 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
1ba60 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1ba70 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1ba80 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
1ba90 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1baa0 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
1bab0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1bac0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1bad0 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
1bae0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a  er*, Select*);..
1baf0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
1bb00 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
1bb10 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
1bb20 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
1bb30 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
1bb40 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
1bb50 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
1bb60 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
1bb70 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
1bb80 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
1bb90 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
1bba0 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
1bbb0 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
1bbc0 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
1bbd0 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
1bbe0 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
1bbf0 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
1bc00 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
1bc10 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
1bc20 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1bc30 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
1bc40 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
1bc50 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
1bc60 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
1bc70 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
1bc80 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1bc90 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
1bca0 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
1bcb0 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1bcd0 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
1bce0 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd00 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
1bd10 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
1bd20 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
1bd30 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
1bd40 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd70 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
1bd80 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
1bd90 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
1bda0 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
1bdb0 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
1bdc0 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
1bdd0 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
1bde0 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
1bdf0 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
1be00 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
1be10 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
1be20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
1be30 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
1be40 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
1be50 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
1be60 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
1be70 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
1be80 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
1be90 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
1bea0 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
1beb0 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
1bec0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1bed0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1bee0 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
1bef0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
1bf00 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
1bf10 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
1bf20 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
1bf30 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1bf40 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1bf50 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
1bf60 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
1bf70 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
1bf80 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1bf90 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
1bfa0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1bfb0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1bfc0 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
1bfd0 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
1bfe0 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
1bff0 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
1c000 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
1c010 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
1c020 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
1c030 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
1c040 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  lso all.** the S
1c050 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c060 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
1c070 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f   as an alisse fo
1c080 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
1c090 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
1c0a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c0b0 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
1c0c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c0d0 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
1c0e0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1c0f0 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS3.#endif../*.
1c100 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
1c110 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
1c120 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
1c130 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
1c140 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
1c150 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
1c160 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
1c170 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
1c180 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1c190 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
1c1a0 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
1c1b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c1c0 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
1c1d0 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
1c1e0 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
1c1f0 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
1c200 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1c210 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
1c220 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
1c230 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
1c240 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
1c250 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
1c260 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
1c270 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
1c280 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
1c290 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
1c2a0 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
1c2b0 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
1c2c0 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
1c2d0 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
1c2e0 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
1c2f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c300 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
1c310 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
1c320 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1c330 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
1c340 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c350 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
1c360 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c370 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c380 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
1c390 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1c3a0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c3b0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c3c0 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
1c3d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c3e0 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
1c3f0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c400 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c410 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
1c420 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1c430 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c440 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c450 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
1c460 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c470 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
1c480 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c490 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c4a0 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
1c4b0 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
1c4c0 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
1c4d0 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
1c4e0 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65  ed char)(x)]).#e
1c4f0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1c500 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1c510 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
1c520 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1c530 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1c540 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
1c550 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
1c560 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1c570 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1c580 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
1c590 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1c5a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c5b0 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
1c5c0 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
1c5d0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1c5e0 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1c5f0 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
1c600 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1c610 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c620 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
1c630 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
1c640 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1c650 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1c660 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
1c670 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1c680 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  x)).#endif../*.*
1c690 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
1c6a0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
1c6b0 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
1c6c0 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33  3StrICmp sqlite3
1c6d0 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c  _stricmp.int sql
1c6e0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
1c6f0 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
1c700 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
1c710 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
1c720 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
1c730 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
1c740 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1c750 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
1c760 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1c770 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  oc(int);.void *s
1c780 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
1c790 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1c7a0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1c7b0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1c7c0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1c7d0 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
1c7e0 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
1c7f0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1c800 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1c810 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
1c820 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
1c830 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1c840 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  r*, int);.void *
1c850 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
1c860 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  oid*, int);.void
1c870 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1c880 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
1c890 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1c8a0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1c8b0 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
1c8c0 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1c8d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
1c8e0 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
1c8f0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1c900 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
1c910 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1c920 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
1c930 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
1c940 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
1c950 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
1c960 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
1c970 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
1c980 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
1c990 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
1c9a0 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
1c9b0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1c9c0 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
1c9d0 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ault(void);.void
1c9e0 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
1c9f0 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
1ca00 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
1ca10 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73  *)(void));.int s
1ca20 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
1ca30 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
1ca40 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
1ca50 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
1ca60 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
1ca70 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
1ca80 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
1ca90 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
1caa0 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
1cab0 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
1cac0 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
1cad0 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
1cae0 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
1caf0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
1cb00 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
1cb10 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
1cb20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
1cb30 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
1cb40 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
1cb50 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
1cb60 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
1cb70 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
1cb80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
1cb90 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
1cba0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1cbb0 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
1cbc0 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
1cbd0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1cbe0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
1cbf0 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
1cc00 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
1cc10 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
1cc20 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73  D,P)       .#els
1cc30 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1cc40 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
1cc50 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
1cc60 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
1cc70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1cc80 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
1cc90 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
1cca0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
1ccb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1ccc0 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
1ccd0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1cce0 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
1ccf0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1cd00 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
1cd10 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1cd20 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
1cd30 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
1cd40 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1cd50 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1cd60 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
1cd70 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1cd80 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1cd90 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
1cda0 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
1cdb0 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
1cdc0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1cdd0 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
1cde0 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
1cdf0 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
1ce00 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1ce10 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
1ce20 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
1ce30 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1ce40 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
1ce50 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
1ce60 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
1ce70 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
1ce80 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
1ce90 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  d);.#endif..int 
1cea0 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
1ceb0 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
1cec0 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69  lite3StatusAdd(i
1ced0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1cee0 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
1cef0 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e  int, int);..#ifn
1cf00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1cf10 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
1cf20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
1cf30 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
1cf40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1cf50 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
1cf60 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
1cf70 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
1cf80 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  um*, int, const 
1cf90 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
1cfa0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1cfb0 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20  OMIT_TRACE.void 
1cfc0 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
1cfd0 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
1cfe0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
1cff0 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  dif.char *sqlite
1d000 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
1d010 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
1d020 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
1d030 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
1d040 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1d050 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20   va_list);.char 
1d060 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66  *sqlite3MAppendf
1d070 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c  (sqlite3*,char*,
1d080 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
1d090 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
1d0a0 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  LITE_TEST) || de
1d0b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
1d0c0 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
1d0d0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
1d0e0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1d0f0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1d100 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
1d110 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
1d120 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
1d130 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
1d140 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f  if../* Output fo
1d150 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c  rmatting for SQL
1d160 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50  ITE_TESTCTRL_EXP
1d170 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69  LAIN */.#if defi
1d180 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1d190 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a  E_TREE_EXPLAIN).
1d1a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d1b0 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a  plainBegin(Vdbe*
1d1c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d1d0 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56  3ExplainPrintf(V
1d1e0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
1d1f0 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20  *, ...);.  void 
1d200 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c  sqlite3ExplainNL
1d210 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1d220 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75  sqlite3ExplainPu
1d230 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  sh(Vdbe*);.  voi
1d240 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1d250 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  Pop(Vdbe*);.  vo
1d260 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1d270 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a  nFinish(Vdbe*);.
1d280 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d290 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65  plainSelect(Vdbe
1d2a0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  *, Select*);.  v
1d2b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d2c0 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78  inExpr(Vdbe*, Ex
1d2d0 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
1d2e0 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c  ite3ExplainExprL
1d2f0 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c  ist(Vdbe*, ExprL
1d300 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63  ist*);.  const c
1d310 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65  har *sqlite3Vdbe
1d320 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65  Explanation(Vdbe
1d330 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
1d340 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d350 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  nBegin(X).# defi
1d360 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d370 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64  nSelect(A,B).# d
1d380 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1d390 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20  lainExpr(A,B).# 
1d3a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1d3b0 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c  plainExprList(A,
1d3c0 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
1d3d0 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68  te3ExplainFinish
1d3e0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1d3f0 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74  ite3VdbeExplanat
1d400 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  ion(X) 0.#endif.
1d410 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
1d420 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
1d430 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
1d440 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
1d450 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
1d460 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
1d470 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e   char*, ...);.in
1d480 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  t sqlite3Dequote
1d490 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
1d4a0 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
1d4b0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1d4c0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
1d4d0 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
1d4e0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1d4f0 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
1d500 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1d510 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
1d520 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1d530 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
1d540 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
1d550 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
1d560 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
1d570 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
1d580 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
1d590 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
1d5a0 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
1d5b0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
1d5c0 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
1d5d0 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
1d5e0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1d5f0 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
1d600 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
1d610 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
1d620 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
1d630 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1d640 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1d650 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
1d660 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
1d670 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
1d680 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1d690 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
1d6a0 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
1d6b0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
1d6c0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1d6d0 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
1d6e0 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
1d6f0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
1d700 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
1d710 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
1d720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d730 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
1d740 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
1d750 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d760 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
1d770 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
1d780 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
1d790 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
1d7a0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1d7b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d7c0 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
1d7d0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1d7e0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1d7f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1d800 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
1d810 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
1d820 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1d830 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
1d840 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1d850 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1d860 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
1d870 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
1d880 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1d890 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
1d8a0 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
1d8b0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
1d8c0 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
1d8d0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1d8e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d8f0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
1d900 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
1d910 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1d920 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
1d930 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
1d940 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1d950 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
1d960 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
1d970 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1d980 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
1d990 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1d9a0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
1d9b0 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
1d9c0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
1d9d0 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
1d9e0 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
1d9f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
1da00 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
1da10 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  se *, int);.void
1da20 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
1da30 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
1da40 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
1da50 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
1da60 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
1da70 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
1da80 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
1da90 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
1daa0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1dab0 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
1dac0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
1dad0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1dae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1daf0 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
1db00 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1db10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1db20 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65  ColumnType(Parse
1db30 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
1db40 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
1db50 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
1db60 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
1db70 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
1db80 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
1db90 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1dba0 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
1dbb0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1dbc0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1dbd0 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f  lite3ParseUri(co
1dbe0 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
1dbf0 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69  char*,unsigned i
1dc00 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  nt*,.           
1dc10 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1dc20 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68  _vfs**,char**,ch
1dc30 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73  ar **);.Btree *s
1dc40 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74  qlite3DbNameToBt
1dc50 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ree(sqlite3*,con
1dc60 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
1dc70 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50  qlite3CodeOnce(P
1dc80 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63  arse *);..Bitvec
1dc90 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
1dca0 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
1dcb0 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
1dcc0 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
1dcd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1dce0 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
1dcf0 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
1dd00 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
1dd10 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
1dd20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1dd30 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
1dd40 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
1dd50 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
1dd60 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  vec*);.int sqlit
1dd70 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
1dd80 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a  est(int,int*);..
1dd90 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
1dda0 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
1ddb0 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
1ddc0 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
1ddd0 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
1dde0 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
1ddf0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
1de00 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
1de10 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1de20 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
1de30 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69 36  *, u8 iBatch, i6
1de40 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1de50 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
1de60 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
1de70 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
1de80 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
1de90 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1dea0 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
1deb0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1dec0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1ded0 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
1dee0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1def0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
1df00 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1df10 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
1df20 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
1df30 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
1df40 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
1df50 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  ,B) 0.#endif..vo
1df60 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
1df70 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
1df80 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
1df90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1dfa0 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
1dfb0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1dfc0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1dfd0 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
1dfe0 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
1dff0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e000 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1e010 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
1e020 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
1e030 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
1e040 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
1e050 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
1e060 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
1e070 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1e080 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
1e090 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
1e0a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1e0b0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1e0c0 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  X).#endif.int sq
1e0d0 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69  lite3CodeCorouti
1e0e0 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ne(Parse*, Selec
1e0f0 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
1e100 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
1e110 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
1e120 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
1e130 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
1e140 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  t*, int);.void *
1e150 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f  sqlite3ArrayAllo
1e160 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f  cate(sqlite3*,vo
1e170 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  id*,int,int*,int
1e180 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  *);.IdList *sqli
1e190 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28  te3IdListAppend(
1e1a0 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
1e1b0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
1e1c0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64  sqlite3IdListInd
1e1d0 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74  ex(IdList*,const
1e1e0 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74   char*);.SrcList
1e1f0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1e200 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a  Enlarge(sqlite3*
1e210 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
1e220 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a   int);.SrcList *
1e230 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
1e240 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53  pend(sqlite3*, S
1e250 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
1e260 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73   Token*);.SrcLis
1e270 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1e280 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28  tAppendFromTerm(
1e290 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1e2a0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1e2b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20          Token*, 
1e2e0 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20  Select*, Expr*, 
1e2f0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
1e300 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64  qlite3SrcListInd
1e310 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20  exedBy(Parse *, 
1e320 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e  SrcList *, Token
1e330 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
1e340 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
1e350 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
1e360 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
1e370 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
1e380 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
1e390 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
1e3a0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
1e3b0 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
1e3c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
1e3d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
1e3e0 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
1e3f0 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
1e400 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1e410 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1e420 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
1e430 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
1e440 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
1e450 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
1e460 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
1e470 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
1e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e490 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20     Token*, int, 
1e4a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e4b0 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
1e4c0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
1e4d0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
1e4e0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
1e4f0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
1e500 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
1e510 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
1e520 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
1e530 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1e540 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e560 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
1e570 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72  *,u16,Expr*,Expr
1e580 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e590 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
1e5a0 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
1e5b0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
1e5c0 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
1e5d0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
1e5e0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
1e5f0 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
1e600 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
1e610 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
1e620 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
1e630 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
1e640 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
1e650 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1e660 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
1e670 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
1e680 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1e690 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
1e6a0 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
1e6b0 65 72 65 28 50 61 72 73 65 20 2a 2c 20 53 72 63  ere(Parse *, Src
1e6c0 4c 69 73 74 20 2a 2c 20 45 78 70 72 20 2a 2c 20  List *, Expr *, 
1e6d0 45 78 70 72 4c 69 73 74 20 2a 2c 20 45 78 70 72  ExprList *, Expr
1e6e0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 63 68 61 72   *, Expr *, char
1e6f0 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64   *);.#endif.void
1e700 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72   sqlite3DeleteFr
1e710 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  om(Parse*, SrcLi
1e720 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
1e730 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
1e740 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1e750 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
1e760 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49  r*, int);.WhereI
1e770 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
1e780 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
1e790 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
1e7a0 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
1e7b0 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
1e7c0 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
1e7d0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1e7e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1e7f0 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
1e800 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1e810 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
1e820 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1e830 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
1e840 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
1e850 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1e860 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e870 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
1e880 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e890 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e8a0 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
1e8b0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
1e8c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e8d0 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
1e8e0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1e8f0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
1e900 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  p(Parse*, int);.
1e910 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e920 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
1e930 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1e940 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1e950 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
1e960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e970 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
1e980 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
1e990 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1e9a0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
1e9b0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1e9c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e9d0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
1e9e0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
1e9f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1ea00 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
1ea10 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1ea20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1ea30 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
1ea40 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1ea50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1ea60 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50  rCodeConstants(P
1ea70 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  arse*, Expr*);.i
1ea80 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1ea90 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
1eaa0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
1eab0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1eac0 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
1ead0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1eae0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1eaf0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
1eb00 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1eb10 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
1eb20 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
1eb30 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
1eb40 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1eb50 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
1eb60 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
1eb70 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
1eb80 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
1eb90 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
1eba0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
1ebb0 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
1ebc0 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
1ebd0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
1ebe0 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
1ebf0 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
1ec00 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1ec10 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1ec20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
1ec30 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
1ec40 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
1ec50 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
1ec60 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
1ec70 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
1ec80 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
1ec90 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1eca0 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
1ecb0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
1ecc0 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
1ecd0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
1ece0 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
1ecf0 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
1ed00 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
1ed10 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
1ed20 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
1ed30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1ed40 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78  prListCompare(Ex
1ed50 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  prList*, ExprLis
1ed60 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1ed70 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
1ed80 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
1ed90 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
1eda0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
1edb0 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
1edc0 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
1edd0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1ede0 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
1edf0 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
1ee00 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
1ee10 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
1ee20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ee30 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
1ee40 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1ee50 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
1ee60 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1ee70 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74  lite3PrngResetSt
1ee80 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1ee90 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1eea0 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
1eeb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1eec0 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
1eed0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
1eee0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
1eef0 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
1ef00 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1ef10 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
1ef20 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
1ef30 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
1ef40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ef50 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
1ef60 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
1ef70 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
1ef80 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
1ef90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1efa0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
1efb0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
1efc0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
1efd0 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
1efe0 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
1eff0 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
1f000 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
1f010 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1f020 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
1f030 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
1f040 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
1f050 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
1f060 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f070 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
1f080 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69  nction(Expr*);.i
1f090 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
1f0a0 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
1f0b0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
1f0c0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
1f0d0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69  onst Expr*);.voi
1f0e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
1f0f0 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65  eIsNullJump(Vdbe
1f100 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
1f110 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1f120 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
1f130 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
1f140 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
1f150 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
1f160 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
1f170 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f180 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
1f190 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
1f1a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1f1b0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
1f1c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
1f1d0 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
1f1e0 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
1f1f0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29  ble*, int, int*)
1f200 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e  ;.int sqlite3Gen
1f210 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61  erateIndexKey(Pa
1f220 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
1f230 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1f240 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
1f250 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
1f260 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
1f270 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f2a0 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  nt*,int,int,int,
1f2b0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  int,int*);.void 
1f2c0 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
1f2d0 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
1f2e0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1f2f0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e  t, int*, int, in
1f300 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
1f310 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
1f320 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
1f330 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1f340 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1f350 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
1f360 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
1f370 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f380 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
1f390 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1f3a0 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
1f3b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f3c0 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
1f3d0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 68 61 72  arse*, int, char
1f3e0 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
1f3f0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
1f400 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
1f410 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
1f420 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
1f430 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
1f440 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
1f450 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1f460 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
1f470 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
1f480 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
1f490 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
1f4a0 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
1f4b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
1f4c0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
1f4d0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1f4e0 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72  ite3FuncDefInser
1f4f0 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20  t(FuncDefHash*, 
1f500 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44  FuncDef*);.FuncD
1f510 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
1f520 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
1f530 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
1f540 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
1f550 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
1f560 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
1f570 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
1f580 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
1f590 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f  rDateTimeFunctio
1f5a0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
1f5b0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c  qlite3RegisterGl
1f5c0 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f  obalFunctions(vo
1f5d0 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
1f5e0 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
1f5f0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
1f600 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
1f610 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
1f620 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f630 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
1f640 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
1f650 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1f660 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
1f670 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1f680 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
1f690 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
1f6a0 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
1f6b0 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
1f6c0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
1f6d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f6e0 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
1f6f0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
1f700 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
1f710 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
1f720 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
1f730 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
1f750 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
1f760 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
1f770 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
1f780 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
1f790 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
1f7a0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
1f7b0 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
1f7c0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
1f7d0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
1f7e0 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
1f7f0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
1f800 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
1f810 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
1f820 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
1f830 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1f840 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
1f850 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
1f860 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
1f870 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
1f880 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
1f890 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1f8a0 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
1f8b0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
1f8c0 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8e0 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
1f8f0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1f900 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
1f910 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
1f920 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
1f930 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
1f940 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
1f950 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
1f960 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
1f970 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
1f980 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
1f990 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
1f9a0 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
1f9b0 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
1f9c0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
1f9d0 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
1f9e0 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
1f9f0 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69  ,Select*);.  Tri
1fa00 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1fa10 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
1fa20 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1fa30 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 20 20 20 20 20 45 78 70 72 4c 69 73 74 2a 2c 53       ExprList*,S
1fa70 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72  elect*,u8);.  Tr
1fa80 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
1fa90 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
1faa0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
1fab0 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
1fac0 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69  xpr*, u8);.  Tri
1fad0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1fae0 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
1faf0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1fb00 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f  n*, Expr*);.  vo
1fb10 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
1fb20 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
1fb30 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
1fb40 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
1fb50 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
1fb60 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
1fb70 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
1fb80 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
1fb90 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
1fba0 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
1fbb0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
1fbc0 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
1fbd0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
1fbe0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
1fbf0 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
1fc00 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
1fc10 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1fc20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
1fc30 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
1fc40 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
1fc50 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
1fc60 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1fc70 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
1fc80 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
1fc90 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
1fca0 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
1fcb0 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
1fcc0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
1fcd0 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
1fce0 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
1fcf0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
1fd00 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
1fd10 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
1fd20 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
1fd30 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
1fd40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
1fd50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
1fd60 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
1fd70 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
1fd80 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
1fd90 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
1fda0 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
1fdb0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
1fdc0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
1fdd0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
1fde0 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
1fdf0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
1fe00 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
1fe10 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1fe20 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
1fe30 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
1fe40 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1fe50 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
1fe60 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
1fe70 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
1fe80 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
1fe90 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
1fea0 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
1feb0 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
1fec0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1fed0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1fee0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
1fef0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
1ff00 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
1ff10 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
1ff20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
1ff30 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
1ff40 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
1ff50 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
1ff60 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
1ff70 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
1ff80 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
1ff90 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
1ffa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
1ffb0 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
1ffc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1ffd0 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
1ffe0 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
1fff0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20000 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
20010 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
20020 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
20030 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
20040 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
20050 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
20060 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
20070 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
20080 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
20090 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
200a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
200b0 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
200c0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
200d0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
200e0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
200f0 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
20100 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
20110 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
20120 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
20130 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
20140 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
20150 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
20160 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
20170 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
20180 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
20190 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
201a0 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
201b0 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
201c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
201d0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
201e0 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
201f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
20200 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
20210 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
20220 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
20230 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
20240 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
20250 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
20260 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
20270 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
20280 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
20290 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
202a0 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
202b0 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
202c0 20 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52   u8**);../*.** R
202d0 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
202e0 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
202f0 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
20300 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
20310 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
20320 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
20330 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
20340 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
20350 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
20360 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c 64  le.  Code should
20370 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20 66   use the MACRO f
20380 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20 74  orms below, as t
20390 68 65 20 56 61 72 69 6e 74 33 32 20 76 65 72 73  he Varint32 vers
203a0 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65  ions.** are code
203b0 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65 20  d to assume the 
203c0 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73 65  single byte case
203d0 20 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e 64   is already hand
203e0 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20 74  led (which .** t
203f0 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f  he MACRO form do
20400 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  es)..*/.int sqli
20410 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
20420 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
20430 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  );.int sqlite3Pu
20440 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67 6e  tVarint32(unsign
20450 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a  ed char*, u32);.
20460 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
20470 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
20480 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
20490 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
204a0 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
204b0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
204c0 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
204d0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
204e0 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
204f0 68 65 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f  header of a reco
20500 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  rd consists of a
20510 20 73 65 71 75 65 6e 63 65 20 76 61 72 69 61 62   sequence variab
20520 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
20530 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74  rs..** These int
20540 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74  egers are almost
20550 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e   always small an
20560 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73  d are encoded as
20570 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a   a single byte..
20580 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
20590 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76   macros take adv
205a0 61 6e 74 61 67 65 20 74 68 69 73 20 66 61 63 74  antage this fact
205b0 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61   to provide a fa
205c0 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64  st encode.** and
205d0 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69   decode of the i
205e0 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72 65 63  ntegers in a rec
205f0 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49 74 20  ord header.  It 
20600 69 73 20 66 61 73 74 65 72 20 66 6f 72 20 74 68  is faster for th
20610 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65  e common.** case
20620 20 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 67   where the integ
20630 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62  er is a single b
20640 79 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69  yte.  It is a li
20650 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e  ttle slower when
20660 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
20670 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62  is two or more b
20680 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61  ytes.  But overa
20690 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65 72 2e  ll it is faster.
206a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  .**.** The follo
206b0 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73  wing expressions
206c0 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a   are equivalent:
206d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73  .**.**     x = s
206e0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
206f0 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20  2( A, &B );.**  
20700 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75     x = sqlite3Pu
20710 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
20720 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d  );.**.**     x =
20730 20 67 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c   getVarint32( A,
20740 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d   B );.**     x =
20750 20 70 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c   putVarint32( A,
20760 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66   B );.**.*/.#def
20770 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
20780 41 2c 42 29 20 20 28 75 38 29 28 28 2a 28 41 29  A,B)  (u8)((*(A)
20790 3c 28 75 38 29 30 78 38 30 29 20 3f 20 28 28 42  <(u8)0x80) ? ((B
207a0 29 20 3d 20 28 75 33 32 29 2a 28 41 29 29 2c 31  ) = (u32)*(A)),1
207b0 20 3a 20 73 71 6c 69 74 65 33 47 65 74 56 61 72   : sqlite3GetVar
207c0 69 6e 74 33 32 28 28 41 29 2c 20 28 75 33 32 20  int32((A), (u32 
207d0 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
207e0 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
207f0 29 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  )  (u8)(((u32)(B
20800 29 3c 28 75 33 32 29 30 78 38 30 29 20 3f 20 28  )<(u32)0x80) ? (
20810 2a 28 41 29 20 3d 20 28 75 6e 73 69 67 6e 65 64  *(A) = (unsigned
20820 20 63 68 61 72 29 28 42 29 29 2c 31 20 3a 20 73   char)(B)),1 : s
20830 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
20840 32 28 28 41 29 2c 20 28 42 29 29 29 0a 23 64 65  2((A), (B))).#de
20850 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
20860 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
20870 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
20880 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
20890 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
208a0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
208b0 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56  dexAffinityStr(V
208c0 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  dbe *, Index *);
208d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
208e0 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28 56 64  leAffinityStr(Vd
208f0 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  be *, Table *);.
20900 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
20910 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
20920 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
20930 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
20940 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
20950 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
20960 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
20970 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
20980 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
20990 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
209a0 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
209b0 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
209c0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
209d0 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
209e0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
209f0 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a  ar*,...);.void *
20a00 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
20a10 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
20a20 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
20a30 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
20a40 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
20a50 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
20a60 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
20a70 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
20a80 6f 6b 65 6e 20 2a 2a 29 3b 0a 63 6f 6e 73 74 20  oken **);.const 
20a90 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
20aa0 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
20ab0 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
20ac0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
20ad0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
20ae0 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
20af0 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
20b00 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
20b10 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
20b20 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
20b30 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
20b40 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
20b50 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
20b60 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
20b70 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
20b80 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
20b90 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
20ba0 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
20bb0 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 54  pParse, Expr*, T
20bc0 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71  oken*);.Expr *sq
20bd0 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
20be0 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
20bf0 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
20c00 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
20c10 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
20c20 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
20c30 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
20c40 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
20c50 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
20c60 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
20c70 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
20c80 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
20c90 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
20ca0 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
20cb0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
20cc0 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
20cd0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
20ce0 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
20cf0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
20d00 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
20d10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
20d20 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
20d30 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
20d40 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
20d50 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
20d60 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
20d70 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
20d80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
20d90 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
20da0 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
20db0 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
20dc0 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74 29 3b 0a  t char *z,int);.
20dd0 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
20de0 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
20df0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
20e00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
20e10 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
20e20 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
20e30 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
20e40 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
20e50 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
20e60 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20   void *,u8, .   
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e80 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
20e90 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
20ea0 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
20eb0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
20ec0 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
20ed0 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
20ee0 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71  te3 *);.char *sq
20ef0 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
20f00 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
20f10 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
20f20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
20f30 41 42 4c 45 5f 53 54 41 54 33 0a 63 68 61 72 20  ABLE_STAT3.char 
20f40 2a 73 71 6c 69 74 65 33 55 74 66 38 74 6f 31 36  *sqlite3Utf8to16
20f50 28 73 71 6c 69 74 65 33 20 2a 2c 20 75 38 2c 20  (sqlite3 *, u8, 
20f60 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
20f70 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20   *);.#endif.int 
20f80 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d  sqlite3ValueFrom
20f90 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
20fa0 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20  Expr *, u8, u8, 
20fb0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
20fc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
20fd0 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
20fe0 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  y(sqlite3_value 
20ff0 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e  *, u8, u8);.#ifn
21000 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
21010 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63  AMATION.extern c
21020 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
21030 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  ar sqlite3Opcode
21040 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65  Property[];.exte
21050 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
21060 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
21070 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
21080 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
21090 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
210a0 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
210b0 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
210c0 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
210d0 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
210e0 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
210f0 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
21100 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
21110 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44  SQLITE_WSD FuncD
21120 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c  efHash sqlite3Gl
21130 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  obalFunctions;.#
21140 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21150 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
21160 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
21170 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
21180 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
21190 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
211a0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
211b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
211c0 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
211d0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
211e0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
211f0 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
21200 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
21210 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
21220 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
21230 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
21240 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
21250 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
21260 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
21270 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
21280 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
21290 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
212a0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
212b0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
212c0 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
212d0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
212e0 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
212f0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
21300 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21310 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70  qlite3SelectPrep
21320 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
21330 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
21340 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63  .int sqlite3Matc
21350 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20  hSpanName(const 
21360 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
21370 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
21380 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69   const char*);.i
21390 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
213a0 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43  eExprNames(NameC
213b0 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
213c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
213d0 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
213e0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
213f0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
21400 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
21410 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
21420 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
21430 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
21440 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
21450 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
21460 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
21470 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
21480 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
21490 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
214a0 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
214b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
214c0 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
214d0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
214e0 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
214f0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
21500 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
21510 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
21520 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
21530 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
21540 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
21550 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
21560 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ze(Parse*, Token
21570 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
21580 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73  sqlite3InvokeBus
21590 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e  yHandler(BusyHan
215a0 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  dler*);.int sqli
215b0 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65  te3FindDb(sqlite
215c0 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
215d0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61   sqlite3FindDbNa
215e0 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  me(sqlite3 *, co
215f0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
21600 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
21610 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Load(sqlite3*,in
21620 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c  t iDB);.void sql
21630 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53  ite3DeleteIndexS
21640 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c  amples(sqlite3*,
21650 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
21660 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45  lite3DefaultRowE
21670 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  st(Index*);.void
21680 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
21690 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71  LikeFunctions(sq
216a0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
216b0 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46  t sqlite3IsLikeF
216c0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
216d0 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72  ,Expr*,int*,char
216e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
216f0 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61  MinimumFileForma
21700 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
21710 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21720 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
21730 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
21740 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
21750 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
21760 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
21770 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
21780 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
21790 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
217a0 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66  lite3IndexKeyinf
217b0 6f 28 50 61 72 73 65 20 2a 2c 20 49 6e 64 65 78  o(Parse *, Index
217c0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
217d0 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
217e0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
217f0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
21800 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a  id *, .  void (*
21810 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
21820 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
21830 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
21840 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
21850 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
21860 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69  3_value **), voi
21870 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
21880 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44  ntext*),.  FuncD
21890 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
218a0 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71  ructor.);.int sq
218b0 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c  lite3ApiExit(sql
218c0 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a  ite3 *db, int);.
218d0 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
218e0 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73  empDatabase(Pars
218f0 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
21900 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
21910 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a  StrAccum*, char*
21920 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
21930 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
21940 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
21950 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
21960 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21970 41 70 70 65 6e 64 53 70 61 63 65 28 53 74 72 41  AppendSpace(StrA
21980 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72  ccum*,int);.char
21990 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75   *sqlite3StrAccu
219a0 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d  mFinish(StrAccum
219b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
219c0 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74  StrAccumReset(St
219d0 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73  rAccum*);.void s
219e0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74  qlite3SelectDest
219f0 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a  Init(SelectDest*
21a00 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ,int,int);.Expr 
21a10 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f  *sqlite3CreateCo
21a20 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33  lumnExpr(sqlite3
21a30 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69   *, SrcList *, i
21a40 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20  nt, int);..void 
21a50 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73  sqlite3BackupRes
21a60 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63  tart(sqlite3_bac
21a70 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  kup *);.void sql
21a80 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65  ite3BackupUpdate
21a90 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
21aa0 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75  *, Pgno, const u
21ab0 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  8 *);../*.** The
21ac0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
21ad0 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
21ae0 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64  d parser.*/.void
21af0 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
21b00 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73 69  lloc(void*(*)(si
21b10 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c  ze_t));.void sql
21b20 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
21b30 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
21b40 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
21b50 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
21b60 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
21b70 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
21b80 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
21b90 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
21ba0 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
21bb0 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
21bc0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
21bd0 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
21be0 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
21bf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
21c00 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
21c10 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
21c20 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
21c30 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
21c40 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
21c50 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
21c60 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
21c70 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
21c80 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
21c90 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
21ca0 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
21cb0 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
21cc0 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
21cd0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
21ce0 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
21cf0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
21d00 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
21d10 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
21d20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
21d30 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
21d40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
21d50 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
21d60 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
21d70 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
21d80 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
21d90 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
21da0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21db0 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
21dc0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
21dd0 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
21de0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21df0 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
21e00 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
21e10 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20  ite3VtabLock(X) 
21e20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21e30 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
21e40 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21e50 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
21e60 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
21e70 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
21e80 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
21e90 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
21ea0 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
21eb0 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
21ec0 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
21ed0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
21ee0 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
21ef0 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
21f00 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
21f10 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
21f20 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
21f30 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
21f40 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
21f50 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 20 20 20 69  , char **);.   i
21f60 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
21f70 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
21f80 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
21f90 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
21fa0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
21fb0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
21fc0 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
21fd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
21fe0 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
21ff0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
22000 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
22010 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
22020 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
22030 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
22040 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
22050 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
22060 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
22070 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
22080 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
22090 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
220a0 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
220b0 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
220c0 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  =0).#endif.void 
220d0 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
220e0 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
220f0 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
22100 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
22110 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
22120 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
22130 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
22140 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
22150 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
22160 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
22170 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
22180 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
22190 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
221a0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
221b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
221c0 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
221d0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
221e0 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
221f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
22200 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
22210 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
22220 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
22230 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
22240 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
22250 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
22260 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
22270 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
22280 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
22290 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
222a0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
222b0 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
222c0 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
222d0 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
222e0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
222f0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
22300 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
22310 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
22320 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
22330 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
22340 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
22350 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
22360 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
22370 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
22380 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t *);.int sqlite
22390 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
223a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
223b0 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
223c0 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
223d0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
223e0 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
223f0 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
22400 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
22410 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
22420 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
22430 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
22440 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
22450 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
22460 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
22470 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
22480 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
22490 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
224a0 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
224b0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
224c0 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
224d0 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
224e0 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
224f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
22500 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  );.#endif../* De
22510 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
22520 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
22530 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
22540 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
22550 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
22560 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
22570 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
22580 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
22590 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
225a0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
225b0 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
225c0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
225d0 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
225e0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
225f0 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
22600 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
22610 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
22620 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
22630 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
22640 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
22650 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
22660 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
22670 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
22680 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
22690 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
226a0 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
226b0 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
226c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
226d0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
226e0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
226f0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
22700 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
22710 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
22720 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  le*, int, int);.
22730 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
22740 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
22750 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
22760 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
22770 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
22780 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
22790 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20  prList*, int);. 
227a0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
227b0 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
227c0 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
227d0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
227e0 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
227f0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
22800 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
22810 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
22820 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22830 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
22840 73 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65  s(a,b,c,d).  #de
22850 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
22860 65 63 6b 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23  eck(a,b,c,d).  #
22870 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
22880 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
22890 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
228a0 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
228b0 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
228c0 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
228d0 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 30 0a 23  red(a,b,c,d) 0.#
228e0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
228f0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
22900 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
22910 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
22920 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
22930 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
22940 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
22950 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
22960 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
22970 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22980 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
22990 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
229a0 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
229b0 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
229c0 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
229d0 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
229e0 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
229f0 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
22a00 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
22a10 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
22a20 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
22a30 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
22a40 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
22a50 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
22a60 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
22a70 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
22a80 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
22a90 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
22aa0 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
22ab0 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
22ac0 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
22ad0 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
22ae0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
22af0 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  TEST.** is not d
22b00 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
22b10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
22b20 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f  UILTIN_TEST.  vo
22b30 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
22b40 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
22b50 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22b60 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
22b70 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
22b80 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
22b90 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
22ba0 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
22bb0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
22bc0 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64  loc().#endif..#d
22bd0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
22be0 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20 31  OWID           1
22bf0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
22c00 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 20  X_EPH           
22c10 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    2.#define IN_I
22c20 4e 44 45 58 5f 49 4e 44 45 58 20 20 20 20 20 20  NDEX_INDEX      
22c30 20 20 20 20 20 33 0a 69 6e 74 20 73 71 6c 69 74       3.int sqlit
22c40 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
22c50 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
22c60 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt*);..#ifdef SQ
22c70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
22c80 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
22c90 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
22ca0 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
22cb0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
22cc0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
22cd0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  nt, int);.  int 
22ce0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
22cf0 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
22d00 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22d10 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
22d20 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20  lite3_file *);. 
22d30 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
22d40 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65  nalExists(sqlite
22d50 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73  3_file *p);.#els
22d60 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22d70 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
22d80 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
22d90 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e  OsFile).  #defin
22da0 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
22db0 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64  Exists(p) 1.#end
22dc0 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
22dd0 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
22de0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
22df0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
22e00 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
22e10 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
22e20 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
22e30 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
22e40 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
22e50 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
22e60 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
22e70 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
22e80 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
22e90 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
22ea0 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
22eb0 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
22ec0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22ed0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
22ee0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22ef0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
22f00 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
22f10 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
22f20 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
22f30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22f40 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22f50 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
22f60 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
22f70 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
22f80 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
22f90 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
22fa0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
22fb0 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
22fc0 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
22fd0 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
22fe0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
22ff0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
23000 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
23010 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
23020 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
23030 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
23040 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
23050 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
23060 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
23070 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
23080 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
23090 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
230a0 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
230b0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
230c0 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
230d0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
230e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
230f0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
23100 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
23110 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
23120 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
23130 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
23140 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
23150 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
23160 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
23170 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
23180 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
23190 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
231a0 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
231b0 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
231c0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
231d0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
231e0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
231f0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
23200 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
23210 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
23220 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
23230 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
23240 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
23250 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
23260 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
23270 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
23280 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
23290 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
232a0 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
232b0 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
232c0 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
232d0 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
232e0 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
232f0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
23300 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
23310 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
23320 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
23330 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
23340 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
23350 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
23360 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
23370 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
23380 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
23390 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
233a0 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
233b0 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
233c0 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
233d0 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
233e0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
233f0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
23400 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
23410 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
23420 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
23430 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
23440 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
23450 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
23460 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
23470 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
23480 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
23490 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
234a0 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
234b0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
234c0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
234d0 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
234e0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
234f0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
23500 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
23510 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
23520 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
23530 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
23540 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
23550 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
23560 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
23570 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
23580 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
23590 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
235a0 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
235b0 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
235c0 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
235d0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
235e0 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
235f0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
23600 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
23610 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
23620 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
23630 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
23640 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
23650 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
23660 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
23670 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
23680 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
23690 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
236a0 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
236b0 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
236c0 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
236d0 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
236e0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
236f0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
23700 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
23710 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
23720 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
23730 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
23740 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
23750 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
23760 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
23770 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
23780 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
23790 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
237a0 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
237b0 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
237c0 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
237d0 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
237e0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
237f0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
23800 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
23810 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
23820 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
23830 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
23840 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23850 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
23860 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23870 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
23880 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
23890 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
238a0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
238b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
238c0 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
238d0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
238e0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
238f0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
23900 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
23910 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
23920 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
23930 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23940 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
23950 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
23960 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23970 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
23980 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
23990 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
239a0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
239b0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
239c0 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
239d0 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
239e0 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
239f0 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
23a00 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
23a10 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
23a20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
23a30 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
23a40 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
23a50 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
23a60 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
23a70 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
23a80 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
23a90 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
23aa0 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
23ab0 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
23ac0 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.