/ Hex Artifact Content
Login

Artifact a6b3f816df7abd24bbb62b13867b47c2255b11a4:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63  endif../*.** Inc
08a0: 6c 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65  lude standard he
08b0: 61 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65  ader files as ne
08c0: 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65  cessary.*/.#ifde
08d0: 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a  f HAVE_STDINT_H.
08e0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74  #include <stdint
08f0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h>.#endif.#ifde
0900: 66 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f  f HAVE_INTTYPES_
0910: 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74  H.#include <intt
0920: 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  ypes.h>.#endif..
0930: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
0940: 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75  ing macros are u
0950: 73 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e  sed to cast poin
0960: 74 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73  ters to integers
0970: 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73   and.** integers
0980: 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54   to pointers.  T
0990: 68 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68  he way you do th
09a0: 69 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f  is varies from o
09b0: 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74  ne compiler.** t
09c0: 6f 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77  o the next, so w
09d0: 65 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64  e have developed
09e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
09f0: 65 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d  et of #if statem
0a00: 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72  ents.** to gener
0a10: 61 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  ate appropriate 
0a20: 6d 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64  macros for a wid
0a30: 65 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69  e range of compi
0a40: 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lers..**.** The 
0a50: 63 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77  correct "ANSI" w
0a60: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73  ay to do this is
0a70: 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70   to use the intp
0a80: 74 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55  tr_t type. .** U
0a90: 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68  nfortunately, th
0aa0: 61 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f  at typedef is no
0ab0: 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61  t available on a
0ac0: 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72  ll compilers, or
0ad0: 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61  .** if it is ava
0ae0: 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69  ilable, it requi
0af0: 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20  res an #include 
0b00: 6f 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64  of specific head
0b10: 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79  ers.** that vary
0b20: 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e   from one machin
0b30: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a  e to the next..*
0b40: 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36  *.** Ticket #386
0b50: 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63  0:  The llvm-gcc
0b60: 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72  -4.2 compiler fr
0b70: 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20  om Apple chokes 
0b80: 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64  on.** the ((void
0b90: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0ba0: 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75  ) construct.  Bu
0bb0: 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e  t MSVC chokes on
0bc0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a   ((void*)(X))..*
0bd0: 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20  * So we have to 
0be0: 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f  define the macro
0bf0: 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77  s in different w
0c00: 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ays depending on
0c10: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72   the.** compiler
0c20: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
0c30: 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f  (__PTRDIFF_TYPE_
0c40: 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65  _)  /* This case
0c50: 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72   should work for
0c60: 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65   GCC */.# define
0c70: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0c80: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0c90: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0ca0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
0cb0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0cc0: 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54  (X)  ((int)(__PT
0cd0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29  RDIFF_TYPE__)(X)
0ce0: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
0cf0: 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20  (__GNUC__)      
0d00: 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f   /* Works for co
0d10: 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68  mpilers other th
0d20: 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66  an LLVM */.# def
0d30: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
0d40: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
0d50: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0d60: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0d70: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0d80: 20 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29   ((int)(((char*)
0d90: 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65  X)-(char*)0)).#e
0da0: 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45  lif defined(HAVE
0db0: 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20  _STDINT_H)   /* 
0dc0: 55 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66  Use this case if
0dd0: 20 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65   we have ANSI he
0de0: 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e  aders */.# defin
0df0: 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f  e SQLITE_INT_TO_
0e00: 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29  PTR(X)  ((void*)
0e10: 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23  (intptr_t)(X)).#
0e20: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
0e30: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
0e40: 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58  int)(intptr_t)(X
0e50: 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20  )).#else        
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e70: 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61    /* Generates a
0e80: 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69   warning - but i
0e90: 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a  t always works *
0ea0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
0eb0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
0ec0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20   ((void*)(X)).# 
0ed0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0ee0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0ef0: 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a  nt)(X)).#endif..
0f00: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
0f10: 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72  _THREADSAFE macr
0f20: 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65  o must be define
0f30: 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e  d as 0, 1, or 2.
0f40: 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65  .** 0 means mute
0f50: 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e  xes are permanen
0f60: 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20  tly disable and 
0f70: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e  the library is n
0f80: 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61  ever.** threadsa
0f90: 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65  fe.  1 means the
0fa0: 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69   library is seri
0fb0: 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20  alized which is 
0fc0: 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c  the highest.** l
0fd0: 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61  evel of threadsa
0fe0: 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74  fety.  2 means t
0ff0: 68 65 20 6c 69 62 61 72 79 20 69 73 20 6d 75 6c  he libary is mul
1000: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1010: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1020: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1030: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1040: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
1050: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
1060: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1070: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
1080: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
1090: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10a0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
10b0: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
10c0: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
10d0: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
10e0: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
10f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1100: 48 52 45 41 44 53 41 46 45 29 0a 23 69 66 20 64  HREADSAFE).#if d
1110: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1120: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  E).# define SQLI
1130: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48  TE_THREADSAFE TH
1140: 52 45 41 44 53 41 46 45 0a 23 65 6c 73 65 0a 23  READSAFE.#else.#
1150: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1160: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1170: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1180: 39 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 65 6e 64  9 */.#endif.#end
1190: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73  if../*.** Powers
11a0: 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73  afe overwrite is
11b0: 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20   on by default. 
11c0: 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e   But can be turn
11d0: 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20  ed off using.** 
11e0: 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57  the -DSQLITE_POW
11f0: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1200: 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  =0 command-line 
1210: 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  option..*/.#ifnd
1220: 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ef SQLITE_POWERS
1230: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20  AFE_OVERWRITE.# 
1240: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f  define SQLITE_PO
1250: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1260: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 1.#endif../*.*
1270: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46  * The SQLITE_DEF
1280: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d  AULT_MEMSTATUS m
1290: 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66  acro must be def
12a0: 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30  ined as either 0
12b0: 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74   or 1..** It det
12c0: 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
12d0: 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75  or not the featu
12e0: 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a  res related to .
12f0: 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ** SQLITE_CONFIG
1300: 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61  _MEMSTATUS are a
1310: 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
1320: 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73  ult or not. This
1330: 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65   value can.** be
1340: 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72   overridden at r
1350: 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  untime using the
1360: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
1370: 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64  ) API..*/.#if !d
1380: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1390: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29  FAULT_MEMSTATUS)
13a0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
13b0: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
13c0: 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 1.#endif../*.
13d0: 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  ** Exactly one o
13e0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13f0: 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64  macros must be d
1400: 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20  efined in order 
1410: 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68  to.** specify wh
1420: 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ich memory alloc
1430: 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20  ation subsystem 
1440: 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  to use..**.**   
1450: 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f    SQLITE_SYSTEM_
1460: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
1470: 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79  // Use normal sy
1480: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
1490: 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33       SQLITE_WIN3
14a0: 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  2_MALLOC        
14b0: 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20     // Use Win32 
14c0: 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a  native heap API.
14d0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45  **     SQLITE_ZE
14e0: 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  RO_MALLOC       
14f0: 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74       // Use a st
1500: 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61  ub allocator tha
1510: 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a  t always fails.*
1520: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d  *     SQLITE_MEM
1530: 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20  DEBUG           
1540: 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67      // Debugging
1550: 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74   version of syst
1560: 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a  em malloc().**.*
1570: 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66  * On Windows, if
1580: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33   the SQLITE_WIN3
1590: 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54  2_MALLOC_VALIDAT
15a0: 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  E macro is defin
15b0: 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73  ed and the.** as
15c0: 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20  sert() macro is 
15d0: 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61  enabled, each ca
15e0: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33  ll into the Win3
15f0: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75  2 native heap su
1600: 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20  bsystem.** will 
1610: 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61  cause HeapValida
1620: 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e  te to be called.
1630: 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61    If heap valida
1640: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c  tion should fail
1650: 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f  , an.** assertio
1660: 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65  n will be trigge
1670: 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 28 48 69 73 74  red..**.** (Hist
1680: 6f 72 69 63 61 6c 20 6e 6f 74 65 3a 20 20 54 68  orical note:  Th
1690: 65 72 65 20 75 73 65 64 20 74 6f 20 62 65 20 73  ere used to be s
16a0: 65 76 65 72 61 6c 20 6f 74 68 65 72 20 6f 70 74  everal other opt
16b0: 69 6f 6e 73 2c 20 62 75 74 20 77 65 27 76 65 0a  ions, but we've.
16c0: 2a 2a 20 70 61 72 65 64 20 69 74 20 64 6f 77 6e  ** pared it down
16d0: 20 74 6f 20 6a 75 73 74 20 74 68 65 73 65 20 74   to just these t
16e0: 68 72 65 65 2e 29 0a 2a 2a 0a 2a 2a 20 49 66 20  hree.).**.** If 
16f0: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76  none of the abov
1700: 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74  e are defined, t
1710: 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53  hen set SQLITE_S
1720: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a  YSTEM_MALLOC as.
1730: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a  ** the default..
1740: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1750: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1760: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1770: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
1780: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
1790: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
17a0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
17b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
17c0: 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72  EMDEBUG)>1.# err
17d0: 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20  or "Two or more 
17e0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
17f0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
1800: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
1810: 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65  ons\. are define
1820: 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e  d but at most on
1830: 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20  e is allowed:\. 
1840: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1850: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e  LLOC, SQLITE_WIN
1860: 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  32_MALLOC, SQLIT
1870: 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51  E_MEMDEBUG,\. SQ
1880: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1890: 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ".#endif.#if def
18a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
18b0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
18c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
18d0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
18e0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
18f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
1900: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1910: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d  LITE_MEMDEBUG)==
1920: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
1930: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
1940: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
1950: 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  If SQLITE_MALLOC
1960: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e  _SOFT_LIMIT is n
1970: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72  ot zero, then tr
1980: 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a  y to keep the.**
1990: 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79   sizes of memory
19a0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c   allocations bel
19b0: 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68  ow this value wh
19c0: 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f  ere possible..*/
19d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
19e0: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
19f0: 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65  _LIMIT).# define
1a00: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
1a10: 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23  OFT_LIMIT 1024.#
1a20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20  endif../*.** We 
1a30: 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f  need to define _
1a40: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20  XOPEN_SOURCE as 
1a50: 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72  follows in order
1a60: 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65   to enable.** re
1a70: 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20  cursive mutexes 
1a80: 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73  on most Unix sys
1a90: 74 65 6d 73 2e 20 20 42 75 74 20 4d 61 63 20 4f  tems.  But Mac O
1aa0: 53 20 58 20 69 73 20 64 69 66 66 65 72 65 6e 74  S X is different
1ab0: 2e 0a 2a 2a 20 54 68 65 20 5f 58 4f 50 45 4e 5f  ..** The _XOPEN_
1ac0: 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63 61  SOURCE define ca
1ad0: 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f  uses problems fo
1ae0: 72 20 4d 61 63 20 4f 53 20 58 20 77 65 20 61 72  r Mac OS X we ar
1af0: 65 20 74 6f 6c 64 2c 0a 2a 2a 20 73 6f 20 69 74  e told,.** so it
1b00: 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 72   is omitted ther
1b10: 65 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 23  e.  See ticket #
1b20: 32 36 37 33 2e 0a 2a 2a 0a 2a 2a 20 4c 61 74 65  2673..**.** Late
1b30: 72 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20  r we learn that 
1b40: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 69 73  _XOPEN_SOURCE is
1b50: 20 70 6f 6f 72 6c 79 20 6f 72 20 69 6e 63 6f 72   poorly or incor
1b60: 72 65 63 74 6c 79 0a 2a 2a 20 69 6d 70 6c 65 6d  rectly.** implem
1b70: 65 6e 74 65 64 20 6f 6e 20 73 6f 6d 65 20 73 79  ented on some sy
1b80: 73 74 65 6d 73 2e 20 20 53 6f 20 77 65 20 61 76  stems.  So we av
1b90: 6f 69 64 20 64 65 66 69 6e 69 6e 67 20 69 74 20  oid defining it 
1ba0: 61 74 20 61 6c 6c 0a 2a 2a 20 69 66 20 69 74 20  at all.** if it 
1bb0: 69 73 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e  is already defin
1bc0: 65 64 20 6f 72 20 69 66 20 69 74 20 69 73 20 75  ed or if it is u
1bd0: 6e 6e 65 65 64 65 64 20 62 65 63 61 75 73 65 20  nneeded because 
1be0: 77 65 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 64 6f  we are.** not do
1bf0: 69 6e 67 20 61 20 74 68 72 65 61 64 73 61 66 65  ing a threadsafe
1c00: 20 62 75 69 6c 64 2e 20 20 54 69 63 6b 65 74 20   build.  Ticket 
1c10: 23 32 36 38 31 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  #2681..**.** See
1c20: 20 61 6c 73 6f 20 74 69 63 6b 65 74 20 23 32 37   also ticket #27
1c30: 34 31 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  41..*/.#if !defi
1c40: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
1c50: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
1c60: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
1c70: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
1c80: 29 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45  ) && SQLITE_THRE
1c90: 41 44 53 41 46 45 0a 23 20 20 64 65 66 69 6e 65  ADSAFE.#  define
1ca0: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 35   _XOPEN_SOURCE 5
1cb0: 30 30 20 20 2f 2a 20 4e 65 65 64 65 64 20 74 6f  00  /* Needed to
1cc0: 20 65 6e 61 62 6c 65 20 70 74 68 72 65 61 64 20   enable pthread 
1cd0: 72 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65  recursive mutexe
1ce0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  s */.#endif../*.
1cf0: 2a 2a 20 54 68 65 20 54 43 4c 20 68 65 61 64 65  ** The TCL heade
1d00: 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e 65 65 64  rs are only need
1d10: 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
1d20: 67 20 74 68 65 20 54 43 4c 20 62 69 6e 64 69 6e  g the TCL bindin
1d30: 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  gs..*/.#if defin
1d40: 65 64 28 53 51 4c 49 54 45 5f 54 43 4c 29 20 7c  ed(SQLITE_TCL) |
1d50: 7c 20 64 65 66 69 6e 65 64 28 54 43 4c 53 48 29  | defined(TCLSH)
1d60: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e  .# include <tcl.
1d70: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1d80: 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49   NDEBUG and SQLI
1d90: 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70  TE_DEBUG are opp
1da0: 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75  osites.  It shou
1db0: 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75  ld always be tru
1dc0: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
1dd0: 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69  d(NDEBUG)==!defi
1de0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1df0: 29 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e  ).  If this is n
1e00: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75  ot currently tru
1e10: 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72  e,.** make it tr
1e20: 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f  ue by defining o
1e30: 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45  r undefining NDE
1e40: 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69  BUG..**.** Setti
1e50: 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20  ng NDEBUG makes 
1e60: 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72  the code smaller
1e70: 20 61 6e 64 20 72 75 6e 20 66 61 73 74 65 72 20   and run faster 
1e80: 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65  by disabling the
1e90: 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73 73 65 72  .** number asser
1ea0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
1eb0: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
1ec0: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
1ed0: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
1ee0: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
1ef0: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
1f00: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
1f10: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
1f20: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
1f30: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
1f40: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
1f50: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
1f60: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
1f70: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
1f80: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1f90: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1fa0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
1fb0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
1fc0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
1fd0: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
1fe0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
1ff0: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2000: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2010: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2020: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2030: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2040: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2050: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2060: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2070: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2080: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
2090: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
20a0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
20b0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
20c0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
20d0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
20e0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
20f0: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
2100: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2110: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2120: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2130: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2140: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2150: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2160: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2170: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2180: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
2190: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
21a0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
21b0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
21c0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
21d0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
21e0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
21f0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2200: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2210: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2220: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2230: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2240: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2250: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2260: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2270: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2280: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
2290: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
22a0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
22b0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
22c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
22d0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
22e0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
22f0: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
2300: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2310: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2320: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2330: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2340: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2350: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2360: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2370: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2380: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2390: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
23a0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
23b0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
23c0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
23d0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
23e0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
23f0: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2400: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2410: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2420: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2430: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2440: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2450: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2460: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2470: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2480: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2490: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
24a0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
24b0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
24c0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
24d0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
24e0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
24f0: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2500: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2510: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2520: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2530: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2540: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2550: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2560: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2570: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2580: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2590: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
25a0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
25b0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
25c0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
25d0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
25e0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
25f0: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2600: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2610: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2620: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2630: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2640: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2650: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2660: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2670: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2680: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2690: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
26a0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
26b0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
26c0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
26d0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
26e0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
26f0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2700: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2710: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2720: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2730: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2740: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2750: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2760: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2770: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2780: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2790: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
27a0: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
27b0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
27c0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
27d0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
27e0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
27f0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2800: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2810: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2820: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2830: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2840: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2850: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2860: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2870: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2880: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2890: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
28a0: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
28b0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
28c0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
28d0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
28e0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 6e  chable code then
28f0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
2900: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
2910: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
2920: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2930: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2940: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2950: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
2960: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
2970: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
2980: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
2990: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
29a0: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
29b0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
29c0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
29d0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
29e0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
29f0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
2a00: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2a10: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
2a20: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
2a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
2a40: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
2a50: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
2a60: 74 20 69 73 20 61 20 69 6e 74 65 67 65 72 20 74  t is a integer t
2a70: 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  hat is too large
2a80: 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32  .** to fit in 32
2a90: 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63  -bits.  This mac
2aa0: 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
2ab0: 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73  e of various tes
2ac0: 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f  tcase().** macro
2ad0: 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  s to verify that
2ae0: 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20   we have tested 
2af0: 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65  SQLite for large
2b00: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a  -file support..*
2b10: 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47  /.#define IS_BIG
2b20: 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e  _INT(X)  (((X)&~
2b30: 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (i64)0xffffffff)
2b40: 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  !=0)../*.** The 
2b50: 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29  macro unlikely()
2b60: 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20   is a hint that 
2b70: 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c  surrounds a bool
2b80: 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  ean.** expressio
2b90: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
2ba0: 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20  y false.  Macro 
2bb0: 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e  likely() surroun
2bc0: 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20  ds.** a boolean 
2bd0: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
2be0: 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
2bf0: 20 20 47 43 43 20 69 73 20 61 62 6c 65 20 74 6f    GCC is able to
2c00: 0a 2a 2a 20 75 73 65 20 74 68 65 73 65 20 68 69  .** use these hi
2c10: 6e 74 73 20 74 6f 20 67 65 6e 65 72 61 74 65 20  nts to generate 
2c20: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 73 6f 6d  better code, som
2c30: 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69 66 20 64  etimes..*/.#if d
2c40: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2c50: 20 26 26 20 30 0a 23 20 64 65 66 69 6e 65 20 6c   && 0.# define l
2c60: 69 6b 65 6c 79 28 58 29 20 20 20 20 5f 5f 62 75  ikely(X)    __bu
2c70: 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29  iltin_expect((X)
2c80: 2c 31 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c  ,1).# define unl
2c90: 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62 75 69 6c  ikely(X)  __buil
2ca0: 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c 30  tin_expect((X),0
2cb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
2cc0: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 21 21   likely(X)    !!
2cd0: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c  (X).# define unl
2ce0: 69 6b 65 6c 79 28 58 29 20 20 21 21 28 58 29 0a  ikely(X)  !!(X).
2cf0: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65  #endif..#include
2d00: 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e   "sqlite3.h".#in
2d10: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
2d20: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
2d30: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
2d40: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
2d50: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
2d60: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
2d70: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
2d80: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
2d90: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
2da0: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
2db0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
2dc0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
2dd0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
2de0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
2df0: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
2e00: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
2e10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
2e20: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
2e30: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
2e40: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
2e50: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
2e60: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
2e70: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
2e80: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
2e90: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
2ea0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
2eb0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
2ec0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
2ed0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
2ee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2ef0: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
2f00: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
2f10: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
2f20: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
2f30: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
2f40: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
2f50: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
2f60: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2f70: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
2f80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
2f90: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
2fa0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
2fb0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
2fc0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
2fd0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
2fe0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
2ff0: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
3000: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
3010: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
3020: 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a  e C compiler .**
3030: 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73   to omit code us
3040: 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65  ed by TEMP table
3050: 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20  s without messy 
3060: 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e  #ifndef statemen
3070: 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ts..*/.#ifdef SQ
3080: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
3090: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
30a0: 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65  MPDB 1.#else.#de
30b0: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
30c0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
30d0: 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61   The "file forma
30e0: 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20  t" number is an 
30f0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
3100: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
3110: 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45  ever.** the VDBE
3120: 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d  -level file form
3130: 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65  at changes.  The
3140: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
3150: 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20  s define the.** 
3160: 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65  the default file
3170: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20   format for new 
3180: 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68  databases and th
3190: 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66  e maximum file f
31a0: 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68  ormat.** that th
31b0: 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65  e library can re
31c0: 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ad..*/.#define S
31d0: 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46  QLITE_MAX_FILE_F
31e0: 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20  ORMAT 4.#ifndef 
31f0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
3200: 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66  ILE_FORMAT.# def
3210: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
3220: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  LT_FILE_FORMAT 4
3230: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
3240: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3250: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65   triggers are re
3260: 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75  cursive by defau
3270: 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  lt.  This can be
3280: 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72  .** changed at r
3290: 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20  un-time using a 
32a0: 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64  pragma..*/.#ifnd
32b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
32c0: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
32d0: 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51  GERS.# define SQ
32e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
32f0: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20  URSIVE_TRIGGERS 
3300: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3310: 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c  Provide a defaul
3320: 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49  t value for SQLI
3330: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e  TE_TEMP_STORE in
3340: 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20   case it is not 
3350: 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20  specified.** on 
3360: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
3370: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3380: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20  TE_TEMP_STORE.# 
3390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
33a0: 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69  MP_STORE 1.#endi
33b0: 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65  f../*.** GCC doe
33c0: 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65  s not define the
33d0: 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72   offsetof() macr
33e0: 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20  o so we'll have 
33f0: 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73  to do it.** ours
3400: 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  elves..*/.#ifnde
3410: 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69  f offsetof.#defi
3420: 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55  ne offsetof(STRU
3430: 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69  CTURE,FIELD) ((i
3440: 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54  nt)((char*)&((ST
3450: 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45  RUCTURE*)0)->FIE
3460: 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  LD)).#endif../*.
3470: 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  ** Check to see 
3480: 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20  if this machine 
3490: 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59  uses EBCDIC.  (Y
34a0: 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f  es, believe it o
34b0: 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20  r.** not, there 
34c0: 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e  are still machin
34d0: 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61  es out there tha
34e0: 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a  t use EBCDIC.).*
34f0: 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33  /.#if 'A' == '\3
3500: 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  01'.# define SQL
3510: 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c  ITE_EBCDIC 1.#el
3520: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
3530: 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69  TE_ASCII 1.#endi
3540: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72  f../*.** Integer
3550: 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73  s of known sizes
3560: 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66  .  These typedef
3570: 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  s might change f
3580: 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73  or architectures
3590: 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69  .** where the si
35a0: 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72  zes very.  Prepr
35b0: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61  ocessor macros a
35c0: 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20  re available so 
35d0: 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65  that the.** type
35e0: 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69  s can be conveni
35f0: 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20  ently redefined 
3600: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e  at compile-type.
3610: 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a    Like this:.**.
3620: 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d  **         cc '-
3630: 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f  DUINTPTR_TYPE=lo
3640: 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e  ng long int' ...
3650: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  .*/.#ifndef UINT
3660: 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  32_TYPE.# ifdef 
3670: 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20  HAVE_UINT32_T.# 
3680: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
3690: 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65  YPE uint32_t.# e
36a0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
36b0: 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT32_TYPE unsign
36c0: 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  ed int.# endif.#
36d0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
36e0: 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65  NT16_TYPE.# ifde
36f0: 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a  f HAVE_UINT16_T.
3700: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
3710: 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23  _TYPE uint16_t.#
3720: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
3730: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69  UINT16_TYPE unsi
3740: 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23  gned short int.#
3750: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3760: 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  fndef INT16_TYPE
3770: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e  .# ifdef HAVE_IN
3780: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
3790: 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36  INT16_TYPE int16
37a0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
37b0: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73  ine INT16_TYPE s
37c0: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
37d0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
37e0: 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64  UINT8_TYPE.# ifd
37f0: 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a  ef HAVE_UINT8_T.
3800: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
3810: 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65  TYPE uint8_t.# e
3820: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
3830: 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  NT8_TYPE unsigne
3840: 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23  d char.# endif.#
3850: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
3860: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
3870: 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64  HAVE_INT8_T.#  d
3880: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
3890: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
38a0: 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50   define INT8_TYP
38b0: 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  E signed char.# 
38c0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
38d0: 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  ndef LONGDOUBLE_
38e0: 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f  TYPE.# define LO
38f0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f  NGDOUBLE_TYPE lo
3900: 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66  ng double.#endif
3910: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3920: 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20  int64 i64;      
3930: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69      /* 8-byte si
3940: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3950: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75  typedef sqlite_u
3960: 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20  int64 u64;      
3970: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73     /* 8-byte uns
3980: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3990: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f  .typedef UINT32_
39a0: 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20  TYPE u32;       
39b0: 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e      /* 4-byte un
39c0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
39d0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36  /.typedef UINT16
39e0: 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20  _TYPE u16;      
39f0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75       /* 2-byte u
3a00: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
3a10: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
3a20: 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20  _TYPE i16;      
3a30: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
3a40: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3a50: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f  /.typedef UINT8_
3a60: 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20  TYPE u8;        
3a70: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75       /* 1-byte u
3a80: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
3a90: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f  */.typedef INT8_
3aa0: 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20  TYPE i8;        
3ab0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
3ac0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3ad0: 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  /../*.** SQLITE_
3ae0: 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34  MAX_U32 is a u64
3af0: 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69   constant that i
3b00: 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36  s the maximum u6
3b10: 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20  4 value.** that 
3b20: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e  can be stored in
3b30: 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c   a u32 without l
3b40: 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68  oss of data.  Th
3b50: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78  e value.** is 0x
3b60: 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66  00000000ffffffff
3b70: 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f  .  But because o
3b80: 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65  f quirks of some
3b90: 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a   compilers, we.*
3ba0: 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66  * have to specif
3bb0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74  y the value in t
3bc0: 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76  he less intuitiv
3bd0: 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a  e manner shown:.
3be0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
3bf0: 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75  E_MAX_U32  ((((u
3c00: 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f  64)1)<<32)-1)../
3c10: 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
3c20: 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
3c30: 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65  estimates of the
3c40: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
3c50: 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72  in a.** table or
3c60: 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73   index.  This is
3c70: 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74   an unsigned int
3c80: 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20  eger type.  For 
3c90: 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20  99.9% of.** the 
3ca0: 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20  world, a 32-bit 
3cb0: 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69  integer is suffi
3cc0: 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34  cient.  But a 64
3cd0: 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
3ce0: 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63  can be used at c
3cf0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64  ompile-time if d
3d00: 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  esired..*/.#ifde
3d10: 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53  f SQLITE_64BIT_S
3d20: 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36  TATS. typedef u6
3d30: 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a  4 tRowcnt;    /*
3d40: 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20   64-bit only if 
3d50: 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d  requested at com
3d60: 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c  pile-time */.#el
3d70: 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20  se. typedef u32 
3d80: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33  tRowcnt;    /* 3
3d90: 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66  2-bit is the def
3da0: 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  ault */.#endif..
3db0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
3dc0: 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
3dd0: 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73  r the machine is
3de0: 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65   big or little e
3df0: 6e 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61  ndian,.** evalua
3e00: 74 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  ted at runtime..
3e10: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
3e20: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f  _AMALGAMATION.co
3e30: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
3e40: 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78  ne = 1;.#else.ex
3e50: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
3e60: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69  qlite3one;.#endi
3e70: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69 33  f.#if defined(i3
3e80: 38 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  86) || defined(_
3e90: 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69  _i386__) || defi
3ea0: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20  ned(_M_IX86)\.  
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ec0: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65             || de
3ed0: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20  fined(__x86_64) 
3ee0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
3ef0: 5f 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  _64__).# define 
3f00: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
3f10: 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53      0.# define S
3f20: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
3f30: 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 1.# define SQ
3f40: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
3f50: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45    SQLITE_UTF16LE
3f60: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3f70: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
3f80: 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26      (*(char *)(&
3f90: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a  sqlite3one)==0).
3fa0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3fb0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28  LITTLEENDIAN (*(
3fc0: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
3fd0: 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e  one)==1).# defin
3fe0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
3ff0: 54 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47  TIVE (SQLITE_BIG
4000: 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54  ENDIAN?SQLITE_UT
4010: 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46  F16BE:SQLITE_UTF
4020: 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  16LE).#endif../*
4030: 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f  .** Constants fo
4040: 72 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e  r the largest an
4050: 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69  d smallest possi
4060: 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65  ble 64-bit signe
4070: 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54  d integers..** T
4080: 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20  hese macros are 
4090: 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b  designed to work
40a0: 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f   correctly on bo
40b0: 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34  th 32-bit and 64
40c0: 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  -bit.** compiler
40d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41  s..*/.#define LA
40e0: 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78  RGEST_INT64  (0x
40f0: 66 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29  ffffffff|(((i64)
4100: 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
4110: 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45  ).#define SMALLE
4120: 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29  ST_INT64 (((i64)
4130: 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e  -1) - LARGEST_IN
4140: 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75  T64)../* .** Rou
4150: 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74  nd up a number t
4160: 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65  o the next large
4170: 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e  r multiple of 8.
4180: 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a    This is used.*
4190: 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74  * to force 8-byt
41a0: 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36  e alignment on 6
41b0: 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75  4-bit architectu
41c0: 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
41d0: 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28  ROUND8(x)     ((
41e0: 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  (x)+7)&~7)../*.*
41f0: 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20  * Round down to 
4200: 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74  the nearest mult
4210: 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65  iple of 8.*/.#de
4220: 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28  fine ROUNDDOWN8(
4230: 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a  x) ((x)&~7)../*.
4240: 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  ** Assert that t
4250: 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20  he pointer X is 
4260: 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d  aligned to an 8-
4270: 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20  byte boundary.  
4280: 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73  This.** macro is
4290: 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69   used only withi
42a0: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65  n assert() to ve
42b0: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f  rify that the co
42c0: 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61  de gets.** all a
42d0: 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63  lignment restric
42e0: 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a  tions correct..*
42f0: 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20  *.** Except, if 
4300: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4310: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20  IGNED_MALLOC is 
4320: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68  defined, then th
4330: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
4340: 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65  malloc() impleme
4350: 6e 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75  ntion might retu
4360: 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69  rn us 4-byte ali
4370: 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73  gned.** pointers
4380: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
4390: 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62   only verify 4-b
43a0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a  yte alignment..*
43b0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
43c0: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
43d0: 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45  ALLOC.# define E
43e0: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
43f0: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
4400: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
4410: 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  0)&3)==0).#else.
4420: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
4430: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
4440: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
4450: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d   - (char*)0)&7)=
4460: 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  =0).#endif.../*.
4470: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
4480: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
4490: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
44a0: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
44b0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
44c0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
44d0: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
44e0: 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  e. .**.** The sq
44f0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
4500: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
4510: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
4520: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
4530: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
4540: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
4550: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
4560: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
4570: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
4580: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
4590: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
45a0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
45b0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
45c0: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
45d0: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
45e0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
45f0: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
4600: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
4610: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
4620: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
4630: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46  ler {.  int (*xF
4640: 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29  unc)(void *,int)
4650: 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63  ;  /* The busy c
4660: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
4670: 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20  d *pArg;        
4680: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
4690: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
46a0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
46b0: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
46c0: 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65        /* Increme
46d0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62  nted with each b
46e0: 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a  usy call */.};..
46f0: 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68  /*.** Name of th
4700: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
4710: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61  e table.  The ma
4720: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
4730: 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63  ble.** is a spec
4740: 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68  ial table that h
4750: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61  olds the names a
4760: 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  nd attributes of
4770: 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62   all.** user tab
4780: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
4790: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
47a0: 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73  ER_NAME       "s
47b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64  qlite_master".#d
47c0: 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45  efine TEMP_MASTE
47d0: 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f  R_NAME  "sqlite_
47e0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a  temp_master"../*
47f0: 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67  .** The root-pag
4800: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
4810: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a  database table..
4820: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
4830: 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a  R_ROOT       1..
4840: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f  /*.** The name o
4850: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  f the schema tab
4860: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
4870: 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20  CHEMA_TABLE(x)  
4880: 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26  ((!OMIT_TEMPDB)&
4890: 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53  &(x==1)?TEMP_MAS
48a0: 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f  TER_NAME:MASTER_
48b0: 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63  NAME)../*.** A c
48c0: 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f  onvenience macro
48d0: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
48e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
48f0: 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72  ents in.** an ar
4900: 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ray..*/.#define 
4910: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20  ArraySize(X)    
4920: 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29  ((int)(sizeof(X)
4930: 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a  /sizeof(X[0]))).
4940: 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65  ./*.** Determine
4950: 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
4960: 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74   is a power of t
4970: 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  wo.*/.#define Is
4980: 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28  PowerOfTwo(X) ((
4990: 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29  (X)&((X)-1))==0)
49a0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
49b0: 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61  owing value as a
49c0: 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e   destructor mean
49d0: 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33  s to use sqlite3
49e0: 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65  DbFree()..** The
49f0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
4a00: 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65   routine require
4a10: 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73  s two parameters
4a20: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
4a30: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
4a40: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
4a50: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
4a60: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
4a70: 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74   introduce .** t
4a80: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
4a90: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
4aa0: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
4ab0: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20  fferently.  Any 
4ac0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c  .** pointer will
4ad0: 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f   work here as lo
4ae0: 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74  ng as it is dist
4af0: 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45  inct from SQLITE
4b00: 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53  _STATIC.** and S
4b10: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e  QLITE_TRANSIENT.
4b20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4b30: 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73  TE_DYNAMIC   ((s
4b40: 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f  qlite3_destructo
4b50: 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61  r_type)sqlite3Ma
4b60: 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a  llocSize)../*.**
4b70: 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49   When SQLITE_OMI
4b80: 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64  T_WSD is defined
4b90: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
4ba0: 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66  the target platf
4bb0: 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  orm does.** not 
4bc0: 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65  support Writable
4bd0: 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53   Static Data (WS
4be0: 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61  D) such as globa
4bf0: 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72  l and static var
4c00: 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76  iables..** All v
4c10: 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69  ariables must ei
4c20: 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73  ther be on the s
4c30: 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61  tack or dynamica
4c40: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72  lly allocated fr
4c50: 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20  om.** the heap. 
4c60: 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73   When WSD is uns
4c70: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61  upported, the va
4c80: 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69  riable declarati
4c90: 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a  ons scattered.**
4ca0: 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20   throughout the 
4cb0: 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74  SQLite code must
4cc0: 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74   become constant
4cd0: 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20  s instead.  The 
4ce0: 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61  SQLITE_WSD.** ma
4cf0: 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
4d00: 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41  this purpose.  A
4d10: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65  nd instead of re
4d20: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61  ferencing the va
4d30: 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74  riable.** direct
4d40: 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63  ly, we use its c
4d50: 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79  onstant as a key
4d60: 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72   to lookup the r
4d70: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
4d80: 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74  d.** buffer that
4d90: 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69   holds real vari
4da0: 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74  able.  The const
4db0: 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20  ant is also the 
4dc0: 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66  initializer.** f
4dd0: 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  or the run-time 
4de0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
4df0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75  ..**.** In the u
4e00: 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20  sual case where 
4e10: 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64  WSD is supported
4e20: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44  , the SQLITE_WSD
4e30: 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d   and GLOBAL.** m
4e40: 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d  acros become no-
4e50: 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72  ops and have zer
4e60: 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d  o performance im
4e70: 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  pact..*/.#ifdef 
4e80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
4e90: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
4ea0: 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65  _WSD const.  #de
4eb0: 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29  fine GLOBAL(t,v)
4ec0: 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77   (*(t*)sqlite3_w
4ed0: 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26  sd_find((void*)&
4ee0: 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29  (v), sizeof(v)))
4ef0: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
4f00: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47  e3GlobalConfig G
4f10: 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c  LOBAL(struct Sql
4f20: 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69  ite3Config, sqli
4f30: 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74  te3Config).  int
4f40: 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69   sqlite3_wsd_ini
4f50: 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b  t(int N, int J);
4f60: 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
4f70: 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a  _wsd_find(void *
4f80: 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65  K, int L);.#else
4f90: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
4fa0: 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65  E_WSD .  #define
4fb0: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20   GLOBAL(t,v) v. 
4fc0: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
4fd0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c  GlobalConfig sql
4fe0: 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69  ite3Config.#endi
4ff0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
5000: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72  lowing macros ar
5010: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
5020: 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e  ss compiler warn
5030: 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d  ings and to.** m
5040: 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20  ake it clear to 
5050: 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68  human readers wh
5060: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
5070: 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62  rameter is delib
5080: 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74  erately .** left
5090: 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74   unused within t
50a0: 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e  he body of a fun
50b0: 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61  ction. This usua
50c0: 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e  lly happens when
50d0: 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69  .** a function i
50e0: 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66  s called via a f
50f0: 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e  unction pointer.
5100: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65   For example the
5110: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
5120: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
5130: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
5140: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
5150: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
5160: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
5170: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
5180: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
5190: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
51a0: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
51b0: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
51c0: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
51d0: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
51e0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
51f0: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
5200: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
5210: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
5220: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
5230: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
5240: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
5250: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
5260: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
5270: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
5280: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
5290: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
52a0: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
52b0: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
52c0: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
52d0: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
52e0: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
52f0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
5300: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
5310: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
5320: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
5330: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
5340: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
5350: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
5360: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
5370: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
5380: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
5390: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
53a0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
53b0: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
53c0: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
53d0: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
53e0: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
53f0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
5400: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
5410: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
5420: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
5430: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
5440: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
5450: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
5460: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
5470: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
5480: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
5490: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
54a0: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
54b0: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
54c0: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
54d0: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
54e0: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
54f0: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
5500: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
5510: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
5520: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
5530: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
5540: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
5550: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
5560: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
5570: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
5580: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
5590: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
55a0: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
55b0: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
55c0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
55d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
55e0: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
55f0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5600: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
5610: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
5620: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
5630: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
5640: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
5650: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
5660: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
5670: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
5680: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
5690: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
56a0: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
56b0: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
56c0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
56d0: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
56e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
56f0: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
5700: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
5710: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
5720: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
5730: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
5740: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
5750: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
5760: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
5770: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
5780: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
5790: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
57a0: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
57b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
57c0: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
57d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
57e0: 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44  lectDest SelectD
57f0: 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  est;.typedef str
5800: 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c  uct SrcList SrcL
5810: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5820: 75 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72  uct StrAccum Str
5830: 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73  Accum;.typedef s
5840: 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c  truct Table Tabl
5850: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
5860: 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c  t TableLock Tabl
5870: 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73  eLock;.typedef s
5880: 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65  truct Token Toke
5890: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
58a0: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
58b0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
58c0: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
58d0: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
58e0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
58f0: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
5900: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5910: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
5920: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
5930: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
5940: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
5950: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
5960: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
5970: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
5980: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
5990: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 50  ef struct WhereP
59a0: 6c 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a 74  lan WherePlan;.t
59b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
59c0: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
59d0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
59e0: 74 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65  t WhereLevel Whe
59f0: 72 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20  reLevel;../*.** 
5a00: 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76  Defer sourcing v
5a10: 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e  dbe.h and btree.
5a20: 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68  h until after th
5a30: 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22  e "u8" and .** "
5a40: 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70  BusyHandler" typ
5a50: 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c  edefs. vdbe.h al
5a60: 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65  so requires a fe
5a70: 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a  w of the opaque.
5a80: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73  ** pointer types
5a90: 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20   (i.e. FuncDef) 
5aa0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a  defined above..*
5ab0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65  /.#include "btre
5ac0: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76  e.h".#include "v
5ad0: 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  dbe.h".#include 
5ae0: 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75  "pager.h".#inclu
5af0: 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23  de "pcache.h"..#
5b00: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
5b10: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
5b20: 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  ".../*.** Each d
5b30: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
5b40: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
5b50: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
5b60: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
5b70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
5b80: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
5b90: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
5ba0: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
5bb0: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
5bc0: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
5bd0: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
5be0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
5bf0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
5c00: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
5c10: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
5c20: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
5c30: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
5c40: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
5c50: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
5c60: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
5c70: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
5c80: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
5c90: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
5ca0: 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
5cb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
5cc0: 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B*Tree structure
5cd0: 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61   for this databa
5ce0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
5cf0: 69 6e 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  inTrans;        
5d00: 20 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72 69 74    /* 0: not writ
5d10: 61 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e 73 61  able.  1: Transa
5d20: 63 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65 63 6b  ction.  2: Check
5d30: 70 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20 73 61  point */.  u8 sa
5d40: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
5d50: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
5d60: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
5d70: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
5d80: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
5d90: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
5da0: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
5db0: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
5dc0: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
5dd0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
5de0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5df0: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
5e00: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
5e10: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
5e20: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
5e30: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
5e40: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
5e50: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
5e60: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
5e70: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
5e80: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
5e90: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
5ea0: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
5eb0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
5ec0: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
5ed0: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
5ee0: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
5ef0: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
5f00: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
5f10: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
5f20: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
5f30: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
5f40: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
5f50: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
5f60: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
5f70: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
5f80: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
5f90: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
5fa0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
5fb0: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
5fc0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
5fd0: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
5fe0: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
5ff0: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
6000: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
6010: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
6020: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
6030: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
6040: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
6050: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
6060: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
6070: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
6080: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
6090: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
60a0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
60b0: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
60c0: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
60d0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
60e0: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
60f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
6100: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
6110: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
6120: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
6130: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
6140: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
6150: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
6160: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
6170: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
6180: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
6190: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
61a0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
61b0: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
61c0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
61d0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
61e0: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
61f0: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
6200: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
6210: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
6220: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
6230: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
6240: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
6250: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
6260: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
6270: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
6280: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
6290: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
62a0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
62b0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
62c0: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
62d0: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
62e0: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
62f0: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
6300: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
6310: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
6320: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
6330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
6340: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
6350: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
6360: 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  se */.  u16 flag
6370: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
6380: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
6390: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
63a0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
63b0: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
63c0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
63d0: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
63e0: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
63f0: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
6400: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
6410: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
6420: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
6430: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
6440: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
6450: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
6460: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
6470: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6480: 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  ma->flags&(P))==
6490: 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48  (P)).#define DbH
64a0: 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c  asAnyProperty(D,
64b0: 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62  I,P)  (((D)->aDb
64c0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61  [I].pSchema->fla
64d0: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
64e0: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
64f0: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
6500: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
6510: 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
6520: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
6530: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
6540: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6550: 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  a->flags&=~(P)..
6560: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
6570: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
6580: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
6590: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
65a0: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
65b0: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
65c0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
65d0: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
65e0: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
65f0: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
6600: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
6610: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
6620: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
6630: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
6640: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
6650: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
6660: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
6670: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
6680: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
6690: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
66a0: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
66b0: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
66c0: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
66d0: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
66e0: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
66f0: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
6700: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
6710: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
6720: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
6730: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
6740: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
6750: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
6760: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
6770: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
6780: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
6790: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
67a0: 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ytes) */../*.** 
67b0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  The number of di
67c0: 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66  fferent kinds of
67d0: 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e   things that can
67e0: 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75   be limited.** u
67f0: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
6800: 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61  _limit() interfa
6810: 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ce..*/.#define S
6820: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53  QLITE_N_LIMIT (S
6830: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
6840: 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a  GER_DEPTH+1)../*
6850: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
6860: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
6870: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
6880: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
6890: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
68a0: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
68b0: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
68c0: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
68d0: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
68e0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
68f0: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
6900: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
6910: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
6920: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
6930: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
6940: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
6950: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
6960: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
6970: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
6980: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
6990: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
69a0: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
69b0: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
69c0: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
69d0: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
69e0: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
69f0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
6a00: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
6a10: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
6a20: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
6a30: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
6a40: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
6a50: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
6a60: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
6a70: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
6a80: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
6a90: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
6aa0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
6ab0: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
6ac0: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
6ad0: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
6ae0: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
6af0: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
6b00: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
6b10: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
6b20: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
6b30: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
6b40: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
6b50: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
6b60: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
6b70: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
6b80: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
6b90: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
6ba0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
6bb0: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
6bc0: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
6bd0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
6be0: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
6bf0: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
6c00: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
6c10: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
6c20: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
6c30: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
6c40: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
6c50: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
6c60: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36  ookaside {.  u16
6c70: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
6c80: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
6c90: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
6ca0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e  ytes */.  u8 bEn
6cb0: 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
6cc0: 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69    /* False to di
6cd0: 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73  sable new lookas
6ce0: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
6cf0: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
6d00: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
6d10: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
6d20: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
6d30: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
6d40: 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20  .  int nOut;    
6d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
6d60: 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20  mber of buffers 
6d70: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
6d80: 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d  d out */.  int m
6d90: 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  xOut;           
6da0: 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20     /* Highwater 
6db0: 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f  mark for nOut */
6dc0: 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d  .  int anStat[3]
6dd0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
6de0: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
6df0: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
6e00: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
6e10: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
6e20: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
6e30: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
6e40: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
6e50: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
6e60: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
6e70: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
6e80: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
6e90: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
6ea0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
6eb0: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
6ec0: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
6ed0: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
6ee0: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
6ef0: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
6f00: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
6f10: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
6f20: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
6f30: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
6f40: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  hash table for f
6f50: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
6f60: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  ons..**.** Hash 
6f70: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
6f80: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
6f90: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
6fa0: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
6fb0: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
6fc0: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70  on the FuncDef.p
6fd0: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73  Hash chain..*/.s
6fe0: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
6ff0: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
7000: 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  [23];       /* H
7010: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
7020: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  nctions */.};../
7030: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
7040: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
7050: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
7060: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
7070: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
7080: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
7090: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
70a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
70b0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
70c0: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
70d0: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
70e0: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
70f0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
7100: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
7110: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
7120: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
7130: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
7140: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
7150: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
7160: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
7170: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
7180: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
7190: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
71a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
71b0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
71c0: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
71e0: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
71f0: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
7200: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
7210: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
7220: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
7230: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
7240: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
7250: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
7260: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7270: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
7280: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
7290: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 75 6e 73   above) */.  uns
72a0: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
72b0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
72c0: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
72d0: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
72e0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
72f0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
7300: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
7310: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
7320: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
7330: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7350: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
7360: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
7370: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
7380: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
73a0: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
73b0: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
73c0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75  tions */.  u8 au
73d0: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
73e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
73f0: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
7400: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
7410: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
7420: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
7430: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
7440: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
7450: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
7460: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
7470: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
7480: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
7490: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
74a0: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
74b0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
74c0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
74d0: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
74e0: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
74f0: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
7500: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
7510: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
7520: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
7530: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
7540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
7550: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
7560: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
7570: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
7580: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
7590: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
75a0: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
75b0: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
75c0: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
75d0: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
75e0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
75f0: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
7600: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
7610: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
7620: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
7630: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
7640: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
7650: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
7660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7670: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
7680: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
7690: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
76a0: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76c0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
76d0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
76e0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
76f0: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
7700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
7710: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
7720: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
7730: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
7740: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
7750: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
7760: 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  mits */.  struct
7770: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
7780: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
7790: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
77a0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
77b0: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
77c0: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
77d0: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
77e0: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
77f0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
7800: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7820: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
7830: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
7840: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
7850: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7860: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
7870: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
7880: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
7890: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
78a0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
78b0: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
78c0: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
78d0: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69  trigger */.  } i
78e0: 6e 69 74 3b 0a 20 20 69 6e 74 20 61 63 74 69 76  nit;.  int activ
78f0: 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20  eVdbeCnt;       
7900: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7910: 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c  f VDBEs currentl
7920: 79 20 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20  y executing */. 
7930: 20 69 6e 74 20 77 72 69 74 65 56 64 62 65 43 6e   int writeVdbeCn
7940: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
7950: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
7960: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 61 72  ve VDBEs that ar
7970: 65 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69  e writing */.  i
7980: 6e 74 20 76 64 62 65 45 78 65 63 43 6e 74 3b 20  nt vdbeExecCnt; 
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
79a0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
79b0: 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78   calls to VdbeEx
79c0: 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ec() */.  int nE
79d0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
79e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
79f0: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
7a00: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
7a10: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
7a20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
7a30: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
7a40: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
7a50: 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29    void (*xTrace)
7a60: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
7a70: 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  r*);        /* T
7a80: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
7a90: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
7aa0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7ac0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
7ad0: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
7ae0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
7af0: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
7b00: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
7b10: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
7b20: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
7b30: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
7b60: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
7b70: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
7b80: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
7b90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7ba0: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
7bb0: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7bc0: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74  .  int (*xCommit
7bd0: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
7be0: 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  ;    /* Invoked 
7bf0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7c00: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c   */.  void *pRol
7c10: 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20  lbackArg;       
7c20: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
7c30: 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  ent to xRollback
7c40: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20  Callback() */   
7c50: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
7c60: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
7c70: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
7c80: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
7c90: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
7ca0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
7cb0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
7cc0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
7cd0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
7ce0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
7cf0: 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  4);.#ifndef SQLI
7d00: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
7d10: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
7d20: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
7d30: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
7d40: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
7d50: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
7d60: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
7d70: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
7d80: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
7d90: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
7da0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
7db0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
7dc0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
7dd0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
7de0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
7df0: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
7e00: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
7e10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
7e20: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
7e30: 73 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20  ssage */.  char 
7e40: 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
7e50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
7e60: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
7e70: 73 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63  ssage (UTF-8 enc
7e80: 6f 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20  oded) */.  char 
7e90: 2a 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20  *zErrMsg16;     
7ea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
7eb0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
7ec0: 73 73 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e  ssage (UTF-16 en
7ed0: 63 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f  coded) */.  unio
7ee0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
7ef0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
7f00: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
7f10: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
7f20: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
7f30: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
7f40: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
7f50: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
7f60: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
7f70: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
7f80: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
7f90: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
7fa0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
7fb0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7fc0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
7fd0: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
7fe0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
7ff0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
8000: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
8010: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
8040: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
8050: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
8060: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
8070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8080: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
8090: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
80a0: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
80b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
80c0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
80d0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
80e0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
80f0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
8100: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
8110: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
8120: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
8130: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
8140: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
8150: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
8160: 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70   int nProgressOp
8170: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
8180: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
8190: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
81a0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
81b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
81c0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
81d0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
81e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
81f0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
8200: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
8210: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
8220: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
8230: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
8240: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
8250: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
8260: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
8270: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
8280: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
8290: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
82a0: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
82b0: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
82d0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
82e0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
82f0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
8300: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
8310: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
8320: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
8330: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
8340: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
8350: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
8360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
8370: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
8380: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
8390: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
83a0: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
83b0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
83c0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
83d0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
83e0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
83f0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
8400: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
8410: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
8420: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
8430: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
8440: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
8450: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
8460: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
8470: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
8480: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
8490: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
84a0: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
84b0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
84c0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
84d0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
84e0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
84f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8500: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
8510: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
8520: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
8530: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
8540: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8550: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
8560: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
8570: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
8580: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
8590: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
85a0: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
85b0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
85c0: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
85d0: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
85e0: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
85f0: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
8600: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
8610: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
8620: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
8630: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
8640: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
8650: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
8660: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
8670: 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d  C_MASTER .  ** m
8680: 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c  utex, not by sql
8690: 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79  ite3.mutex. They
86a0: 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64   are used by cod
86b0: 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a  e in notify.c. .
86c0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
86d0: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
86e0: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
86f0: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
8700: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
8710: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
8720: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
8730: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
8740: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
8750: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
8760: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
8770: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
8780: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
8790: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
87a0: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
87b0: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
87c0: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
87d0: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
87e0: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
87f0: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
8800: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
8810: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
8820: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
8830: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
8840: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
8850: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
8860: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
8870: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
8880: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88a0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
88b0: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
88c0: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
88d0: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
88e0: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
88f0: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
8900: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
8910: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
8920: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
8930: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
8940: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
8950: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
8960: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
8970: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
8980: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
8990: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  se..*/.#define E
89a0: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
89b0: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
89c0: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
89d0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
89e0: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
89f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
8a00: 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20  TE_VdbeTrace    
8a10: 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a    0x00000001  /*
8a20: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
8a30: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
8a40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8a50: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30  InternChanges  0
8a60: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e  x00000002  /* Un
8a70: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
8a80: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
8a90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
8aa0: 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78  ullColNames   0x
8ab0: 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f  00000004  /* Sho
8ac0: 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61  w full column na
8ad0: 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f  mes on SELECT */
8ae0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8af0: 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30  ShortColNames  0
8b00: 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 53 68  x00000008  /* Sh
8b10: 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73  ow short columns
8b20: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
8b30: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
8b40: 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ws      0x000000
8b50: 31 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77  10  /* Count row
8b60: 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53  s changed by INS
8b70: 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20  ERT, */.        
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ba0: 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f    /*   DELETE, o
8bb0: 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74  r UPDATE and ret
8bc0: 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  urn */.         
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bf0: 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20   /*   the count 
8c00: 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  using a callback
8c10: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
8c20: 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b  ITE_NullCallback
8c30: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
8c40: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  * Invoke the cal
8c50: 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68  lback once if th
8c60: 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8c90: 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69  *   result set i
8ca0: 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  s empty */.#defi
8cb0: 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61  ne SQLITE_SqlTra
8cc0: 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30  ce       0x00000
8cd0: 30 34 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72  040  /* Debug pr
8ce0: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
8cf0: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
8d00: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
8d10: 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 30  ting    0x000000
8d20: 38 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  80  /* Debug lis
8d30: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
8d40: 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e  ograms */.#defin
8d50: 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  e SQLITE_WriteSc
8d60: 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 31  hema    0x000001
8d70: 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64  00  /* OK to upd
8d80: 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  ate SQLITE_MASTE
8d90: 52 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  R */.           
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8db0: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 55     0x00000200  U
8dc0: 6e 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  nused */.#define
8dd0: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
8de0: 65 63 6b 73 20 20 20 30 78 30 30 30 30 30 34 30  ecks   0x0000040
8df0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
8e00: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
8e10: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
8e20: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
8e30: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 30 38  ommitted 0x00008
8e40: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
8e50: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
8e60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
8e70: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
8e80: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 43 72 65  00001000  /* Cre
8e90: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
8ea0: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
8eb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8ec0: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
8ed0: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 55 73  x00002000  /* Us
8ee0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
8ef0: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
8f00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
8f10: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
8f20: 30 30 30 34 30 30 30 20 20 2f 2a 20 55 73 65 20  0004000  /* Use 
8f30: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
8f40: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
8f50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f  fine SQLITE_Reco
8f60: 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30  veryMode   0x000
8f70: 30 38 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65  08000  /* Ignore
8f80: 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a   schema errors *
8f90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8fa0: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
8fb0: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 52  0x00010000  /* R
8fc0: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
8fd0: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
8fe0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
8ff0: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 32  iggers    0x0002
9000: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
9010: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
9020: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
9030: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
9040: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
9050: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
9060: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
9070: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
9080: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
9090: 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20       0x00080000 
90a0: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
90b0: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
90c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
90d0: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
90e0: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 50 72 65  00100000  /* Pre
90f0: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
9100: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
9110: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
9120: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 32  Extension  0x002
9130: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
9140: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
9150: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9160: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
9170: 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20   0x00400000  /* 
9180: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
9190: 72 69 67 67 65 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a  riggers */../*.*
91a0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
91b0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
91c0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
91d0: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
91e0: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
91f0: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
9200: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
9210: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
9220: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
9230: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
9240: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
9250: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
9260: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
9270: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
9280: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
9290: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
92a0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
92b0: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
92c0: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
92d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
92e0: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
92f0: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
9300: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
9310: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9320: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
9330: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
9340: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
9350: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9360: 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20  E_IdxRealAsInt  
9370: 20 30 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f   0x0010   /* Sto
9380: 72 65 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69  re REAL as INT i
9390: 6e 20 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65  n indices */.#de
93a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
93b0: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
93c0: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
93d0: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
93e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
93f0: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
9400: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
9410: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
9420: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9430: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
9440: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
9450: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
9460: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
9470: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
9480: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
9490: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
94a0: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
94b0: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
94c0: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
94d0: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
94e0: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
94f0: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
9500: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
9510: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
9520: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
9530: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
9540: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
9550: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9560: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
9570: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
9580: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
9590: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
95a0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
95b0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
95c0: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
95d0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
95e0: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
95f0: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
9600: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
9610: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
9620: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
9630: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
9640: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
9650: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
9660: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
9670: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
9680: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
9690: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
96a0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
96b0: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
96c0: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
96d0: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
96e0: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
96f0: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
9700: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
9710: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
9720: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
9730: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
9740: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
9750: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
9760: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
9770: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
9780: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
9790: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
97a0: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
97b0: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
97c0: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
97d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
97e0: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
97f0: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
9800: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
9810: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
9820: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9830: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
9840: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
9850: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
9860: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
9870: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9880: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
9890: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
98a0: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
98b0: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
98c0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
98d0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
98e0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
98f0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
9900: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
9910: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
9920: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
9930: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
9940: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
9950: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
9960: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
9970: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
9980: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
9990: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
99a0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
99b0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
99c0: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
99d0: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
99e0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
99f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
9a00: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
9a10: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
9a20: 75 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20  u8 iPrefEnc;    
9a30: 20 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65       /* Preferre
9a40: 64 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  d text encoding 
9a50: 28 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36  (SQLITE_UTF8, 16
9a60: 4c 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75  LE, 16BE) */.  u
9a70: 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  8 flags;        
9a80: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
9a90: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
9aa0: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
9ab0: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
9ac0: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
9ad0: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
9ae0: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
9af0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
9b00: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
9b10: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
9b20: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
9b30: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
9b40: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
9b50: 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f   Regular functio
9b60: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  n */.  void (*xS
9b70: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
9b80: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
9b90: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41  3_value**); /* A
9ba0: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f  ggregate step */
9bb0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
9bc0: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
9bd0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
9be0: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67         /* Aggreg
9bf0: 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  ate finalizer */
9c00: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
9c10: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e          /* SQL n
9c20: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
9c30: 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  ion. */.  FuncDe
9c40: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
9c50: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
9c60: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
9c70: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
9c80: 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  /.  FuncDestruct
9c90: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
9ca0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
9cb0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
9cc0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
9cd0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
9ce0: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
9cf0: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
9d00: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
9d10: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
9d20: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
9d30: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
9d40: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
9d50: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
9d60: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
9d70: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
9d80: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
9d90: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
9da0: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
9db0: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
9dc0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
9dd0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
9de0: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
9df0: 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74   is set to .** t
9e00: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
9e10: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
9e20: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
9e30: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
9e40: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
9e50: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
9e60: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
9e70: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
9e80: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
9e90: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
9ea0: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
9eb0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
9ec0: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
9ed0: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
9ee0: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
9ef0: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
9f00: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
9f10: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
9f20: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
9f30: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
9f40: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
9f50: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
9f60: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
9f70: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
9f80: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
9f90: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
9fa0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
9fb0: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
9fc0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9fd0: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
9fe0: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
9ff0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
a000: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
a010: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
a020: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
a030: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
a040: 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  s.  Note that th
a050: 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54  e _LENGTH and _T
a060: 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20  YPEOF.** values 
a070: 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  must correspond 
a080: 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  to OPFLAG_LENGTH
a090: 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
a0a0: 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65  YPEOFARG.  There
a0b0: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
a0c0: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
a0d0: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
a0e0: 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69  y this..*/.#defi
a0f0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
a100: 49 4b 45 20 20 20 20 20 30 78 30 31 20 2f 2a 20  IKE     0x01 /* 
a110: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
a120: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
a130: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a140: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
a150: 20 20 20 20 30 78 30 32 20 2f 2a 20 43 61 73 65      0x02 /* Case
a160: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
a170: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
a180: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a190: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
a1a0: 30 34 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e  04 /* Ephemeral.
a1b0: 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44    Delete with VD
a1c0: 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BE */.#define SQ
a1d0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
a1e0: 4c 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c 69 74  LL 0x08 /* sqlit
a1f0: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
a200: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
a210: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
a220: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
a230: 20 20 20 30 78 31 30 20 2f 2a 20 42 75 69 6c 74     0x10 /* Built
a240: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
a250: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
a260: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
a270: 41 4c 45 53 43 45 20 30 78 32 30 20 2f 2a 20 42  ALESCE 0x20 /* B
a280: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
a290: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66  () or ifnull() f
a2a0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
a2b0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
a2c0: 45 4e 47 54 48 20 20 20 30 78 34 30 20 2f 2a 20  ENGTH   0x40 /* 
a2d0: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
a2e0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
a2f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
a300: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 38 30 20  C_TYPEOF   0x80 
a310: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
a320: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
a330: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
a340: 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72  owing three macr
a350: 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20  os, FUNCTION(), 
a360: 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41  LIKEFUNC() and A
a370: 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a  GGREGATE() are.*
a380: 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65  * used to create
a390: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
a3a0: 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65  s for the FuncDe
a3b0: 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a  f structures..**
a3c0: 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a  .**   FUNCTION(z
a3d0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
a3e0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
a3f0: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
a400: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
a410: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
a420: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
a430: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70  Name .**     imp
a440: 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75  lemented by C fu
a450: 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61  nction xFunc tha
a460: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
a470: 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a  rguments. The.**
a480: 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65       value passe
a490: 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73  d as iArg is cas
a4a0: 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61  t to a (void*) a
a4b0: 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  nd made availabl
a4c0: 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20  e.**     as the 
a4d0: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
a4e0: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20  e3_user_data()) 
a4f0: 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
a500: 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67  . If .**     arg
a510: 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75  ument bNC is tru
a520: 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49  e, then the SQLI
a530: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
a540: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
a550: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
a560: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
a570: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
a580: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
a590: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
a5a0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
a5b0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
a5c0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
a5d0: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
a5e0: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
a5f0: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
a600: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
a610: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
a620: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
a630: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
a640: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
a650: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
a660: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
a670: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
a680: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
a690: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
a6a0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
a6b0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
a6c0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
a6d0: 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20  on zName .**    
a6e0: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
a6f0: 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
a700: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
a710: 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a  by a call to C .
a720: 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
a730: 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
a740: 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
a750: 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
a760: 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
a770: 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
a780: 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
a790: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
a7a0: 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
a7b0: 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
a7c0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
a7d0: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
a7e0: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
a7f0: 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
a800: 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
a810: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
a820: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
a830: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
a840: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g, SQLITE_UTF8, 
a850: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
a860: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
a870: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
a880: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
a890: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
a8a0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
a8b0: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
a8c0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
a8d0: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
a8e0: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
a8f0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e  SQLITE_UTF8, (bN
a900: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
a910: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
a920: 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
a930: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
a940: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
a950: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
a960: 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
a970: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
a980: 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
a990: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
a9a0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a  QLITE_UTF8, bNC*
a9b0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
a9c0: 43 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c  COLL, \.   pArg,
a9d0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
a9e0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
a9f0: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
aa00: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
aa10: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
aa20: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
aa30: 20 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29   flags, (void *)
aa40: 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
aa50: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
aa60: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  0, 0}.#define AG
aa70: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
aa80: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
aa90: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
aaa0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
aab0: 54 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8, nc*SQLITE_F
aac0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a  UNC_NEEDCOLL, \.
aad0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
aae0: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
aaf0: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
ab00: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
ab10: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
ab20: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
ab30: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
ab40: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
ab50: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
ab60: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
ab70: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
ab80: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
ab90: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
aba0: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
abb0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
abc0: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
abd0: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
abe0: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
abf0: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
ac00: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
ac10: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac30: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
ac40: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
ac50: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
ac60: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
ac70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac80: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
ac90: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
aca0: 69 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ions */.  Savepo
acb0: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
acc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
acd0: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
ace0: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
acf0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
ad00: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
ad10: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
ad20: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
ad30: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
ad40: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
ad50: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
ad60: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
ad70: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
ad80: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
ad90: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
ada0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
adb0: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
adc0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
add0: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
ade0: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
adf0: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
ae00: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
ae10: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
ae20: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
ae30: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
ae40: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
ae50: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
ae60: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
ae70: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
ae80: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
ae90: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
aea0: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
aeb0: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
aec0: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
aed0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
aee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aef0: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
af00: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
af10: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
af20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
af40: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
af50: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
af60: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
af70: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
af80: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
af90: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
afa0: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
afb0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
afc0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
afd0: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
afe0: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
aff0: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
b000: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
b010: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
b020: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
b030: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
b040: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
b050: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
b060: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
b070: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
b080: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
b090: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
b0a0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
b0b0: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
b0c0: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
b0d0: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
b0e0: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
b0f0: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
b100: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
b110: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
b120: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
b130: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
b140: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
b150: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
b160: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
b170: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
b180: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
b190: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
b1a0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
b1b0: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
b1c0: 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20  colFlags;    /* 
b1d0: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
b1e0: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
b1f0: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
b200: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
b210: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
b220: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
b230: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
b240: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
b250: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
b260: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
b270: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
b280: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
b290: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
b2a0: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
b2b0: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
b2c0: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
b2d0: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
b2e0: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
b2f0: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
b300: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
b310: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
b320: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
b330: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
b340: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
b350: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
b360: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
b370: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
b380: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
b390: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
b3a0: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
b3b0: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
b3c0: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
b3d0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b3e0: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
b3f0: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
b400: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
b410: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b420: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
b430: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
b440: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
b450: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
b460: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
b470: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
b480: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
b490: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
b4a0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
b4b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
b4c0: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
b4d0: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
b4e0: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
b4f0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
b500: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
b510: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
b520: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
b530: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
b540: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
b550: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
b560: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
b570: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
b580: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
b590: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
b5a0: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
b5b0: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
b5c0: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
b5d0: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
b5e0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
b5f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b600: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
b610: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
b620: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
b630: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
b640: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
b650: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
b660: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
b670: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
b680: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
b690: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
b6a0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
b6b0: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
b6c0: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
b6d0: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
b6e0: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
b6f0: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
b700: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
b710: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
b720: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
b730: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
b740: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
b750: 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61  n with 'a'.  Tha
b760: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
b770: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
b780: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
b790: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
b7a0: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
b7b0: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
b7c0: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
b7d0: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
b7e0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
b7f0: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
b800: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
b810: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
b820: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
b830: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
b840: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
b850: 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64  omparison..*/.#d
b860: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b870: 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64  _TEXT     'a'.#d
b880: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b890: 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64  _NONE     'b'.#d
b8a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b8b0: 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64  _NUMERIC  'c'.#d
b8c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b8d0: 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64  _INTEGER  'd'.#d
b8e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b8f0: 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23  _REAL     'e'..#
b900: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
b910: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
b920: 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45  X)  ((X)>=SQLITE
b930: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f  _AFF_NUMERIC)../
b940: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
b950: 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20  AFF_MASK values 
b960: 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69  masks off the si
b970: 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f  gnificant bits o
b980: 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79  f an.** affinity
b990: 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66   value. .*/.#def
b9a0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
b9b0: 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a  ASK     0x67../*
b9c0: 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
b9d0: 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
b9e0: 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
b9f0: 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
ba00: 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
ba10: 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f  the affinity..*/
ba20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba30: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30  JUMPIFNULL   0x0
ba40: 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  8  /* jumps if e
ba50: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
ba60: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
ba70: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
ba80: 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74       0x10  /* St
ba90: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
baa0: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
bab0: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
bac0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
bad0: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
bae0: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ULL=NULL */../*.
baf0: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
bb00: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
bb10: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
bb20: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
bb30: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
bb40: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
bb50: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
bb60: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
bb70: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
bb80: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
bb90: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
bba0: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
bbb0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
bbc0: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
bbd0: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
bbe0: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
bbf0: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
bc00: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
bc10: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
bc20: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
bc30: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
bc40: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
bc50: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
bc60: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
bc70: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
bc80: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
bc90: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
bca0: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
bcb0: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
bcc0: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
bcd0: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
bce0: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
bcf0: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
bd00: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
bd10: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
bd20: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
bd30: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
bd40: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
bd50: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
bd60: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
bd70: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
bd80: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
bd90: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
bda0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
bdb0: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
bdc0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
bdd0: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
bde0: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
bdf0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
be00: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
be10: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
be20: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
be30: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
be40: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
be50: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
be60: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
be70: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
be80: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
be90: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
bea0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
beb0: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
bec0: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
bed0: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
bee0: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
bef0: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
bf00: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
bf10: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
bf20: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
bf30: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
bf40: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
bf50: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
bf60: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
bf70: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
bf80: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
bf90: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
bfa0: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
bfb0: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
bfc0: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
bfd0: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
bfe0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
bff0: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
c000: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
c010: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
c020: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
c030: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
c040: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
c050: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
c060: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
c070: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
c080: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
c090: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
c0a0: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
c0b0: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
c0c0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
c0d0: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
c0e0: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
c0f0: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
c100: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
c110: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
c120: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
c130: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
c140: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
c150: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
c160: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
c170: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
c180: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
c190: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
c1a0: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
c1b0: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
c1c0: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
c1d0: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
c1e0: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
c1f0: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
c200: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
c210: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
c220: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
c230: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
c240: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
c250: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
c260: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
c270: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
c280: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
c290: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
c2a0: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
c2b0: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
c2c0: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
c2d0: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
c2e0: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
c2f0: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
c300: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
c310: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
c320: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
c330: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
c340: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
c350: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
c360: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
c370: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
c380: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
c390: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
c3a0: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
c3b0: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
c3c0: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
c3d0: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
c3e0: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
c3f0: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
c400: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
c410: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
c420: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
c430: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
c440: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
c450: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
c460: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
c470: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
c480: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
c490: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4b0: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
c4c0: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
c4d0: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
c4e0: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
c4f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c500: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
c510: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
c520: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
c530: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
c540: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
c550: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
c560: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
c570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c580: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
c590: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
c5a0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
c5b0: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
c5c0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
c5d0: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
c5e0: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
c5f0: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
c600: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
c610: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
c620: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
c630: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
c640: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
c650: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
c660: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
c670: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74  /*.** Each SQL t
c680: 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
c690: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
c6a0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
c6b0: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
c6c0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
c6d0: 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73  * Table.zName is
c6e0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
c6f0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73   table.  The cas
c700: 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
c710: 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c  l.** CREATE TABL
c720: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
c730: 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20  tored, but case 
c740: 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61  is not significa
c750: 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72  nt for.** compar
c760: 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  isons..**.** Tab
c770: 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e  le.nCol is the n
c780: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
c790: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   in this table. 
c7a0: 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61   Table.aCol is a
c7b0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  .** pointer to a
c7c0: 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d  n array of Colum
c7d0: 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e  n structures, on
c7e0: 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
c7f0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
c800: 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54  table has an INT
c810: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
c820: 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b  , then Table.iPK
c830: 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ey is the index 
c840: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e  of.** the column
c850: 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65   that is that ke
c860: 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54  y.   Otherwise T
c870: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65  able.iPKey is ne
c880: 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a  gative.  Note.**
c890: 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79   that the dataty
c8a0: 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  pe of the PRIMAR
c8b0: 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e  Y KEY must be IN
c8c0: 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66  TEGER for this f
c8d0: 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65  ield to.** be se
c8e0: 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50  t.  An INTEGER P
c8f0: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73  RIMARY KEY is us
c900: 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  ed as the rowid 
c910: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
c920: 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  ** the table.  I
c930: 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f  f a table has no
c940: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
c950: 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e   KEY, then a ran
c960: 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20  dom rowid.** is 
c970: 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61  generated for ea
c980: 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61  ch row of the ta
c990: 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d  ble.  TF_HasPrim
c9a0: 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66  aryKey is set if
c9b0: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61  .** the table ha
c9c0: 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45  s any PRIMARY KE
c9d0: 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74  Y, INTEGER or ot
c9e0: 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  herwise..**.** T
c9f0: 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65  able.tnum is the
ca00: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
ca10: 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20   the root BTree 
ca20: 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
ca30: 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61  e in the.** data
ca40: 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54  base file.  If T
ca50: 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20  able.iDb is the 
ca60: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
ca70: 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b  abase table back
ca80: 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65  end.** in sqlite
ca90: 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f  .aDb[].  0 is fo
caa0: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
cab0: 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72  ase and 1 is for
cac0: 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a   the file that.*
cad0: 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72  * holds temporar
cae0: 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  y tables and ind
caf0: 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68  ices.  If TF_Eph
cb00: 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a  emeral is set.**
cb10: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
cb20: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66  is stored in a f
cb30: 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f  ile that is auto
cb40: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
cb50: 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44  d.** when the VD
cb60: 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  BE cursor to the
cb70: 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
cb80: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  .  In this case 
cb90: 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72  Table.tnum .** r
cba0: 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f  efers VDBE curso
cbb0: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f  r number that ho
cbc0: 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70  lds the table op
cbd0: 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72  en, not to the r
cbe0: 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62  oot.** page numb
cbf0: 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74  er.  Transient t
cc00: 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74  ables are used t
cc10: 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c  o hold the resul
cc20: 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71  ts of a.** sub-q
cc30: 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72  uery that appear
cc40: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72  s instead of a r
cc50: 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  eal table name i
cc60: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
cc70: 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43  e .** of a SELEC
cc80: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
cc90: 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
cca0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
ccb0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
ccc0: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
ccd0: 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
cce0: 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
ccf0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
cd00: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
cd10: 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
cd20: 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
cd30: 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
cd40: 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
cd50: 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
cd60: 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
cd70: 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
cd80: 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
cd90: 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
cda0: 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
cdb0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
cdc0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
cdd0: 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
cde0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
cdf0: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
ce00: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
ce10: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
ce20: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
ce30: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
ce40: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
ce50: 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
ce60: 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
ce70: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
ce80: 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e  .#endif.  tRowcn
ce90: 74 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f  t nRowEst;     /
cea0: 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
ceb0: 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
cec0: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
ced0: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ble */.  int tnu
cee0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
cef0: 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65   Root BTree node
cf00: 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
cf10: 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29  (see note above)
cf20: 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
cf30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
cf40: 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
cf50: 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
cf60: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
cf70: 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  y */.  i16 nCol;
cf80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
cf90: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
cfa0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
cfb0: 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20  /.  u16 nRef;   
cfc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
cfd0: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
cfe0: 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
cff0: 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
d000: 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
d010: 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
d020: 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
d030: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
d040: 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
d050: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
d060: 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
d070: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d080: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
d090: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
d0a0: 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
d0b0: 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
d0c0: 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
d0d0: 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
d0e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
d0f0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
d100: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
d110: 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
d120: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
d130: 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
d140: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
d150: 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65  oduleArg;  /* Te
d160: 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65  xt of all module
d170: 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f   args. [0] is mo
d180: 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56  dule name */.  V
d190: 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
d1a0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
d1b0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
d1c0: 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
d1d0: 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
d1e0: 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
d1f0: 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
d200: 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
d210: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
d220: 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
d230: 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
d240: 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
d250: 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
d260: 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
d270: 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
d280: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
d290: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
d2a0: 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e  r Tabe.tabFlags.
d2b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
d2c0: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
d2d0: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
d2e0: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
d2f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
d300: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
d310: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
d320: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
d330: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
d340: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
d350: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
d360: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
d370: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
d380: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
d390: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
d3a0: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
d3b0: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
d3c0: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
d3d0: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
d3e0: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
d3f0: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a  l table */.../*.
d400: 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
d410: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
d420: 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
d430: 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
d440: 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
d450: 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
d460: 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
d470: 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
d480: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
d490: 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
d4a0: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
d4b0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d4c0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d4d0: 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
d4e0: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
d4f0: 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
d500: 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
d510: 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
d520: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
d530: 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
d540: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
d550: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  =0).#else.#  def
d560: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
d570: 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
d580: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
d590: 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (X) 0.#endif../*
d5a0: 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
d5b0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
d5c0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
d5d0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
d5e0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
d5f0: 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
d600: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
d610: 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
d620: 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
d630: 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
d640: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
d650: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
d660: 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
d670: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
d680: 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
d690: 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
d6a0: 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
d6b0: 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
d6c0: 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
d6d0: 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
d6e0: 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
d6f0: 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
d700: 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
d710: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
d720: 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
d730: 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
d740: 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
d750: 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
d760: 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
d770: 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
d780: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
d790: 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
d7a0: 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
d7b0: 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
d7c0: 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
d7d0: 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
d7e0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
d7f0: 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
d800: 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
d810: 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
d820: 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
d830: 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
d840: 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
d850: 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
d860: 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
d870: 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
d880: 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
d890: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65  d..*/.struct FKe
d8a0: 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72  y {.  Table *pFr
d8b0: 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  om;     /* Table
d8c0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
d8d0: 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
d8e0: 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a  e (aka: Child) *
d8f0: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46  /.  FKey *pNextF
d900: 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f  rom;  /* Next fo
d910: 72 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46 72  reign key in pFr
d920: 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  om */.  char *zT
d930: 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  o;        /* Nam
d940: 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20  e of table that 
d950: 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74  the key points t
d960: 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20  o (aka: Parent) 
d970: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
d980: 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 66  To;    /* Next f
d990: 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61  oreign key on ta
d9a0: 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f  ble named zTo */
d9b0: 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
d9c0: 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
d9d0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20   foreign key on 
d9e0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20  table named zTo 
d9f0: 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
da00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
da10: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
da20: 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
da30: 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
da40: 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
da50: 72 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65  rred;    /* True
da60: 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
da70: 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
da80: 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
da90: 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
daa0: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  2];          /* 
dab0: 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e  ON DELETE and ON
dac0: 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c   UPDATE actions,
dad0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f   respectively */
dae0: 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72  .  Trigger *apTr
daf0: 69 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72  igger[2];  /* Tr
db00: 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
db10: 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
db20: 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
db30: 20 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f   {  /* Mapping o
db40: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
db50: 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
db60: 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
db70: 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f  iFrom;         /
db80: 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
db90: 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
dba0: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
dbb0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
dbc0: 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20  column in zTo.  
dbd0: 49 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59  If 0 use PRIMARY
dbe0: 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
dbf0: 5b 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [1];        /* O
dc00: 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
dc10: 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
dc20: 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   s */.};../*.** 
dc30: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
dc40: 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
dc50: 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
dc60: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
dc70: 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
dc80: 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
dc90: 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
dca0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
dcb0: 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
dcc0: 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
dcd0: 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
dce0: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
dcf0: 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
dd00: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
dd10: 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
dd20: 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
dd30: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
dd40: 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
dd50: 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
dd60: 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
dd70: 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
dd80: 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
dd90: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
dda0: 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
ddb0: 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
ddc0: 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
ddd0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
dde0: 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
ddf0: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
de00: 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
de10: 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
de20: 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
de30: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
de40: 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
de50: 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
de60: 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
de70: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
de80: 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
de90: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
dea0: 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
deb0: 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
dec0: 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
ded0: 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
dee0: 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
def0: 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
df00: 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
df10: 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
df20: 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
df30: 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
df40: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
df50: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
df60: 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
df70: 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
df80: 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
df90: 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
dfa0: 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
dfb0: 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
dfc0: 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
dfd0: 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
dfe0: 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
dff0: 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
e000: 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
e010: 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
e020: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
e030: 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
e040: 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
e050: 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
e060: 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
e070: 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
e080: 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
e090: 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
e0a0: 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
e0b0: 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
e0c0: 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
e0d0: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
e0e0: 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
e0f0: 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
e100: 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
e110: 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
e120: 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
e130: 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20  key..** .** The 
e140: 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
e150: 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
e160: 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
e170: 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
e180: 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
e190: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
e1a0: 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
e1b0: 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
e1c0: 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
e1d0: 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
e1e0: 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
e1f0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
e200: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
e210: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
e220: 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
e230: 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
e240: 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
e250: 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
e260: 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
e270: 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
e280: 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
e290: 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
e2a0: 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
e2b0: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
e2c0: 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
e2d0: 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
e2e0: 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
e2f0: 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
e300: 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
e310: 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
e320: 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
e330: 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
e340: 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
e350: 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  TE */..#define O
e360: 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f  E_Restrict 6   /
e370: 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
e380: 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
e390: 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
e3a0: 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
e3b0: 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a  _SetNull  7   /*
e3c0: 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
e3d0: 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
e3e0: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
e3f0: 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a  _SetDflt  8   /*
e400: 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
e410: 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
e420: 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
e430: 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
e440: 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20   9   /* Cascade 
e450: 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  the changes */..
e460: 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
e470: 6c 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77 68  lt  99  /* Do wh
e480: 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
e490: 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
e4a0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
e4b0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e4c0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
e4d0: 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
e4e0: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
e4f0: 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
e500: 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
e510: 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
e520: 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72  l the .** compar
e530: 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
e540: 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73  index keys..*/.s
e550: 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
e560: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
e570: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
e580: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e590: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
e5a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
e5b0: 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65  t encoding - one
e5c0: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55   of the SQLITE_U
e5d0: 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  TF* values */.  
e5e0: 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
e5f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
e600: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
e610: 6c 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  l[] */.  u8 *aSo
e620: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
e630: 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
e640: 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79  ach column.  May
e650: 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f   be NULL */.  Co
e660: 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
e670: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
e680: 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
e690: 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
e6a0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
e6b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e6c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
e6d0: 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
e6e0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a  mation about a.*
e6f0: 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72  * single index r
e700: 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
e710: 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73  lready been pars
e720: 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
e730: 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73  vidual.** values
e740: 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
e750: 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
e760: 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
e770: 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
e780: 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
e790: 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
e7a0: 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
e7b0: 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
e7c0: 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
e7d0: 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
e7e0: 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
e7f0: 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
e800: 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
e810: 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
e820: 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
e830: 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
e840: 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
e850: 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
e860: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
e870: 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  is structure hol
e880: 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  ds a record that
e890: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
e8a0: 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a  n disassembled.*
e8b0: 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74  * into its const
e8c0: 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a  ituent fields..*
e8d0: 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
e8e0: 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
e8f0: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
e900: 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
e910: 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
e920: 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36  rmation */.  u16
e930: 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
e940: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
e950: 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
e960: 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20   */.  u8 flags; 
e970: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f            /* Boo
e980: 6c 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20  lean settings.  
e990: 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c  UNPACKED_... bel
e9a0: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69  ow */.  i64 rowi
e9b0: 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55  d;          /* U
e9c0: 73 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f  sed by UNPACKED_
e9d0: 50 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f  PREFIX_SEARCH */
e9e0: 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
e9f0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
ea00: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
ea10: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20  lowed values of 
ea20: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66  UnpackedRecord.f
ea30: 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
ea40: 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
ea50: 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
ea60: 4d 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e  Make this key an
ea70: 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20   epsilon larger 
ea80: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43  */.#define UNPAC
ea90: 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
eaa0: 20 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72 65    0x02  /* A pre
eab0: 66 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e  fix match is con
eac0: 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64  sidered OK */.#d
ead0: 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50  efine UNPACKED_P
eae0: 52 45 46 49 58 5f 53 45 41 52 43 48 20 30 78 30  REFIX_SEARCH 0x0
eaf0: 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e  4  /* Ignore fin
eb00: 61 6c 20 28 72 6f 77 69 64 29 20 66 69 65 6c 64  al (rowid) field
eb10: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
eb20: 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
eb30: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
eb40: 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
eb50: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
eb60: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
eb70: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
eb80: 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
eb90: 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
eba0: 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
ebb0: 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
ebc0: 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
ebd0: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
ebe0: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
ebf0: 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
ec00: 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
ec10: 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
ec20: 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
ec30: 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
ec40: 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
ec50: 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
ec60: 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
ec70: 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
ec80: 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
ec90: 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
eca0: 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
ecb0: 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
ecc0: 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
ecd0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
ece0: 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
ecf0: 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
ed00: 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
ed10: 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
ed20: 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
ed30: 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
ed40: 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
ed50: 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
ed60: 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
ed70: 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
ed80: 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73  use the .** firs
ed90: 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
eda0: 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
edb0: 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
edc0: 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
edd0: 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
ede0: 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
edf0: 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
ee00: 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
ee10: 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
ee20: 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
ee30: 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
ee40: 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
ee50: 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
ee60: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
ee70: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
ee80: 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
ee90: 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
eea0: 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
eeb0: 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
eec0: 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
eed0: 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
eee0: 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
eef0: 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
ef00: 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
ef10: 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
ef20: 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
ef30: 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
ef40: 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
ef50: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a  ict resolution .
ef60: 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
ef70: 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
ef80: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
ef90: 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
efa0: 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
efb0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
efc0: 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
efd0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
efe0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
eff0: 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  is index */.  in
f000: 74 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  t *aiColumn;    
f010: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
f020: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
f030: 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
f040: 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 74   1st is 0 */.  t
f050: 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
f060: 3b 20 20 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  ;       /* From 
f070: 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
f080: 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
f090: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
f0a0: 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
f0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
f0c0: 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
f0d0: 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
f0e0: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
f0f0: 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
f100: 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
f110: 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
f120: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
f130: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
f140: 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
f150: 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
f160: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
f170: 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
f180: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
f190: 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
f1a0: 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
f1b0: 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
f1c0: 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
f1d0: 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
f1e0: 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
f1f0: 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
f200: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20  char **azColl;  
f210: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
f220: 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
f230: 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
f240: 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  r index */.  int
f250: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
f260: 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
f270: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
f280: 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
f290: 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
f2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f2b0: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
f2c0: 73 20 69 6e 20 74 61 62 6c 65 20 75 73 65 64 20  s in table used 
f2d0: 62 79 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  by this index */
f2e0: 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
f300: 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
f310: 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
f320: 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
f330: 75 6e 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64  unsigned autoInd
f340: 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55  ex:2;    /* 1==U
f350: 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
f360: 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
f370: 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
f380: 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
f390: 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
f3a0: 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
f3b0: 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
f3c0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
f3d0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 20  E_ENABLE_STAT3. 
f3e0: 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
f3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f400: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
f410: 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
f420: 20 20 74 52 6f 77 63 6e 74 20 61 76 67 45 71 3b    tRowcnt avgEq;
f430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76             /* Av
f440: 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 20  erage nEq value 
f450: 66 6f 72 20 6b 65 79 20 76 61 6c 75 65 73 20 6e  for key values n
f460: 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
f470: 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
f480: 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
f490: 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
f4a0: 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23  ft-most key */.#
f4b0: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
f4c0: 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
f4d0: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
f4e0: 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
f4f0: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
f500: 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20  emory .** using 
f510: 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
f520: 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
f530: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
f540: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
f550: 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
f560: 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
f570: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
f580: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
f590: 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e  dexSample {.  un
f5a0: 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
f5b0: 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  z;        /* Val
f5c0: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
f5d0: 51 4c 49 54 45 5f 54 45 58 54 20 6f 72 20 53 51  QLITE_TEXT or SQ
f5e0: 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20  LITE_BLOB */.   
f5f0: 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20 20 20   double r;      
f600: 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79   /* Value if eTy
f610: 70 65 20 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f  pe is SQLITE_FLO
f620: 41 54 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 3b  AT */.    i64 i;
f630: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
f640: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
f650: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2a 2f  QLITE_INTEGER */
f660: 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20 65 54 79  .  } u;.  u8 eTy
f670: 70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  pe;         /* S
f680: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49  QLITE_NULL, SQLI
f690: 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e 20 65  TE_INTEGER ... e
f6a0: 74 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  tc. */.  int nBy
f6b0: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 69  te;        /* Si
f6c0: 7a 65 20 69 6e 20 62 79 74 65 20 6f 66 20 74 65  ze in byte of te
f6d0: 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a 20  xt or blob. */. 
f6e0: 20 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20 20 20   tRowcnt nEq;   
f6f0: 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
f700: 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
f710: 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
f720: 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
f730: 74 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20 20 20  tRowcnt nLt;    
f740: 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
f750: 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
f760: 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
f770: 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
f780: 20 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b 20 20   tRowcnt nDLt;  
f790: 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
f7a0: 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
f7b0: 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
f7c0: 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
f7d0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
f7e0: 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
f7f0: 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
f800: 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
f810: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
f820: 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
f830: 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
f840: 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
f850: 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
f860: 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
f870: 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
f880: 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
f890: 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
f8a0: 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
f8b0: 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
f8c0: 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
f8d0: 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
f8e0: 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
f8f0: 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
f900: 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
f910: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
f920: 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
f930: 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
f940: 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
f950: 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
f960: 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
f970: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
f980: 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
f990: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
f9a0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
f9b0: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
f9c0: 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
f9d0: 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
f9e0: 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
f9f0: 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
fa00: 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
fa10: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
fa20: 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
fa30: 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
fa40: 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
fa50: 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
fa60: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
fa70: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
fa80: 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
fa90: 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
faa0: 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
fab0: 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
fac0: 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
fad0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
fae0: 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
faf0: 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
fb00: 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
fb10: 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
fb20: 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
fb30: 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
fb40: 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
fb50: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
fb60: 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
fb70: 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
fb80: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
fb90: 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
fba0: 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
fbb0: 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
fbc0: 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
fbd0: 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
fbe0: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
fbf0: 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
fc00: 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
fc10: 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
fc20: 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
fc30: 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
fc40: 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc60: 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
fc70: 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
fc80: 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
fc90: 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
fca0: 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
fcb0: 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
fcc0: 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
fcd0: 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
fce0: 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd00: 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
fd10: 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
fd20: 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
fd30: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
fd40: 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
fd50: 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
fd60: 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
fd70: 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
fd80: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
fd90: 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
fda0: 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
fdb0: 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
fdc0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
fdd0: 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
fde0: 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  dex */.  ExprLis
fdf0: 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
fe00: 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
fe10: 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
fe20: 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
fe30: 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
fe40: 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
fe50: 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
fe60: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
fe70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
fe80: 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
fe90: 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
feb0: 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
fec0: 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
fed0: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
fee0: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
fef0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
ff00: 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
ff10: 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
ff20: 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
ff30: 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
ff40: 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
ff50: 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
ff60: 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
ff70: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
ff80: 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
ff90: 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
ffa0: 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
ffb0: 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
ffc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
ffd0: 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
ffe0: 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
fff0: 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
10000 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
10010 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
10020 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
10030 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
10040 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
10050 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10060 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
10070 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
10080 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
100b0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
100c0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
100d0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
100e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100f0 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
10100 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
10110 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
10120 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
10130 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10140 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
10150 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
10160 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
10170 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
10180 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
10190 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
101a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
101b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
101c0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
101d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
101e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
101f0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
10200 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
10210 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
10220 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
10230 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
10240 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
10250 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
10260 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
10270 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
10280 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
10290 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
102a0 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
102b0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
102c0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
102d0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
102e0 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
102f0 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
10300 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
10310 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
10320 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
10330 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
10340 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
10350 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
10360 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
10370 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
10380 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
10390 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
103a0 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
103b0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
103c0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
103d0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
103e0 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
103f0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10400 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
10410 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
10420 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
10430 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
10440 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
10450 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
10460 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
10470 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
10480 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
10490 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
104a0 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
104b0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
104c0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
104d0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
104e0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
104f0 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
10500 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
10510 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
10520 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
10530 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
10540 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
10550 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
10560 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
10570 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
10580 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
10590 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
105a0 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
105b0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
105c0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
105d0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
105e0 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
105f0 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
10600 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
10610 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
10620 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
10630 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
10640 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
10650 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
10660 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
10670 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
10680 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
10690 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
106a0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
106b0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
106c0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
106d0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
106e0 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
106f0 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
10700 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
10710 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
10720 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
10730 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
10740 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
10750 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
10760 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
10770 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
10780 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10790 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
107a0 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
107b0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
107c0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
107d0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
107e0 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
107f0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10800 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
10810 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
10820 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
10830 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
10840 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
10850 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
10860 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
10870 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
10880 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
10890 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
108a0 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
108b0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
108c0 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
108d0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
108e0 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
108f0 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
10900 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
10910 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
10920 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
10930 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
10940 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
10950 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
10960 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
10970 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
10980 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
10990 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
109a0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
109b0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
109c0 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
109d0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
109e0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
109f0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
10a00 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
10a10 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
10a20 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
10a30 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
10a40 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
10a50 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
10a60 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
10a70 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
10a80 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
10a90 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
10aa0 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
10ab0 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
10ac0 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
10ad0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
10ae0 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
10af0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
10b00 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
10b10 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
10b20 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
10b30 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
10b40 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
10b50 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
10b60 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
10b70 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
10b80 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
10b90 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
10ba0 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
10bb0 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
10bc0 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
10bd0 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
10be0 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
10bf0 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
10c00 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
10c10 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
10c20 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
10c30 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
10c40 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
10c50 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
10c60 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
10c70 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
10c80 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
10c90 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
10ca0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
10cb0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
10cc0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
10cd0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
10ce0 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
10cf0 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
10d00 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
10d10 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
10d20 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
10d30 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
10d40 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
10d50 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
10d60 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
10d70 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
10d80 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
10d90 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
10da0 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
10db0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
10dc0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
10dd0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
10de0 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
10df0 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
10e00 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
10e10 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
10e20 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
10e30 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
10e40 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
10e50 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
10e60 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
10e70 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
10e80 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
10e90 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
10ea0 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
10eb0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
10ec0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
10ed0 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
10ee0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
10ef0 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
10f00 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
10f10 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
10f20 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
10f30 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
10f40 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
10f50 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
10f60 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
10f70 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
10f80 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
10f90 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
10fa0 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
10fb0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
10fc0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
10fd0 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
10fe0 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
10ff0 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
11000 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
11010 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
11020 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
11030 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
11040 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
11050 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
11060 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
11070 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
11080 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
11090 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
110a0 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
110b0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
110c0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
110d0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
110e0 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
110f0 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
11100 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
11110 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
11120 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
11130 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
11140 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
11150 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
11160 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
11170 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
11180 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
11190 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
111a0 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
111b0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
111c0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
111d0 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
111e0 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11200 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
11210 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
11220 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
11230 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
11240 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
11250 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
11260 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
11270 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  umn */.  u16 fla
11280 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
11290 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
112a0 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
112b0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
112c0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
112d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
112e0 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
112f0 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
11300 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
11310 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
11320 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
11330 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
11340 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
11350 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
11360 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
11370 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
11380 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
11390 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
113a0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
113b0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
113c0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
113d0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
113e0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
113f0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
11400 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
11410 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
11420 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
11430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
11470 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
11480 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
11490 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
114a0 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
114b0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
114c0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
114d0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
114e0 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75  pList;     /* Fu
114f0 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  nction arguments
11500 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49   or in "<expr> I
11510 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20  N (<expr-list)" 
11520 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
11530 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55  Select;     /* U
11540 73 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65  sed for sub-sele
11550 63 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20  cts and "<expr> 
11560 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a  IN (<select>)" *
11570 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
11580 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
11590 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
115a0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
115b0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
115c0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
115d0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
115e0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
115f0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
11600 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
11610 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
11620 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
11630 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
11640 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
11650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11680 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
11690 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
116a0 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
116b0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
116c0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
116d0 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
116e0 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
116f0 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
11700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
11710 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
11720 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
11730 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11750 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
11760 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
11770 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
11780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11790 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
117a0 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
117b0 6c 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  ld */.  ynVar iC
117c0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
117d0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
117e0 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
117f0 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
11820 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
11830 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
11840 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  . */.  i16 iAgg;
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11860 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
11870 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
11880 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
11890 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
118a0 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
118b0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
118c0 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
118d0 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
118e0 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20 20 20   flags2;        
118f0 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 73       /* Second s
11900 65 74 20 6f 66 20 66 6c 61 67 73 2e 20 20 45 50  et of flags.  EP
11910 32 5f 2e 2e 2e 20 2a 2f 0a 20 20 75 38 20 6f 70  2_... */.  u8 op
11920 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
11930 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
11940 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
11950 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
11980 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
11990 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
119a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
119b0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
119c0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
119d0 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
119e0 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
119f0 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
11a00 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
11a10 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
11a20 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
11a30 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
11a40 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
11a50 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
11a60 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
11a70 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
11a80 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
11a90 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
11aa0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
11ab0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
11ac0 46 72 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30  FromJoin   0x000
11ad0 31 20 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64  1  /* Originated
11ae0 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20   in ON or USING 
11af0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
11b00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
11b10 67 67 20 20 20 20 20 20 20 20 30 78 30 30 30 32  gg        0x0002
11b20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e    /* Contains on
11b30 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
11b40 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
11b50 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
11b60 6c 76 65 64 20 20 20 30 78 30 30 30 34 20 20 2f  lved   0x0004  /
11b70 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
11b80 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
11b90 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
11ba0 50 5f 45 72 72 6f 72 20 20 20 20 20 20 30 78 30  P_Error      0x0
11bb0 30 30 38 20 20 2f 2a 20 45 78 70 72 65 73 73 69  008  /* Expressi
11bc0 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
11bd0 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
11be0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
11bf0 74 69 6e 63 74 20 20 20 30 78 30 30 31 30 20 20  tinct   0x0010  
11c00 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
11c10 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
11c20 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
11c30 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
11c40 65 63 74 20 20 30 78 30 30 32 30 20 20 2f 2a 20  ect  0x0020  /* 
11c50 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
11c60 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
11c70 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
11c80 50 5f 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30  P_DblQuoted  0x0
11c90 30 34 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  040  /* token.z 
11ca0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
11cb0 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
11cc0 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
11cd0 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65   0x0080  /* True
11ce0 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
11cf0 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
11d00 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
11d10 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
11d20 20 30 78 30 31 30 30 20 20 2f 2a 20 54 72 65 65   0x0100  /* Tree
11d30 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
11d40 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f 72 20  OLLATE opeartor 
11d50 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 69  */.#define EP_Fi
11d60 78 65 64 44 65 73 74 20 20 30 78 30 32 30 30 20  xedDest  0x0200 
11d70 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65 64 65   /* Result neede
11d80 64 20 69 6e 20 61 20 73 70 65 63 69 66 69 63 20  d in a specific 
11d90 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64 65 66  register */.#def
11da0 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20  ine EP_IntValue 
11db0 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49 6e 74    0x0400  /* Int
11dc0 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61  eger value conta
11dd0 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65  ined in u.iValue
11de0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78   */.#define EP_x
11df0 49 73 53 65 6c 65 63 74 20 20 30 78 30 38 30 30  IsSelect  0x0800
11e00 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69    /* x.pSelect i
11e10 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69  s valid (otherwi
11e20 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a  se x.pList is) *
11e30 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 48 69 6e  /.#define EP_Hin
11e40 74 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20  t       0x1000  
11e50 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  /* Not used */.#
11e60 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65  define EP_Reduce
11e70 64 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20  d    0x2000  /* 
11e80 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45  Expr struct is E
11e90 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
11ea0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
11eb0 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
11ec0 6c 79 20 20 30 78 34 30 30 30 20 20 2f 2a 20 45  ly  0x4000  /* E
11ed0 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45 58  xpr struct is EX
11ee0 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
11ef0 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
11f00 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
11f10 20 20 20 20 20 30 78 38 30 30 30 20 20 2f 2a 20       0x8000  /* 
11f20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
11f30 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
11f40 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f 2a   malloc() */../*
11f50 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
11f60 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
11f70 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
11f80 65 20 45 78 70 72 2e 66 6c 61 67 73 32 20 66 69  e Expr.flags2 fi
11f90 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
11fa0 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b 65  EP2_MallocedToke
11fb0 6e 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4e 65  n  0x0001  /* Ne
11fc0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
11fd0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
11fe0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 32  n */.#define EP2
11ff0 5f 49 72 72 65 64 75 63 69 62 6c 65 20 20 20 20  _Irreducible    
12000 30 78 30 30 30 32 20 20 2f 2a 20 43 61 6e 6e 6f  0x0002  /* Canno
12010 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
12020 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 0a 2f   this Expr */../
12030 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75 64 6f 2d  *.** The pseudo-
12040 72 6f 75 74 69 6e 65 20 73 71 6c 69 74 65 33 45  routine sqlite3E
12050 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62 6c  xprSetIrreducibl
12060 65 20 73 65 74 73 20 74 68 65 20 45 50 32 5f 49  e sets the EP2_I
12070 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20 66 6c  rreducible.** fl
12080 61 67 20 6f 6e 20 61 6e 20 65 78 70 72 65 73 73  ag on an express
12090 69 6f 6e 20 73 74 72 75 63 74 75 72 65 2e 20 20  ion structure.  
120a0 54 68 69 73 20 66 6c 61 67 20 69 73 20 75 73 65  This flag is use
120b0 64 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c 79 2e  d for VV&A only.
120c0 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69 6e 65    The.** routine
120d0 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
120e0 61 73 20 61 20 6d 61 63 72 6f 20 74 68 61 74 20  as a macro that 
120f0 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65 6e 20  only works when 
12100 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d 6f 64  in debugging mod
12110 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f 74 20  e,.** so as not 
12120 74 6f 20 62 75 72 64 65 6e 20 70 72 6f 64 75 63  to burden produc
12130 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69  tion code..*/.#i
12140 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
12150 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
12160 65 74 49 72 72 65 64 75 63 69 62 6c 65 28 58 29  etIrreducible(X)
12170 20 20 28 58 29 2d 3e 66 6c 61 67 73 32 20 7c 3d    (X)->flags2 |=
12180 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65   EP2_Irreducible
12190 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
121a0 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62  ExprSetIrreducib
121b0 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  le(X).#endif../*
121c0 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
121d0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
121e0 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
121f0 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
12200 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66  .** Expr.flags f
12210 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
12220 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
12230 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d  (E,P)     (((E)-
12240 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
12250 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
12260 73 41 6e 79 50 72 6f 70 65 72 74 79 28 45 2c 50  sAnyProperty(E,P
12270 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
12280 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
12290 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
122a0 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66  (E,P)     (E)->f
122b0 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
122c0 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65  e ExprClearPrope
122d0 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e  rty(E,P)   (E)->
122e0 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  flags&=~(P)../*.
122f0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
12300 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
12310 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
12320 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
12330 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
12340 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
12350 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
12360 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
12370 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
12380 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
12390 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
123a0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
123b0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
123c0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
123d0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
123e0 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
123f0 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
12400 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
12410 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
12420 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
12430 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
12440 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
12450 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
12460 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
12470 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
12480 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
12490 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
124a0 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
124b0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
124c0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
124d0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
124e0 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
124f0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
12500 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
12510 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
12520 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
12530 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
12540 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
12550 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
12560 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
12570 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
12580 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
12590 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
125a0 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
125b0 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
125c0 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
125d0 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
125e0 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
125f0 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
12600 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
12610 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
12620 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
12630 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
12640 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
12650 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
12660 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
12670 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
12680 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
12690 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
126a0 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
126b0 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
126c0 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
126d0 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
126e0 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
126f0 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
12700 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
12710 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
12720 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
12730 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
12740 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
12750 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
12760 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
12770 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
12780 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
12790 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
127a0 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
127b0 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
127c0 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
127d0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
127e0 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
127f0 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
12800 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
12810 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
12820 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
12830 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
12840 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
12850 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
12860 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
12870 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
12880 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
12890 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
128a0 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
128b0 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
128c0 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
128d0 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
128e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
128f0 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
12900 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
12910 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72 3b 20    int iECursor; 
12920 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44 42 45           /* VDBE
12930 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69 61 74   Cursor associat
12940 65 64 20 77 69 74 68 20 74 68 69 73 20 45 78 70  ed with this Exp
12950 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63  rList */.  struc
12960 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
12970 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
12980 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
12990 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
129a0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
129b0 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
129c0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
129d0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
129e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
129f0 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
12a00 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
12a10 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
12a20 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
12a30 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
12a40 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
12a50 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
12a60 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
12a70 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
12a80 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
12a90 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
12aa0 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
12ab0 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
12ac0 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
12ad0 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
12ae0 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
12af0 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
12b00 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
12b10 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
12b20 4e 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 4f 72  N */.    u16 iOr
12b30 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 20  derByCol;       
12b40 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
12b50 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
12b60 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
12b70 0a 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b  .    u16 iAlias;
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12b90 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
12ba0 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
12bb0 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20  ame */.  } *a;  
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bd0 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
12be0 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
12bf0 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
12c00 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
12c10 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
12c20 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
12c30 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
12c40 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
12c50 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
12c60 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
12c70 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
12c80 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
12c90 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
12ca0 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
12cb0 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
12cc0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
12cd0 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
12ce0 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
12cf0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
12d00 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
12d10 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
12d20 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
12d30 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
12d40 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
12d50 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
12d60 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
12d70 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
12d80 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
12d90 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
12da0 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
12db0 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
12dc0 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
12dd0 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
12de0 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
12df0 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
12e00 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
12e10 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
12e20 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
12e30 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
12e40 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
12e50 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
12e60 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
12e70 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
12e80 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
12e90 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
12ea0 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
12eb0 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
12ec0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
12ed0 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
12ee0 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
12ef0 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
12f00 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
12f10 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
12f20 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
12f30 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
12f40 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
12f50 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
12f60 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
12f70 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
12f80 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
12f90 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
12fa0 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
12fb0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
12fc0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
12fd0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
12fe0 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
12ff0 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
13000 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
13010 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
13020 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
13030 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
13040 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
13050 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13060 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
13070 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
13080 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
13090 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
130a0 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
130b0 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
130c0 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
130d0 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
130e0 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
130f0 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
13100 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
13110 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
13120 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
13130 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
13140 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
13150 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
13160 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
13170 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
13180 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  x86..*/.typedef 
13190 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a  u64 Bitmask;../*
131a0 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
131b0 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
131c0 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
131d0 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
131e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
131f0 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
13200 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
13210 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
13220 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
13230 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
13240 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
13250 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
13260 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
13270 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
13280 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
13290 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
132a0 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
132b0 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
132c0 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
132d0 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
132e0 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
132f0 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
13300 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
13310 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
13320 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
13330 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
13340 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
13350 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
13360 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
13370 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
13380 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
13390 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
133a0 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
133b0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
133c0 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
133d0 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
133e0 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
133f0 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
13400 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
13410 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
13420 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
13430 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
13440 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
13450 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
13460 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
13470 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
13480 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
13490 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
134a0 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
134b0 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
134c0 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
134d0 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
134e0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
134f0 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
13500 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
13510 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
13520 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
13530 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
13540 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
13550 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
13560 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
13570 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
13580 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
13590 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
135a0 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
135b0 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
135c0 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
135d0 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
135e0 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
135f0 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
13600 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 31 36   SrcList {.  i16
13610 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
13620 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
13630 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
13640 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
13650 73 65 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c 6c  se */.  i16 nAll
13660 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
13670 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
13680 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
13690 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
136a0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
136b0 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
136c0 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
136d0 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
136e0 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
136f0 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
13700 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
13710 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
13720 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13730 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
13740 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
13750 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
13760 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
13770 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
13780 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
13790 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
137a0 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
137b0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
137c0 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
137d0 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
137e0 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
137f0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
13800 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
13810 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
13820 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
13830 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
13840 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
13850 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
13860 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
13870 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
13880 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
13890 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
138a0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
138b0 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
138c0 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
138d0 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
138e0 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
138f0 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
13900 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70  s able and the p
13910 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75  revious */.    u
13920 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
13930 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
13940 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
13950 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
13960 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  se */.    unsign
13970 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
13980 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
13990 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
139a0 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75  related */.    u
139b0 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75  nsigned viaCorou
139c0 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70  tine :1;  /* Imp
139d0 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f  lemented as a co
139e0 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e  -routine */.#ifn
139f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13a00 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
13a10 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
13a20 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
13a30 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
13a40 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
13a50 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
13a60 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
13a70 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
13a80 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
13a90 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
13aa0 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
13ab0 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
13ac0 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
13ad0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
13ae0 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
13af0 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
13b00 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
13b10 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
13b20 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
13b30 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
13b40 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
13b50 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63  is used */.    c
13b60 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20  har *zIndex;    
13b70 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66   /* Identifier f
13b80 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20  rom "INDEXED BY 
13b90 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65  <zIndex>" clause
13ba0 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
13bb0 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64  Index;    /* Ind
13bc0 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
13bd0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49  responding to zI
13be0 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  ndex, if any */.
13bf0 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
13c00 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
13c10 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e  ry for each iden
13c20 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69  tifier on the li
13c30 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
13c40 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73  Permitted values
13c50 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e   of the SrcList.
13c60 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64  a.jointype field
13c70 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49  .*/.#define JT_I
13c80 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20  NNER     0x0001 
13c90 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f     /* Any kind o
13ca0 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73  f inner or cross
13cb0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
13cc0 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78   JT_CROSS     0x
13cd0 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69  0002    /* Expli
13ce0 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43  cit use of the C
13cf0 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  ROSS keyword */.
13d00 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52  #define JT_NATUR
13d10 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  AL   0x0004    /
13d20 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61  * True for a "na
13d30 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23  tural" join */.#
13d40 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20  define JT_LEFT  
13d50 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a      0x0008    /*
13d60 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e   Left outer join
13d70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52   */.#define JT_R
13d80 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20  IGHT     0x0010 
13d90 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65     /* Right oute
13da0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
13db0 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30  e JT_OUTER     0
13dc0 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20  x0020    /* The 
13dd0 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20  "OUTER" keyword 
13de0 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64  is present */.#d
13df0 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20  efine JT_ERROR  
13e00 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
13e10 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70  unknown or unsup
13e20 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65  ported join type
13e30 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68   */.../*.** A Wh
13e40 65 72 65 50 6c 61 6e 20 6f 62 6a 65 63 74 20 68  erePlan object h
13e50 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
13e60 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
13e70 61 20 6c 6f 6f 6b 75 70 0a 2a 2a 20 73 74 72 61  a lookup.** stra
13e80 74 65 67 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tegy..**.** This
13e90 20 6f 62 6a 65 63 74 20 69 73 20 69 6e 74 65 6e   object is inten
13ea0 64 65 64 20 74 6f 20 62 65 20 6f 70 61 71 75 65  ded to be opaque
13eb0 20 6f 75 74 73 69 64 65 20 6f 66 20 74 68 65 20   outside of the 
13ec0 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a  where.c module..
13ed0 2a 2a 20 49 74 20 69 73 20 69 6e 63 6c 75 64 65  ** It is include
13ee0 64 20 68 65 72 65 20 6f 6e 6c 79 20 73 6f 20 74  d here only so t
13ef0 68 61 74 20 74 68 61 74 20 63 6f 6d 70 69 6c 65  hat that compile
13f00 72 20 77 69 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20  r will know how 
13f10 62 69 67 20 69 74 0a 2a 2a 20 69 73 2e 20 20 4e  big it.** is.  N
13f20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 65 6c 64  one of the field
13f30 73 20 69 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  s in this object
13f40 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
13f50 6f 75 74 73 69 64 65 20 6f 66 0a 2a 2a 20 74 68  outside of.** th
13f60 65 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65  e where.c module
13f70 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 69 6e 20 74  ..**.** Within t
13f80 68 65 20 75 6e 69 6f 6e 2c 20 70 49 64 78 20 69  he union, pIdx i
13f90 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
13fa0 20 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49   wsFlags&WHERE_I
13fb0 4e 44 45 58 45 44 20 69 73 20 74 72 75 65 2e 0a  NDEXED is true..
13fc0 2a 2a 20 70 54 65 72 6d 20 69 73 20 6f 6e 6c 79  ** pTerm is only
13fd0 20 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61   used when wsFla
13fe0 67 73 26 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f  gs&WHERE_MULTI_O
13ff0 52 20 69 73 20 74 72 75 65 2e 20 20 41 6e 64 20  R is true.  And 
14000 70 56 74 61 62 49 64 78 0a 2a 2a 20 69 73 20 6f  pVtabIdx.** is o
14010 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73  nly used when ws
14020 46 6c 61 67 73 26 57 48 45 52 45 5f 56 49 52 54  Flags&WHERE_VIRT
14030 55 41 4c 54 41 42 4c 45 20 69 73 20 74 72 75 65  UALTABLE is true
14040 2e 20 20 49 74 20 69 73 20 6e 65 76 65 72 20 74  .  It is never t
14050 68 65 0a 2a 2a 20 63 61 73 65 20 74 68 61 74 20  he.** case that 
14060 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66  more than one of
14070 20 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e   these condition
14080 73 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74  s is true..*/.st
14090 72 75 63 74 20 57 68 65 72 65 50 6c 61 6e 20 7b  ruct WherePlan {
140a0 0a 20 20 75 33 32 20 77 73 46 6c 61 67 73 3b 20  .  u32 wsFlags; 
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 20 20 2f 2a 20 57 48 45 52 45 5f 2a 20 66 6c 61    /* WHERE_* fla
140d0 67 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  gs that describe
140e0 20 74 68 65 20 73 74 72 61 74 65 67 79 20 2a 2f   the strategy */
140f0 0a 20 20 75 31 36 20 6e 45 71 3b 20 20 20 20 20  .  u16 nEq;     
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 3d    /* Number of =
14120 3d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  = constraints */
14130 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b 20 20  .  u16 nOBSat;  
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f    /* Number of O
14160 52 44 45 52 20 42 59 20 74 65 72 6d 73 20 73 61  RDER BY terms sa
14170 74 69 73 66 69 65 64 20 2a 2f 0a 20 20 64 6f 75  tisfied */.  dou
14180 62 6c 65 20 6e 52 6f 77 3b 20 20 20 20 20 20 20  ble nRow;       
14190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
141a0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
141b0 6f 66 20 72 6f 77 73 20 28 66 6f 72 20 45 51 50  of rows (for EQP
141c0 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  ) */.  union {. 
141d0 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20     Index *pIdx; 
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 2f 2a 20 49 6e 64 65 78 20 77 68 65 6e 20    /* Index when 
14200 57 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73  WHERE_INDEXED is
14210 20 74 72 75 65 20 2a 2f 0a 20 20 20 20 73 74 72   true */.    str
14220 75 63 74 20 57 68 65 72 65 54 65 72 6d 20 2a 70  uct WhereTerm *p
14230 54 65 72 6d 3b 20 20 20 20 20 20 20 2f 2a 20 57  Term;       /* W
14240 48 45 52 45 20 63 6c 61 75 73 65 20 74 65 72 6d  HERE clause term
14250 20 66 6f 72 20 4f 52 2d 73 65 61 72 63 68 20 2a   for OR-search *
14260 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  /.    sqlite3_in
14270 64 65 78 5f 69 6e 66 6f 20 2a 70 56 74 61 62 49  dex_info *pVtabI
14280 64 78 3b 20 20 2f 2a 20 56 69 72 74 75 61 6c 20  dx;  /* Virtual 
14290 74 61 62 6c 65 20 69 6e 64 65 78 20 74 6f 20 75  table index to u
142a0 73 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  se */.  } u;.};.
142b0 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68 20  ./*.** For each 
142c0 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20 61  nested loop in a
142d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 6d   WHERE clause im
142e0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68  plementation, th
142f0 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20 73  e WhereInfo.** s
14300 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
14310 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  s a single insta
14320 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
14330 63 74 75 72 65 2e 20 20 54 68 69 73 20 73 74 72  cture.  This str
14340 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e 74  ucture.** is int
14350 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72 69 76  ended to be priv
14360 61 74 65 20 74 6f 20 74 68 65 20 77 68 65 72 65  ate to the where
14370 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20 73 68  .c module and sh
14380 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61  ould not be.** a
14390 63 63 65 73 73 20 6f 72 20 6d 6f 64 69 66 69 65  ccess or modifie
143a0 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c  d by other modul
143b0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 49  es..**.** The pI
143c0 64 78 49 6e 66 6f 20 66 69 65 6c 64 20 69 73 20  dxInfo field is 
143d0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 70 69 63  used to help pic
143e0 6b 20 74 68 65 20 62 65 73 74 20 69 6e 64 65 78  k the best index
143f0 20 6f 6e 20 61 0a 2a 2a 20 76 69 72 74 75 61 6c   on a.** virtual
14400 20 74 61 62 6c 65 2e 20 20 54 68 65 20 70 49 64   table.  The pId
14410 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20 63 6f  xInfo pointer co
14420 6e 74 61 69 6e 73 20 69 6e 64 65 78 69 6e 67 0a  ntains indexing.
14430 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ** information f
14440 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c  or the i-th tabl
14450 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
14460 61 75 73 65 20 62 65 66 6f 72 65 20 72 65 6f 72  ause before reor
14470 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20 74  dering..** All t
14480 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e  he pIdxInfo poin
14490 74 65 72 73 20 61 72 65 20 66 72 65 65 64 20 62  ters are freed b
144a0 79 20 77 68 65 72 65 49 6e 66 6f 46 72 65 65 28  y whereInfoFree(
144b0 29 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a 2a 2a  ) in where.c..**
144c0 20 41 6c 6c 20 6f 74 68 65 72 20 69 6e 66 6f 72   All other infor
144d0 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 2d  mation in the i-
144e0 74 68 20 57 68 65 72 65 4c 65 76 65 6c 20 6f 62  th WhereLevel ob
144f0 6a 65 63 74 20 66 6f 72 20 74 68 65 20 69 2d 74  ject for the i-t
14500 68 20 74 61 62 6c 65 0a 2a 2a 20 61 66 74 65 72  h table.** after
14510 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 72 64   FROM clause ord
14520 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74  ering..*/.struct
14530 20 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20   WhereLevel {.  
14540 57 68 65 72 65 50 6c 61 6e 20 70 6c 61 6e 3b 20  WherePlan plan; 
14550 20 20 20 20 20 20 2f 2a 20 71 75 65 72 79 20 70        /* query p
14560 6c 61 6e 20 66 6f 72 20 74 68 69 73 20 65 6c 65  lan for this ele
14570 6d 65 6e 74 20 6f 66 20 74 68 65 20 46 52 4f 4d  ment of the FROM
14580 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74   clause */.  int
14590 20 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20 20   iLeftJoin;     
145a0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c     /* Memory cel
145b0 6c 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  l used to implem
145c0 65 6e 74 20 4c 45 46 54 20 4f 55 54 45 52 20 4a  ent LEFT OUTER J
145d0 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61  OIN */.  int iTa
145e0 62 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 2f  bCur;          /
145f0 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
14600 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
14610 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
14620 69 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20  int iIdxCur;    
14630 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
14640 45 20 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f  E cursor used to
14650 20 61 63 63 65 73 73 20 70 49 64 78 20 2a 2f 0a   access pIdx */.
14660 20 20 69 6e 74 20 61 64 64 72 42 72 6b 3b 20 20    int addrBrk;  
14670 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
14680 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75  here to break ou
14690 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  t of the loop */
146a0 0a 20 20 69 6e 74 20 61 64 64 72 4e 78 74 3b 20  .  int addrNxt; 
146b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
146c0 20 68 65 72 65 20 74 6f 20 73 74 61 72 74 20 74   here to start t
146d0 68 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d 62 69  he next IN combi
146e0 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  nation */.  int 
146f0 61 64 64 72 43 6f 6e 74 3b 20 20 20 20 20 20 20  addrCont;       
14700 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74    /* Jump here t
14710 6f 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20  o continue with 
14720 74 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79  the next loop cy
14730 63 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  cle */.  int add
14740 72 46 69 72 73 74 3b 20 20 20 20 20 20 20 20 2f  rFirst;        /
14750 2a 20 46 69 72 73 74 20 69 6e 73 74 72 75 63 74  * First instruct
14760 69 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f 72 20  ion of interior 
14770 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  of the loop */. 
14780 20 75 38 20 69 46 72 6f 6d 3b 20 20 20 20 20 20   u8 iFrom;      
14790 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
147a0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 46 52 4f  entry in the FRO
147b0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38  M clause */.  u8
147c0 20 6f 70 2c 20 70 35 3b 20 20 20 20 20 20 20 20   op, p5;        
147d0 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 61 6e      /* Opcode an
147e0 64 20 50 35 20 6f 66 20 74 68 65 20 6f 70 63 6f  d P5 of the opco
147f0 64 65 20 74 68 61 74 20 65 6e 64 73 20 74 68 65  de that ends the
14800 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 70   loop */.  int p
14810 31 2c 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  1, p2;          
14820 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 6f 66 20   /* Operands of 
14830 74 68 65 20 6f 70 63 6f 64 65 20 75 73 65 64 20  the opcode used 
14840 74 6f 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70  to ends the loop
14850 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
14860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
14870 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
14880 64 65 70 65 6e 64 73 20 6f 6e 20 70 6c 61 6e 2e  depends on plan.
14890 77 73 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20 73  wsFlags */.    s
148a0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 69 6e  truct {.      in
148b0 74 20 6e 49 6e 3b 20 20 20 20 20 20 20 20 20 20  t nIn;          
148c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
148d0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 49 6e 4c   entries in aInL
148e0 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20 20 20 73  oop[] */.      s
148f0 74 72 75 63 74 20 49 6e 4c 6f 6f 70 20 7b 0a 20  truct InLoop {. 
14900 20 20 20 20 20 20 20 69 6e 74 20 69 43 75 72 3b         int iCur;
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14920 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
14930 20 75 73 65 64 20 62 79 20 74 68 69 73 20 49 4e   used by this IN
14940 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20   operator */.   
14950 20 20 20 20 20 69 6e 74 20 61 64 64 72 49 6e 54       int addrInT
14960 6f 70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  op;         /* T
14970 6f 70 20 6f 66 20 74 68 65 20 49 4e 20 6c 6f 6f  op of the IN loo
14980 70 20 2a 2f 0a 20 20 20 20 20 20 7d 20 2a 61 49  p */.      } *aI
14990 6e 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nLoop;          
149a0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
149b0 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73 74 65  about each neste
149c0 64 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f  d IN operator */
149d0 0a 20 20 20 20 7d 20 69 6e 3b 20 20 20 20 20 20  .    } in;      
149e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
149f0 65 64 20 77 68 65 6e 20 70 6c 61 6e 2e 77 73 46  ed when plan.wsF
14a00 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 5f 41 42  lags&WHERE_IN_AB
14a10 4c 45 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20  LE */.    Index 
14a20 2a 70 43 6f 76 69 64 78 3b 20 20 20 20 20 20 20  *pCovidx;       
14a30 2f 2a 20 50 6f 73 73 69 62 6c 65 20 63 6f 76 65  /* Possible cove
14a40 72 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 20 57  ring index for W
14a50 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 2a 2f  HERE_MULTI_OR */
14a60 0a 20 20 7d 20 75 3b 0a 20 20 64 6f 75 62 6c 65  .  } u;.  double
14a70 20 72 4f 70 74 43 6f 73 74 3b 20 20 20 20 20 20   rOptCost;      
14a80 2f 2a 20 22 4f 70 74 69 6d 61 6c 22 20 63 6f 73  /* "Optimal" cos
14a90 74 20 66 6f 72 20 74 68 69 73 20 6c 65 76 65 6c  t for this level
14aa0 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f   */..  /* The fo
14ab0 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64 20 69 73  llowing field is
14ac0 20 72 65 61 6c 6c 79 20 6e 6f 74 20 70 61 72 74   really not part
14ad0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
14ae0 6c 65 76 65 6c 2e 20 20 42 75 74 0a 20 20 2a 2a  level.  But.  **
14af0 20 77 65 20 6e 65 65 64 20 61 20 70 6c 61 63 65   we need a place
14b00 20 74 6f 20 63 61 63 68 65 20 76 69 72 74 75 61   to cache virtua
14b10 6c 20 74 61 62 6c 65 20 69 6e 64 65 78 20 69 6e  l table index in
14b20 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61  formation for ea
14b30 63 68 0a 20 20 2a 2a 20 76 69 72 74 75 61 6c 20  ch.  ** virtual 
14b40 74 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f  table in the FRO
14b50 4d 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65  M clause and the
14b60 20 57 68 65 72 65 4c 65 76 65 6c 20 73 74 72 75   WhereLevel stru
14b70 63 74 75 72 65 20 69 73 0a 20 20 2a 2a 20 61 20  cture is.  ** a 
14b80 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
14b90 20 73 69 6e 63 65 20 74 68 65 72 65 20 69 73 20   since there is 
14ba0 6f 6e 65 20 57 68 65 72 65 4c 65 76 65 6c 20 66  one WhereLevel f
14bb0 6f 72 20 65 61 63 68 20 46 52 4f 4d 20 63 6c 61  or each FROM cla
14bc0 75 73 65 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e 74  use.  ** element
14bd0 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
14be0 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 49 64  _index_info *pId
14bf0 78 49 6e 66 6f 3b 20 20 2f 2a 20 49 6e 64 65 78  xInfo;  /* Index
14c00 20 69 6e 66 6f 20 66 6f 72 20 6e 2d 74 68 20 73   info for n-th s
14c10 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  ource table */.}
14c20 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61  ;../*.** Flags a
14c30 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
14c40 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61  he wctrlFlags pa
14c50 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
14c60 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a  e3WhereBegin().*
14c70 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49  * and the WhereI
14c80 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d  nfo.wctrlFlags m
14c90 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ember..*/.#defin
14ca0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
14cb0 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20  NORMAL   0x0000 
14cc0 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66  /* No-op */.#def
14cd0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
14ce0 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30  Y_MIN      0x000
14cf0 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  1 /* ORDER BY pr
14d00 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e  ocessing for min
14d10 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
14d20 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
14d30 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32  _MAX      0x0002
14d40 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
14d50 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28  cessing for max(
14d60 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
14d70 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f  e WHERE_ONEPASS_
14d80 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20  DESIRED  0x0004 
14d90 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e  /* Want to do on
14da0 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45  e-pass UPDATE/DE
14db0 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
14dc0 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
14dd0 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a  _OK    0x0008 /*
14de0 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
14df0 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
14e00 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
14e10 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c  ERE_OMIT_OPEN_CL
14e20 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54  OSE  0x0010 /* T
14e30 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65  able cursors are
14e40 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f   already open */
14e50 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46  .#define WHERE_F
14e60 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20  ORCE_TABLE      
14e70 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x0020 /* Do not
14e80 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e   use an index-on
14e90 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65  ly search */.#de
14ea0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41  fine WHERE_ONETA
14eb0 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30  BLE_ONLY    0x00
14ec0 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20  40 /* Only code 
14ed0 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e  the 1st table in
14ee0 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65   pTabList */.#de
14ef0 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f  fine WHERE_AND_O
14f00 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30 30  NLY         0x00
14f10 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20  80 /* Don't use 
14f20 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74  indices for OR t
14f30 65 72 6d 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  erms */../*.** T
14f40 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
14f50 70 72 6f 63 65 73 73 69 6e 67 20 72 6f 75 74 69  processing routi
14f60 6e 65 20 68 61 73 20 74 77 6f 20 68 61 6c 76 65  ne has two halve
14f70 73 2e 20 20 54 68 65 0a 2a 2a 20 66 69 72 73 74  s.  The.** first
14f80 20 70 61 72 74 20 64 6f 65 73 20 74 68 65 20 73   part does the s
14f90 74 61 72 74 20 6f 66 20 74 68 65 20 57 48 45 52  tart of the WHER
14fa0 45 20 6c 6f 6f 70 20 61 6e 64 20 74 68 65 20 73  E loop and the s
14fb0 65 63 6f 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f  econd.** half do
14fc0 65 73 20 74 68 65 20 74 61 69 6c 20 6f 66 20 74  es the tail of t
14fd0 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20  he WHERE loop.  
14fe0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  An instance of.*
14ff0 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
15000 20 69 73 20 72 65 74 75 72 6e 65 64 20 62 79 20   is returned by 
15010 74 68 65 20 66 69 72 73 74 20 68 61 6c 66 20 61  the first half a
15020 6e 64 20 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74  nd passed.** int
15030 6f 20 74 68 65 20 73 65 63 6f 6e 64 20 68 61 6c  o the second hal
15040 66 20 74 6f 20 67 69 76 65 20 73 6f 6d 65 20 63  f to give some c
15050 6f 6e 74 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74  ontinuity..*/.st
15060 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 7b  ruct WhereInfo {
15070 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
15080 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15090 50 61 72 73 69 6e 67 20 61 6e 64 20 63 6f 64 65  Parsing and code
150a0 20 67 65 6e 65 72 61 74 69 6e 67 20 63 6f 6e 74   generating cont
150b0 65 78 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ext */.  SrcList
150c0 20 2a 70 54 61 62 4c 69 73 74 3b 20 20 20 20 20   *pTabList;     
150d0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61     /* List of ta
150e0 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  bles in the join
150f0 20 2a 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74   */.  u16 nOBSat
15100 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15110 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44  /* Number of ORD
15120 45 52 20 42 59 20 74 65 72 6d 73 20 73 61 74 69  ER BY terms sati
15130 73 66 69 65 64 20 62 79 20 69 6e 64 69 63 65 73  sfied by indices
15140 20 2a 2f 0a 20 20 75 31 36 20 77 63 74 72 6c 46   */.  u16 wctrlF
15150 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
15160 2f 2a 20 46 6c 61 67 73 20 6f 72 69 67 69 6e 61  /* Flags origina
15170 6c 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73 71  lly passed to sq
15180 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
15190 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 4f 6e 65 50  ) */.  u8 okOneP
151a0 61 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ass;            
151b0 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e   /* Ok to use on
151c0 65 2d 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d  e-pass algorithm
151d0 20 66 6f 72 20 55 50 44 41 54 45 2f 44 45 4c 45   for UPDATE/DELE
151e0 54 45 20 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73  TE */.  u8 untes
151f0 74 65 64 54 65 72 6d 73 3b 20 20 20 20 20 20 20  tedTerms;       
15200 20 20 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45    /* Not all WHE
15210 52 45 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65  RE terms resolve
15220 64 20 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20  d by outer loop 
15230 2a 2f 0a 20 20 75 38 20 65 44 69 73 74 69 6e 63  */.  u8 eDistinc
15240 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
15250 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 57 48 45  * One of the WHE
15260 52 45 5f 44 49 53 54 49 4e 43 54 5f 2a 20 76 61  RE_DISTINCT_* va
15270 6c 75 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  lues below */.  
15280 69 6e 74 20 69 54 6f 70 3b 20 20 20 20 20 20 20  int iTop;       
15290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
152a0 20 76 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20   very beginning 
152b0 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f  of the WHERE loo
152c0 70 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74  p */.  int iCont
152d0 69 6e 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  inue;           
152e0 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f   /* Jump here to
152f0 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e   continue with n
15300 65 78 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  ext record */.  
15310 69 6e 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20  int iBreak;     
15320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
15330 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20  p here to break 
15340 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  out of the loop 
15350 2a 2f 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b  */.  int nLevel;
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15370 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
15380 65 64 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72  ed loop */.  str
15390 75 63 74 20 57 68 65 72 65 43 6c 61 75 73 65 20  uct WhereClause 
153a0 2a 70 57 43 3b 20 20 2f 2a 20 44 65 63 6f 6d 70  *pWC;  /* Decomp
153b0 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57  osition of the W
153c0 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
153d0 20 64 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75   double savedNQu
153e0 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 70 50  eryLoop;   /* pP
153f0 61 72 73 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70  arse->nQueryLoop
15400 20 6f 75 74 73 69 64 65 20 74 68 65 20 57 48 45   outside the WHE
15410 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75  RE loop */.  dou
15420 62 6c 65 20 6e 52 6f 77 4f 75 74 3b 20 20 20 20  ble nRowOut;    
15430 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
15440 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75  ted number of ou
15450 74 70 75 74 20 72 6f 77 73 20 2a 2f 0a 20 20 57  tput rows */.  W
15460 68 65 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20  hereLevel a[1]; 
15470 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f           /* Info
15480 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
15490 63 68 20 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20  ch nest loop in 
154a0 57 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  WHERE */.};../* 
154b0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
154c0 6f 72 20 57 68 65 72 65 49 6e 66 6f 2e 65 44 69  or WhereInfo.eDi
154d0 73 74 69 6e 63 74 20 61 6e 64 20 44 69 73 74 69  stinct and Disti
154e0 6e 63 74 43 74 78 2e 65 54 6e 63 74 54 79 70 65  nctCtx.eTnctType
154f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15500 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
15510 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
15520 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
15530 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
15540 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
15550 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
15560 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
15570 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
15580 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
15590 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
155a0 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
155b0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
155c0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
155d0 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
155e0 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
155f0 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
15600 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
15610 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
15620 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
15630 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
15640 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
15650 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
15660 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
15670 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
15680 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
15690 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
156a0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
156b0 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
156c0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
156d0 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
156e0 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
156f0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
15700 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
15710 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
15720 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
15730 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
15740 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
15750 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
15760 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
15770 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
15780 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
15790 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
157a0 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
157b0 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
157c0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
157d0 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
157e0 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
157f0 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
15800 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  st .** context i
15810 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74  s searched first
15820 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69  .  If no match i
15830 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78  s found, the nex
15840 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65  t outer.** conte
15850 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  xt is checked.  
15860 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c  If there is stil
15870 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20  l no match, the 
15880 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20  next context.** 
15890 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69  is checked.  Thi
158a0 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e  s process contin
158b0 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72  ues until either
158c0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
158d0 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74  d.** or all cont
158e0 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20  exts are check. 
158f0 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73   When a match is
15900 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66   found, the nRef
15910 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68   member of.** th
15920 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69  e context contai
15930 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69  ning the match i
15940 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a  s incremented. .
15950 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
15960 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
15970 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
15980 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
15990 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
159a0 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
159b0 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
159c0 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
159d0 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
159e0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
159f0 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
15a00 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
15a10 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
15a20 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
15a30 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
15a40 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
15a50 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
15a60 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
15a70 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
15a80 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
15a90 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
15aa0 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
15ab0 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
15ac0 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
15ad0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
15ae0 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
15af0 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d  onal list of nam
15b00 65 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  ed expressions *
15b10 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
15b20 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f  gInfo;   /* Info
15b30 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67  rmation about ag
15b40 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73  gregates at this
15b50 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65   level */.  Name
15b60 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20  Context *pNext; 
15b70 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e   /* Next outer n
15b80 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55  ame context.  NU
15b90 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74  LL for outermost
15ba0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
15bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15bc0 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65  mber of names re
15bd0 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63  solved by this c
15be0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
15bf0 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
15c00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
15c10 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  rors encountered
15c20 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67   while resolving
15c30 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e   names */.  u8 n
15c40 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  cFlags;         
15c50 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
15c60 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69   NC_* flags defi
15c70 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ned below */.};.
15c80 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
15c90 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61  alues for the Na
15ca0 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61  meContext, ncFla
15cb0 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
15cc0 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
15cd0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67    0x01    /* Agg
15ce0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
15cf0 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
15d00 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
15d10 48 61 73 41 67 67 20 20 20 20 30 78 30 32 20 20  HasAgg    0x02  
15d20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
15d30 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
15d40 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
15d50 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
15d60 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75    0x04    /* Tru
15d70 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
15d80 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
15d90 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
15da0 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
15db0 6e 63 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72  nc 0x08    /* Tr
15dc0 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
15dd0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
15de0 61 67 67 20 66 75 6e 63 20 2a 2f 0a 0a 2f 2a 0a  agg func */../*.
15df0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
15e00 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
15e10 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
15e20 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
15e30 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
15e40 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
15e50 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
15e60 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
15e70 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
15e80 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
15e90 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
15ea0 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
15eb0 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
15ec0 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
15ed0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
15ee0 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
15ef0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
15f00 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
15f10 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
15f20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
15f30 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
15f40 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
15f50 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
15f60 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
15f70 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
15f80 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
15f90 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
15fa0 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
15fb0 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
15fc0 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
15fd0 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
15fe0 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
15ff0 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
16000 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
16010 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
16020 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
16030 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
16040 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
16050 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
16060 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
16070 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
16080 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
16090 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
160a0 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
160b0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
160c0 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
160d0 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
160e0 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
160f0 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
16100 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
16110 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
16120 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
16130 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
16140 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
16150 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
16160 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
16170 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
16180 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
16190 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
161a0 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
161b0 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
161c0 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
161d0 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
161e0 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
161f0 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
16200 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
16210 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
16220 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
16230 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
16240 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
16250 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
16260 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
16290 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
162a0 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
162b0 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c  T */.  u16 selFl
162c0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
162d0 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
162e0 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
162f0 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
16300 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
16310 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
16320 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
16330 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64  ters */.  int ad
16340 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20  drOpenEphm[3];  
16350 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
16360 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
16370 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
16380 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c  */.  double nSel
16390 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  ectRow;     /* E
163a0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
163b0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
163c0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
163d0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
163e0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
163f0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
16400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16410 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
16420 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
16430 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
16440 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
16450 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
16460 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
16470 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
16480 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
16490 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
164a0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
164b0 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
164c0 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
164d0 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
164e0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
164f0 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
16500 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
16510 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
16520 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
16530 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
16540 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ound */.  Select
16550 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20   *pRightmost;   
16560 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73   /* Right-most s
16570 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
16580 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
16590 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ment */.  Expr *
165a0 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
165b0 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
165c0 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
165d0 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
165e0 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
165f0 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
16600 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
16610 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
16620 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
16630 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
16640 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
16650 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
16660 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
16670 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
16680 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
16690 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30  istinct        0
166a0 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  x0001  /* Output
166b0 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
166c0 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
166d0 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
166e0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65    0x0002  /* Ide
166f0 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
16700 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
16710 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
16720 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34  ate       0x0004
16730 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
16740 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16750 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
16760 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20  UsesEphemeral   
16770 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20  0x0008  /* Uses 
16780 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
16790 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
167a0 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
167b0 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f         0x0010  /
167c0 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
167d0 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
167e0 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
167f0 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
16800 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
16810 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
16820 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
16830 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
16840 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20 20 20  F_UseSorter     
16850 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72    0x0040  /* Sor
16860 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74 65 72  t using a sorter
16870 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
16880 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
16890 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0080  /* Synthe
168a0 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
168b0 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
168c0 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61 6c 69  ine SF_Materiali
168d0 7a 65 20 20 20 20 20 30 78 30 31 30 30 20 20 2f  ze     0x0100  /
168e0 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69 61 6c  * Force material
168f0 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65 77 73  ization of views
16900 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
16910 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30  estedFrom      0
16920 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0200  /* Part o
16930 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
16940 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
16950 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
16960 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74  ults of a select
16970 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
16980 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
16990 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52  ays.  The.** "SR
169a0 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
169b0 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54  "SELECT Result T
169c0 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ype"..*/.#define
169d0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
169e0 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
169f0 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
16a00 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
16a10 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
16a20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
16a30 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
16a40 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
16a50 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
16a60 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
16a70 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
16a80 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
16a90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16aa0 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
16ab0 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
16ac0 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
16ad0 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  ere */../* The O
16ae0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
16af0 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
16b00 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
16b10 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
16b20 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
16b30 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
16b40 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65  iscard)..#define
16b50 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
16b60 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    5  /* Output e
16b70 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
16b80 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
16b90 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20  _Mem          6 
16ba0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
16bb0 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
16bc0 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
16bd0 5f 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20  _Set          7 
16be0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
16bf0 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
16c00 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
16c10 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
16c20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    8  /* Store re
16c30 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
16c40 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
16c50 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
16c60 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
16c70 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72   9  /* Create tr
16c80 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
16c90 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
16ca0 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
16cb0 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
16cc0 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  10  /* Generate 
16cd0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
16ce0 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  result */../*.**
16cf0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
16d00 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
16d10 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
16d20 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
16d30 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
16d40 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
16d50 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
16d60 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
16d70 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
16d80 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
16d90 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
16da0 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
16db0 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20    char affSdst; 
16dc0 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
16dd0 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
16de0 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
16df0 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
16e00 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
16e10 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
16e20 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
16e30 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
16e40 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
16e50 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
16e60 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
16e70 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
16e80 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  t;        /* Num
16e90 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
16ea0 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b   allocated */.};
16eb0 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
16ec0 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
16ed0 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
16ee0 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
16ef0 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  o AUTOINCREMENT 
16f00 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
16f10 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
16f20 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
16f30 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
16f40 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
16f50 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
16f60 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
16f70 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
16f80 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
16f90 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
16fa0 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
16fb0 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
16fc0 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
16fd0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
16fe0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
16ff0 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
17000 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67  down within trig
17010 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
17020 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
17030 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
17040 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
17050 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
17060 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
17070 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
17080 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
17090 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
170a0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
170b0 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
170c0 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
170d0 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
170e0 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
170f0 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
17100 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
17110 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
17120 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
17130 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
17140 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
17150 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
17160 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
17170 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
17180 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
17190 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
171a0 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
171b0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
171c0 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
171d0 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
171e0 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
171f0 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
17200 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
17210 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
17220 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
17230 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
17240 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
17250 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
17260 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
17270 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
17280 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65   each .** trigge
17290 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
172a0 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
172b0 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
172c0 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
172d0 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
172e0 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
172f0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
17300 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
17310 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
17320 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
17330 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
17340 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
17350 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
17360 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
17370 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
17380 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
17390 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
173a0 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
173b0 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
173c0 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
173d0 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
173e0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
173f0 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
17400 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
17410 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
17420 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
17430 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
17440 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
17450 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
17460 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
17470 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
17480 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
17490 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
174a0 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
174b0 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
174c0 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
174d0 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
174e0 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
174f0 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
17500 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
17510 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
17520 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
17530 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74   INSERT .** stat
17540 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
17550 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
17560 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
17570 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
17580 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
17590 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
175a0 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
175b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
175c0 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
175d0 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
175e0 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
175f0 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
17600 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
17610 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
17620 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
17630 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
17640 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
17650 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
17660 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
17670 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
17680 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
17690 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
176a0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
176b0 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
176c0 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
176d0 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
176e0 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
176f0 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
17700 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
17710 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
17720 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
17730 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
17740 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
17750 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
17760 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
17770 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
17780 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c 69 74  .  typedef sqlit
17790 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73  e3_uint64 yDbMas
177a0 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
177b0 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
177c0 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  yDbMask;.#endif.
177d0 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
177e0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
177f0 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
17800 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
17810 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
17820 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
17830 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
17840 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
17850 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
17860 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
17870 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
17880 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
17890 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
178a0 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
178b0 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
178c0 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
178d0 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
178e0 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
178f0 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
17900 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
17910 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
17920 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
17930 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
17940 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
17950 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
17960 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
17970 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
17980 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
17990 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
179a0 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
179b0 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
179c0 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
179d0 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
179e0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
179f0 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
17a00 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
17a10 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
17a20 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
17a30 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
17a40 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
17a50 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
17a60 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
17a70 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
17a80 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
17a90 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
17aa0 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
17ab0 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
17ac0 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
17ad0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
17ae0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
17af0 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
17b00 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
17b10 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
17b20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
17b30 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
17b40 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
17b50 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
17b60 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
17b70 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
17b80 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
17b90 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
17ba0 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
17bb0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
17bc0 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
17bd0 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
17be0 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
17bf0 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
17c00 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
17c10 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
17c20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
17c30 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
17c40 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
17c50 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
17c60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17c70 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
17c80 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
17c90 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
17ca0 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
17cb0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17cc0 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
17cd0 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
17ce0 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  g[] */.  u8 nTem
17cf0 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a  pInUse;       /*
17d00 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70   Number of aTemp
17d10 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20  Reg[] currently 
17d20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
17d30 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20   u8 nColCache;  
17d40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17d50 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
17d60 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75  olCache[] */.  u
17d70 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 iColCache;    
17d80 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
17d90 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  y in aColCache[]
17da0 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20   to replace */. 
17db0 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
17dc0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
17dd0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
17de0 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
17df0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
17e00 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
17e10 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
17e20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
17e30 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
17e40 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  eption */.  int 
17e50 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20  aTempReg[8];    
17e60 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61   /* Holding area
17e70 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72   for temporary r
17e80 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e  egisters */.  in
17e90 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
17ea0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
17eb0 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
17ec0 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
17ed0 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
17ee0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
17ef0 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
17f00 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
17f10 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
17f20 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17f30 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
17f40 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
17f50 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
17f60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
17f70 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
17f80 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
17f90 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
17fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17fb0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
17fc0 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
17fd0 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20  /.  int nSet;   
17fe0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17ff0 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64 20  er of sets used 
18000 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
18010 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20  nOnce;          
18020 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50   /* Number of OP
18030 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f  _Once instructio
18040 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ns so far */.  i
18050 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20  nt ckBase;      
18060 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
18070 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72  ster of data dur
18080 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  ing check constr
18090 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69  aints */.  int i
180a0 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20  CacheLevel;     
180b0 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69  /* ColCache vali
180c0 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65  d when aColCache
180d0 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68  [].iLevel<=iCach
180e0 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20  eLevel */.  int 
180f0 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20  iCacheCnt;      
18100 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64   /* Counter used
18110 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f   to generate aCo
18120 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c  lCache[].lru val
18130 75 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ues */.  struct 
18140 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
18150 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
18160 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
18170 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
18180 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
18190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
181a0 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
181b0 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
181c0 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
181d0 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
181e0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
181f0 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
18200 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
18210 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
18220 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
18230 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
18240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
18250 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
18260 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
18270 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
18280 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
18290 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
182a0 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
182b0 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
182c0 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
182d0 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
182e0 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
182f0 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
18300 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
18310 6e 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ntry */.  yDbMas
18320 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
18330 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
18340 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
18350 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
18360 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
18370 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
18380 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
18390 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
183a0 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
183b0 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64  Goto;      /* Ad
183c0 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f  dress of OP_Goto
183d0 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66   to cookie verif
183e0 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a  ier subroutine *
183f0 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
18400 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
18410 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
18420 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
18430 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20  s to verify */. 
18440 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
18450 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
18460 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
18470 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
18480 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
18490 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
184a0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
184b0 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
184c0 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
184d0 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
184e0 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
184f0 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
18500 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
18510 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
18520 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  m */.  Token con
18530 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
18540 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
18550 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
18560 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
18570 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18580 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
18590 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
185a0 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
185b0 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
185c0 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
185d0 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
185e0 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
185f0 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
18600 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
18610 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
18620 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
18630 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
18640 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
18650 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
18660 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
18670 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
18680 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
18690 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
186a0 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
186b0 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
186c0 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
186d0 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
186e0 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
186f0 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
18700 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
18710 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
18720 6f 72 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e  or */.  double n
18730 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20  QueryLoop;   /* 
18740 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
18750 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
18760 66 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 75  f a query */.  u
18770 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
18780 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
18790 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
187a0 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
187b0 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
187c0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
187d0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
187e0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
187f0 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
18800 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
18810 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
18820 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
18830 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
18840 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
18850 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
18860 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
18870 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
18880 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
18890 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
188a0 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62  gers */..  /* Ab
188b0 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  ove is constant 
188c0 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f  between recursio
188d0 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65  ns.  Below is re
188e0 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61  set before and a
188f0 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72  fter.  ** each r
18900 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69  ecursion */..  i
18910 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
18920 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18930 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
18940 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
18950 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
18960 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
18970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18980 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
18990 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
189a0 5d 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69  ] */.  u8 explai
189b0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
189c0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
189d0 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20  EXPLAIN flag is 
189e0 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65  found on the que
189f0 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ry */.#ifndef SQ
18a00 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
18a10 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c  LTABLE.  u8 decl
18a20 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20  areVtab;        
18a30 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e     /* True if in
18a40 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63  side sqlite3_dec
18a50 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20  lare_vtab() */. 
18a60 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20   int nVtabLock; 
18a70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18a80 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
18a90 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a  tables to lock *
18aa0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e  /.#endif.  int n
18ab0 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
18ac0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18ad0 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74  f aliased result
18ae0 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   set columns */.
18af0 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
18b00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
18b10 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
18b20 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
18b30 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
18b40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
18b50 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
18b60 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
18b70 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20         /* ID of 
18b80 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66  current select f
18b90 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
18ba0 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74  t */.  int iNext
18bb0 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
18bc0 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62   /* Next availab
18bd0 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72  le select ID for
18be0 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
18bf0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72  */.#endif.  char
18c00 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20   **azVar;       
18c10 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
18c20 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61  s to names of pa
18c30 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64  rameters */.  Vd
18c40 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
18c50 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
18c60 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
18c70 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
18c80 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41  ()) */.  int *aA
18c90 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
18ca0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 75     /* Register u
18cb0 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69 61  sed to hold alia
18cc0 73 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  sed result */.  
18cd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
18ce0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
18cf0 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
18d00 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
18d10 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
18d20 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
18d30 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
18d40 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
18d50 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
18d60 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
18d70 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
18d80 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
18d90 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
18da0 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
18db0 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
18dc0 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
18dd0 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
18de0 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
18df0 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
18e00 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
18e10 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
18e20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
18e30 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
18e40 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
18e50 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
18e60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18e70 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
18e80 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
18e90 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
18ea0 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
18eb0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
18ec0 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
18ed0 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
18ee0 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
18ef0 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
18f00 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
18f10 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
18f20 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
18f30 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
18f40 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
18f50 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
18f60 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
18f70 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
18f80 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
18f90 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
18fa0 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
18fb0 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
18fc0 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 7d  ed triggers */.}
18fd0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
18fe0 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
18ff0 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
19000 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
19010 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
19020 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
19030 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
19040 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
19050 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
19060 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
19070 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
19080 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
19090 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
190a0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
190b0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
190c0 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
190d0 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
190e0 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
190f0 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
19100 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
19110 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
19120 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
19130 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
19140 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
19150 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
19160 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
19170 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
19180 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
19190 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
191b0 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
191c0 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
191d0 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
191e0 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
191f0 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
19200 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
19210 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
19220 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
19230 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
19240 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
19250 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
19260 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a  D     0x02    /*
19270 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
19280 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
19290 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
192a0 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
192b0 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
192c0 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
192d0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
192e0 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
192f0 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
19300 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
19310 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
19320 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
19330 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
19340 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
19350 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
19360 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
19370 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
19380 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20  LAG_CLEARCACHE  
19390 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65    0x20    /* Cle
193a0 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  ar pseudo-table 
193b0 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75  cache in OP_Colu
193c0 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  mn */.#define OP
193d0 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
193e0 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
193f0 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
19400 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
19410 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19420 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
19430 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
19440 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
19450 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
19460 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
19470 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
19480 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
19490 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
194a0 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
194b0 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
194c0 45 47 20 20 20 20 20 20 20 30 78 30 32 20 20 20  EG       0x02   
194d0 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
194e0 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
194f0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
19500 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
19510 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
19520 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
19530 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
19540 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61  ion */../*. * Ea
19550 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
19560 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
19570 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
19580 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
19590 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
195a0 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20  Trigger. . *. * 
195b0 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
195c0 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
195d0 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
195e0 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
195f0 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
19600 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
19610 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
19620 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
19630 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a  presents the . *
19640 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
19650 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
19660 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
19670 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
19680 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
19690 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
196a0 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
196b0 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
196c0 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
196d0 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
196e0 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
196f0 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
19700 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
19710 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
19720 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
19730 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
19740 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
19750 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
19760 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
19770 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
19780 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
19790 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
197a0 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
197b0 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
197c0 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
197d0 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
197e0 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
197f0 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
19800 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
19810 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
19820 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
19830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19840 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
19850 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
19860 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
19870 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
19880 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19890 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
198a0 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
198b0 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
198c0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
198d0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
198e0 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
198f0 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
19900 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
19910 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
19920 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
19930 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
19940 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
19950 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
19960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19970 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
19980 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
19990 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
199a0 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
199b0 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
199c0 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
199d0 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
199e0 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
19a10 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
19a20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
19a30 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
19a40 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
19a50 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
19a60 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
19a70 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
19a80 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
19a90 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
19aa0 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
19ab0 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
19ac0 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
19ad0 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
19ae0 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
19af0 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
19b00 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
19b10 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
19b20 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
19b30 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
19b40 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
19b50 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
19b60 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
19b70 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
19b80 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
19b90 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
19ba0 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49   which. .**.** I
19bb0 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
19bc0 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
19bd0 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
19be0 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
19bf0 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
19c00 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
19c10 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
19c20 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
19c30 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
19c40 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
19c50 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
19c60 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
19c70 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
19c80 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
19c90 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
19ca0 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
19cb0 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
19cc0 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
19cd0 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
19ce0 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  am. . *. * Insta
19cf0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
19d00 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
19d10 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
19d20 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
19d30 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
19d40 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
19d50 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
19d60 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
19d70 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a   member of the .
19d80 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74   * associated st
19d90 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73  ruct Trigger ins
19da0 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74  tance. The first
19db0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
19dc0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20  linked list is. 
19dd0 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  * the first step
19de0 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d   of the trigger-
19df0 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20  program.. * . * 
19e00 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
19e10 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
19e20 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
19e30 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
19e40 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
19e50 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
19e60 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
19e70 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
19e80 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
19e90 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61  ed by the . * va
19ea0 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
19eb0 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
19ec0 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
19ed0 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
19ee0 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
19ef0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
19f00 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
19f10 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
19f20 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
19f30 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
19f40 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
19f50 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
19f60 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
19f70 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
19f80 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
19f90 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67  se NULL.. * targ
19fa0 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
19fb0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
19fc0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
19fd0 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
19fe0 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
19ff0 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
1a000 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1a010 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
1a020 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1a030 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1a040 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
1a050 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
1a060 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1a070 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
1a080 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1a090 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1a0a0 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
1a0b0 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20   VALUES ... . * 
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1a0d0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
1a0e0 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
1a0f0 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
1a100 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1a110 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
1a120 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
1a130 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74  ELETE). * target
1a140 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1a150 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1a160 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1a170 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
1a180 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
1a190 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1a1a0 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
1a1b0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1a1c0 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1a1d0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1a1e0 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1a1f0 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20  .. * . * (op == 
1a200 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61  TK_UPDATE). * ta
1a210 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
1a220 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
1a230 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1a240 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
1a250 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57  e rows of.. * pW
1a260 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1a270 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1a280 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1a290 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1a2a0 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1a2b0 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1a2c0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
1a2d0 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
1a2e0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
1a2f0 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
1a300 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
1a310 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
1a320 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
1a330 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
1a340 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
1a350 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
1a360 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1a370 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a  argument.. * . *
1a380 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1a390 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a3b0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1a3c0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1a3d0 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
1a3e0 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
1a3f0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
1a400 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
1a410 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1a420 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
1a430 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
1a440 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
1a450 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
1a460 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1a470 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65  /* SELECT statme
1a480 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
1a490 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45  ERT INTO .. SELE
1a4a0 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65  CT ... */.  Toke
1a4b0 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20  n target;       
1a4c0 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
1a4d0 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
1a4e0 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
1a4f0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1a500 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1a510 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
1a520 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
1a530 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
1a540 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
1a550 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
1a560 20 55 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53   UPDATE.  VALUES
1a570 20 63 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45   clause for INSE
1a580 52 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  RT */.  IdList *
1a590 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
1a5a0 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
1a5b0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
1a5c0 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
1a5d0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
1a5e0 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
1a5f0 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
1a600 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
1a610 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
1a620 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
1a630 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
1a640 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1a650 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1a660 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
1a670 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
1a680 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
1a690 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
1a6a0 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
1a6b0 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
1a6c0 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
1a6d0 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20  s.** explicit.  
1a6e0 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1a6f0 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
1a700 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
1a710 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
1a720 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
1a730 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
1a740 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
1a750 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
1a760 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1a770 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
1a780 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
1a790 68 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  hema */.  const 
1a7a0 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
1a7b0 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
1a7c0 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
1a7d0 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
1a7e0 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
1a7f0 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
1a800 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
1a810 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
1a820 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
1a830 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
1a840 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
1a850 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
1a860 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1a870 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1a880 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
1a890 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
1a8a0 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
1a8b0 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
1a8c0 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
1a8d0 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
1a8e0 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
1a8f0 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
1a900 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
1a910 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
1a920 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1a930 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
1a940 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
1a950 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
1a960 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
1a970 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
1a980 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
1a990 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
1a9a0 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
1a9b0 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
1a9c0 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
1a9d0 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
1a9e0 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61  r */.  int  nCha
1a9f0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
1aa00 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
1aa10 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
1aa20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  int  nAlloc;    
1aa30 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
1aa40 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
1aa50 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
1aa60 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  int  mxAlloc;   
1aa70 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1aa80 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c  allowed string l
1aa90 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20  ength */.  u8   
1aaa0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
1aab0 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20  /* Becomes true 
1aac0 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c  if any memory al
1aad0 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a  location fails *
1aae0 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c  /.  u8   useMall
1aaf0 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e  oc;      /* 0: n
1ab00 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33  one,  1: sqlite3
1ab10 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71  DbMalloc,  2: sq
1ab20 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  lite3_malloc */.
1ab30 20 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20    u8   tooBig;  
1ab40 20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65         /* Become
1ab50 73 20 74 72 75 65 20 69 66 20 73 74 72 69 6e 67  s true if string
1ab60 20 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69   size exceeds li
1ab70 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mits */.};../*.*
1ab80 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
1ab90 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1aba0 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
1abb0 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
1abc0 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
1abd0 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
1abe0 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
1abf0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1ac00 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
1ac10 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
1ac20 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1ac30 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
1ac40 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
1ac50 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
1ac60 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
1ac70 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
1ac80 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
1ac90 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1aca0 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64   /* 0 for main d
1acb0 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20  atabase.  1 for 
1acc0 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54  TEMP, 2.. for AT
1acd0 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20  TACHed */.  int 
1ace0 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1acf0 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
1ad00 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
1ad10 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
1ad20 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
1ad30 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
1ad40 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
1ad50 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
1ad60 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
1ad70 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
1ad80 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
1ad90 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
1ada0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
1adb0 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
1adc0 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
1add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ade0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1adf0 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
1ae00 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
1ae10 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1ae20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ae30 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
1ae40 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1ae50 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ae70 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1ae80 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
1ae90 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
1aea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1aeb0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1aec0 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
1aed0 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
1aee0 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af00 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
1af10 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
1af20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
1af30 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af50 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
1af60 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
1af70 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
1afa0 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
1afb0 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
1afc0 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1afd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1afe0 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
1aff0 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
1b000 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1b010 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
1b020 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1b030 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
1b040 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
1b050 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1b060 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
1b070 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
1b080 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
1b090 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
1b0a0 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
1b0b0 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
1b0c0 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
1b0d0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
1b0e0 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b100 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
1b110 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
1b120 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b140 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
1b150 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
1b160 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
1b170 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
1b180 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
1b190 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 76  sts sizes */.  v
1b1a0 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20  oid *pScratch;  
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1c0 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f   /* Scratch memo
1b1d0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63  ry */.  int szSc
1b1e0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1b1f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1b200 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63  e of each scratc
1b210 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  h buffer */.  in
1b220 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20  t nScratch;     
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b240 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72  /* Number of scr
1b250 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a  atch buffers */.
1b260 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
1b290 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
1b2a0 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2c0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1b2d0 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
1b2e0 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b310 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
1b320 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
1b330 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
1b340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
1b350 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
1b360 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
1b370 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
1b380 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
1b390 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
1b3a0 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
1b3b0 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
1b3c0 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
1b3d0 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
1b3e0 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
1b3f0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1b400 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
1b410 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
1b420 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
1b430 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b450 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1b460 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
1b470 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
1b480 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
1b490 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
1b4a0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b4b0 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
1b4c0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
1b4d0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
1b4e0 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
1b4f0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b500 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
1b510 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
1b520 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
1b530 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1b540 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1b550 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1b560 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1b570 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1b5a0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1b5b0 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zed */.  sqlite3
1b5c0 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
1b5d0 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
1b5e0 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
1b5f0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
1b600 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e   */.  int nRefIn
1b610 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
1b620 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b630 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49  r of users of pI
1b640 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f  nitMutex */.  vo
1b650 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
1b660 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1b670 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
1b680 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
1b690 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
1b6c0 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
1b6d0 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c   */.  int bLocal
1b6e0 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20  timeFault;      
1b6f0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1b700 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d  to fail localtim
1b710 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66  e() calls */.#if
1b720 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1b730 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28  E_SQLLOG.  void(
1b740 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c  *xSqllog)(void*,
1b750 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1b760 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  har*, int);.  vo
1b770 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a  id *pSqllogArg;.
1b780 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
1b790 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   Context pointer
1b7a0 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72   passed down thr
1b7b0 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61  ough the tree-wa
1b7c0 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61  lk..*/.struct Wa
1b7d0 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  lker {.  int (*x
1b7e0 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
1b7f0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
1b800 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
1b810 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
1b820 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
1b830 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
1b840 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
1b850 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
1b860 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65  LECTs */.  Parse
1b870 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
1b8a0 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
1b8b0 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b8e0 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
1b8f0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b920 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
1b930 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
1b940 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1b950 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
1b960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b970 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
1b980 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20  .    int i;     
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9b0 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
1b9c0 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
1b9d0 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9f0 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73     /* FROM claus
1ba00 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1ba10 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f  SrcCount *pSrcCo
1ba20 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  unt;            
1ba30 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20      /* Counting 
1ba40 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65  column reference
1ba50 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  s */.  } u;.};..
1ba60 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
1ba70 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
1ba80 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
1ba90 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
1baa0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
1bab0 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
1bac0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1bad0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1bae0 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
1baf0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1bb00 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
1bb10 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1bb20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1bb30 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
1bb40 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1bb50 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
1bb60 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
1bb70 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
1bb80 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
1bb90 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
1bba0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
1bbb0 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
1bbc0 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
1bbd0 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
1bbe0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
1bbf0 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
1bc00 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
1bc10 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
1bc20 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
1bc30 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
1bc40 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
1bc50 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
1bc60 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
1bc70 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69  Assuming zIn poi
1bc80 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
1bc90 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
1bca0 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61   character,.** a
1bcb0 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f  dvance zIn to po
1bcc0 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74  int to the first
1bcd0 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78   byte of the nex
1bce0 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  t UTF-8 characte
1bcf0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
1bd00 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a  LITE_SKIP_UTF8(z
1bd10 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  In) {           
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1bd30 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e   if( (*(zIn++))>
1bd40 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20  =0xc0 ){        
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd60 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c        \.    whil
1bd70 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29  e( (*zIn & 0xc0)
1bd80 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b  ==0x80 ){ zIn++;
1bd90 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c   }             \
1bda0 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  .  }            
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdd0 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a          \.}../*.
1bde0 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f  ** The SQLITE_*_
1bdf0 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20  BKPT macros are 
1be00 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
1be10 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20  the error codes 
1be20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65  with.** the same
1be30 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75   name but withou
1be40 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66  t the _BKPT suff
1be50 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f  ix.  These macro
1be60 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74  s invoke.** rout
1be70 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74  ines that report
1be80 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72   the line-number
1be90 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72   on which the er
1bea0 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a  ror originated.*
1beb0 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  * using sqlite3_
1bec0 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74  log().  The rout
1bed0 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64  ines also provid
1bee0 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  e a convenient p
1bef0 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61  lace.** to set a
1bf00 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70   debugger breakp
1bf10 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oint..*/.int sql
1bf20 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1bf30 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1bf40 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e  e3MisuseError(in
1bf50 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
1bf60 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74  antopenError(int
1bf70 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
1bf80 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73  E_CORRUPT_BKPT s
1bf90 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
1bfa0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
1bfb0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  fine SQLITE_MISU
1bfc0 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d  SE_BKPT sqlite3M
1bfd0 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e  isuseError(__LIN
1bfe0 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
1bff0 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50  ITE_CANTOPEN_BKP
1c000 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  T sqlite3Cantope
1c010 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  nError(__LINE__)
1c020 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  .../*.** FTS4 is
1c030 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
1c040 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
1c050 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
1c060 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
1c070 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
1c080 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
1c090 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
1c0a0 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  also all.** the 
1c0b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c0c0 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76  S4 macro to serv
1c0d0 65 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66  e as an alisse f
1c0e0 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
1c0f0 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
1c100 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1c110 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
1c120 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1c130 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
1c140 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
1c150 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS3.#endif../*
1c160 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20  .** The ctype.h 
1c170 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64  header is needed
1c180 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73   for non-ASCII s
1c190 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61  ystems.  It is a
1c1a0 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79  lso.** needed by
1c1b0 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20   FTS3 when FTS3 
1c1c0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
1c1d0 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e  he amalgamation.
1c1e0 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1c1f0 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c  (SQLITE_ASCII) |
1c200 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
1c210 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
1c220 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28  TS3) && defined(
1c230 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
1c240 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20  ION)).# include 
1c250 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66  <ctype.h>.#endif
1c260 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1c270 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d  owing macros mim
1c280 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  ic the standard 
1c290 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
1c2a0 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20  s toupper(),.** 
1c2b0 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e  isspace(), isaln
1c2c0 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20  um(), isdigit() 
1c2d0 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20  and isxdigit(), 
1c2e0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68  respectively. Th
1c2f0 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73  e.** sqlite vers
1c300 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
1c310 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
1c320 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ers, regardless 
1c330 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69  of locale..*/.#i
1c340 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49  fdef SQLITE_ASCI
1c350 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  I.# define sqlit
1c360 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28  e3Toupper(x)  ((
1c370 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70  x)&~(sqlite3Ctyp
1c380 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c390 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a  har)(x)]&0x20)).
1c3a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c3b0 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71  Isspace(x)   (sq
1c3c0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1c3d0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c3e0 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65  ]&0x01).# define
1c3f0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
1c400 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1c410 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1c420 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a  char)(x)]&0x06).
1c430 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c440 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71  Isalpha(x)   (sq
1c450 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1c460 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c470 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65  ]&0x02).# define
1c480 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1c490 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1c4a0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1c4b0 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a  char)(x)]&0x04).
1c4c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c4d0 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71  Isxdigit(x)  (sq
1c4e0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1c4f0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c500 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65  ]&0x08).# define
1c510 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
1c520 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70  x)   (sqlite3Upp
1c530 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67  erToLower[(unsig
1c540 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23  ned char)(x)]).#
1c550 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1c560 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
1c570 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
1c580 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1c590 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1c5a0 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
1c5b0 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
1c5c0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1c5d0 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1c5e0 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
1c5f0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1c600 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c610 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
1c620 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
1c630 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1c640 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
1c650 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
1c660 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c670 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1c680 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
1c690 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
1c6a0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1c6b0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
1c6c0 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
1c6d0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1c6e0 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (x)).#endif../*.
1c6f0 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
1c700 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
1c710 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  */.#define sqlit
1c720 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65  e3StrICmp sqlite
1c730 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71  3_stricmp.int sq
1c740 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
1c750 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
1c760 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
1c770 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
1c780 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
1c790 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
1c7a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
1c7b0 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
1c7c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
1c7d0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  loc(int);.void *
1c7e0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
1c7f0 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  o(int);.void *sq
1c800 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
1c810 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  o(sqlite3*, int)
1c820 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1c830 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
1c840 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  e3*, int);.char 
1c850 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
1c860 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1c870 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
1c880 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
1c890 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1c8a0 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  ar*, int);.void 
1c8b0 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
1c8c0 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  void*, int);.voi
1c8d0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
1c8e0 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
1c8f0 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74  3 *, void *, int
1c900 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1c910 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
1c920 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74  3 *, void *, int
1c930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
1c940 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
1c950 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
1c960 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
1c970 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
1c980 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
1c990 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
1c9a0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
1c9b0 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
1c9c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
1c9d0 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
1c9e0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
1c9f0 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
1ca00 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
1ca10 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
1ca20 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
1ca30 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69  fault(void);.voi
1ca40 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
1ca50 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
1ca60 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
1ca70 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20  (*)(void));.int 
1ca80 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
1ca90 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
1caa0 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
1cab0 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
1cac0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
1cad0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
1cae0 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
1caf0 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
1cb00 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
1cb10 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
1cb20 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
1cb30 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
1cb40 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
1cb50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
1cb60 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
1cb70 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
1cb80 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
1cb90 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
1cba0 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
1cbb0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1cbc0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
1cbd0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
1cbe0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1cbf0 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
1cc00 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1cc10 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
1cc20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
1cc30 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1cc40 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
1cc50 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
1cc60 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
1cc70 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
1cc80 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c  (D,P)       .#el
1cc90 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1cca0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
1ccb0 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
1ccc0 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
1ccd0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1cce0 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
1ccf0 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
1cd00 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
1cd10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1cd20 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
1cd30 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1cd40 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69  (D,P).#endif..#i
1cd50 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1cd60 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
1cd70 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
1cd80 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
1cd90 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
1cda0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1cdb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1cdc0 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
1cdd0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1cde0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
1cdf0 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e  msys5(void);.#en
1ce00 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
1ce10 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
1ce20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1ce30 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
1ce40 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
1ce50 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
1ce60 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
1ce70 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
1ce80 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
1ce90 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1cea0 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
1ceb0 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
1cec0 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
1ced0 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
1cee0 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
1cef0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  id);.#endif..int
1cf00 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
1cf10 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
1cf20 71 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28  qlite3StatusAdd(
1cf30 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1cf40 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74  sqlite3StatusSet
1cf50 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  (int, int);..#if
1cf60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1cf70 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
1cf80 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
1cf90 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
1cfa0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1cfb0 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
1cfc0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
1cfd0 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63  e3VXPrintf(StrAc
1cfe0 63 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  cum*, int, const
1cff0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
1d000 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1d010 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64  _OMIT_TRACE.void
1d020 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
1d030 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74  StrAccum*, const
1d040 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
1d050 6e 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74  ndif.char *sqlit
1d060 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
1d070 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1d080 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
1d090 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
1d0a0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1d0b0 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72  , va_list);.char
1d0c0 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64   *sqlite3MAppend
1d0d0 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a  f(sqlite3*,char*
1d0e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  ,const char*,...
1d0f0 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
1d100 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64  QLITE_TEST) || d
1d110 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1d120 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
1d130 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
1d140 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1d150 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
1d160 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
1d170 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
1d180 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
1d190 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
1d1a0 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66  dif../* Output f
1d1b0 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51  ormatting for SQ
1d1c0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58  LITE_TESTCTRL_EX
1d1d0 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66  PLAIN */.#if def
1d1e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1d1f0 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29  LE_TREE_EXPLAIN)
1d200 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1d210 78 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65  xplainBegin(Vdbe
1d220 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1d230 65 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28  e3ExplainPrintf(
1d240 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
1d250 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64  r*, ...);.  void
1d260 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e   sqlite3ExplainN
1d270 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  L(Vdbe*);.  void
1d280 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
1d290 75 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  ush(Vdbe*);.  vo
1d2a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1d2b0 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76  nPop(Vdbe*);.  v
1d2c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d2d0 69 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b  inFinish(Vdbe*);
1d2e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1d2f0 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62  xplainSelect(Vdb
1d300 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20  e*, Select*);.  
1d310 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1d320 61 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45  ainExpr(Vdbe*, E
1d330 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
1d340 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1d350 4c 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72  List(Vdbe*, Expr
1d360 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20  List*);.  const 
1d370 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62  char *sqlite3Vdb
1d380 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62  eExplanation(Vdb
1d390 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
1d3a0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1d3b0 69 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  inBegin(X).# def
1d3c0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1d3d0 69 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20  inSelect(A,B).# 
1d3e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1d3f0 70 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23  plainExpr(A,B).#
1d400 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45   define sqlite3E
1d410 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41  xplainExprList(A
1d420 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1d430 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73  ite3ExplainFinis
1d440 68 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  h(X).# define sq
1d450 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61  lite3VdbeExplana
1d460 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  tion(X) 0.#endif
1d470 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ...void sqlite3S
1d480 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
1d490 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  , sqlite3*, cons
1d4a0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
1d4b0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
1d4c0 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
1d4d0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69  t char*, ...);.i
1d4e0 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  nt sqlite3Dequot
1d4f0 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  e(char*);.int sq
1d500 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
1d510 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
1d520 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
1d530 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
1d540 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
1d550 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
1d560 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
1d570 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
1d580 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1d590 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29  tTempReg(Parse*)
1d5a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1d5b0 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72  leaseTempReg(Par
1d5c0 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
1d5d0 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67  lite3GetTempRang
1d5e0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
1d5f0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
1d600 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  seTempRange(Pars
1d610 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  e*,int,int);.voi
1d620 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65  d sqlite3ClearTe
1d630 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65  mpRegCache(Parse
1d640 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
1d650 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74  3ExprAlloc(sqlit
1d660 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f  e3*,int,const To
1d670 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ken*,int);.Expr 
1d680 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c  *sqlite3Expr(sql
1d690 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
1d6a0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
1d6b0 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75  ite3ExprAttachSu
1d6c0 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c  btrees(sqlite3*,
1d6d0 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72  Expr*,Expr*,Expr
1d6e0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
1d6f0 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69  3PExpr(Parse*, i
1d700 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
1d710 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
1d720 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1d730 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
1d740 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
1d750 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
1d760 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
1d770 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
1d780 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1d790 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
1d7a0 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
1d7b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1d7c0 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
1d7d0 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  3*, Expr*);.Expr
1d7e0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
1d7f0 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  rListAppend(Pars
1d800 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
1d810 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1d820 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
1d830 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1d840 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
1d850 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
1d860 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
1d870 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1d880 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
1d890 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
1d8a0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
1d8b0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1d8c0 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
1d8d0 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
1d8e0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1d8f0 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
1d900 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
1d910 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
1d920 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
1d930 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1d940 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d950 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
1d960 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71  sOfConnection(sq
1d970 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
1d980 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
1d990 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ema(sqlite3*,int
1d9a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1d9b0 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41  ollapseDatabaseA
1d9c0 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a  rray(sqlite3*);.
1d9d0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1d9e0 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e  nParse(Parse*,in
1d9f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1da00 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
1da10 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
1da20 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
1da30 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
1da40 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29  (Parse*,Select*)
1da50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
1da60 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
1da70 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  rse *, int);.voi
1da80 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
1da90 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
1daa0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
1dab0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
1dac0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
1dad0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
1dae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1daf0 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
1db00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1db10 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
1db20 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
1db30 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1db40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1db50 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
1db60 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
1db70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1db80 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73  dColumnType(Pars
1db90 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
1dba0 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
1dbb0 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
1dbc0 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
1dbd0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
1dbe0 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
1dbf0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1dc00 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
1dc10 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1dc20 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
1dc30 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
1dc40 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
1dc50 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
1dc60 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
1dc70 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1dc80 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
1dc90 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
1dca0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
1dcb0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
1dcc0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
1dcd0 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
1dce0 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65  Parse *);..Bitve
1dcf0 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
1dd00 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
1dd10 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
1dd20 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
1dd30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
1dd40 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
1dd50 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
1dd60 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
1dd70 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
1dd80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1dd90 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
1dda0 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
1ddb0 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
1ddc0 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
1ddd0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
1dde0 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
1ddf0 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
1de00 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
1de10 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
1de20 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
1de30 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
1de40 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
1de50 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
1de60 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
1de70 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1de80 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
1de90 74 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69  t*, u8 iBatch, i
1dea0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1deb0 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
1dec0 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
1ded0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
1dee0 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
1def0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
1df00 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
1df10 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
1df20 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
1df30 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
1df40 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1df50 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
1df60 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
1df70 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
1df80 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
1df90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
1dfa0 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
1dfb0 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76  A,B) 0.#endif..v
1dfc0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
1dfd0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
1dfe0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
1dff0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1e000 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
1e010 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1e020 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e030 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
1e040 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
1e050 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1e060 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
1e070 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
1e080 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
1e090 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
1e0a0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
1e0b0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1e0c0 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
1e0d0 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
1e0e0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
1e0f0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
1e100 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1e110 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
1e120 28 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  (X).#endif.int s
1e130 71 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74  qlite3CodeCorout
1e140 69 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ine(Parse*, Sele
1e150 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1e160 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
1e170 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
1e180 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
1e190 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
1e1a0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
1e1b0 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
1e1c0 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
1e1d0 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
1e1e0 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
1e1f0 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
1e200 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
1e210 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
1e220 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
1e230 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
1e240 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
1e250 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1e260 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
1e270 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1e280 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
1e290 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1e2a0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
1e2b0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
1e2c0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
1e2d0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1e2e0 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
1e2f0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1e300 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1e310 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e330 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
1e340 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
1e350 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
1e360 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
1e370 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
1e380 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
1e390 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
1e3a0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
1e3b0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
1e3c0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
1e3d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1e3e0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1e3f0 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
1e400 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1e410 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
1e420 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
1e430 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
1e440 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
1e450 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
1e460 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1e470 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1e480 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
1e490 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61  dex *sqlite3Crea
1e4a0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
1e4b0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
1e4c0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
1e4d0 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4f0 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c      Token*, int,
1e500 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e510 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
1e520 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
1e530 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1e540 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
1e550 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
1e560 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
1e570 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
1e580 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1e590 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
1e5a0 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
1e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5c0 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
1e5d0 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70  t*,u16,Expr*,Exp
1e5e0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e5f0 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
1e600 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
1e610 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1e620 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
1e630 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
1e640 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
1e650 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
1e660 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
1e670 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
1e680 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
1e690 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
1e6a0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
1e6b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1e6c0 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
1e6d0 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
1e6e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1e6f0 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
1e700 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
1e710 68 65 72 65 28 50 61 72 73 65 20 2a 2c 20 53 72  here(Parse *, Sr
1e720 63 4c 69 73 74 20 2a 2c 20 45 78 70 72 20 2a 2c  cList *, Expr *,
1e730 20 45 78 70 72 4c 69 73 74 20 2a 2c 20 45 78 70   ExprList *, Exp
1e740 72 20 2a 2c 20 45 78 70 72 20 2a 2c 20 63 68 61  r *, Expr *, cha
1e750 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  r *);.#endif.voi
1e760 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
1e770 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
1e780 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
1e790 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
1e7a0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1e7b0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
1e7c0 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
1e7d0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
1e7e0 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
1e7f0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1e800 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
1e810 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
1e820 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
1e830 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1e840 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1e850 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
1e860 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1e870 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
1e880 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1e890 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
1e8a0 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
1e8b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e8c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e8d0 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
1e8e0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1e8f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e900 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50  ExprCacheStore(P
1e910 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1e920 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e930 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68  te3ExprCachePush
1e940 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1e950 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
1e960 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  op(Parse*, int);
1e970 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1e980 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
1e990 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1e9a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e9b0 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
1e9c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e9d0 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
1e9e0 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
1e9f0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
1ea00 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
1ea10 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1ea20 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
1ea30 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
1ea40 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
1ea50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1ea60 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
1ea70 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1ea80 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1ea90 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
1eaa0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
1eab0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1eac0 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28  prCodeConstants(
1ead0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1eae0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1eaf0 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73  odeExprList(Pars
1eb00 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
1eb10 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1eb20 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
1eb30 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1eb40 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1eb50 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
1eb60 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
1eb70 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
1eb80 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
1eb90 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
1eba0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1ebb0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
1ebc0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
1ebd0 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  le(Parse*,int is
1ebe0 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a  View,const char*
1ebf0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
1ec00 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
1ec10 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
1ec20 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
1ec30 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1ec40 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
1ec50 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
1ec60 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1ec70 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
1ec80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ec90 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1eca0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
1ecb0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
1ecc0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
1ecd0 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
1ece0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1ecf0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1ed00 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
1ed10 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
1ed20 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
1ed30 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a  r**, sqlite3*);.
1ed40 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d  char *sqlite3Nam
1ed50 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74  eFromToken(sqlit
1ed60 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
1ed70 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
1ed80 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72  pare(Expr*, Expr
1ed90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1eda0 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
1edb0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
1edc0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1edd0 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
1ede0 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
1edf0 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
1ee00 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
1ee10 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
1ee20 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
1ee30 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1ee40 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
1ee50 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
1ee60 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
1ee70 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
1ee80 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1ee90 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
1eea0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1eeb0 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
1eec0 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1eed0 71 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53  qlite3PrngResetS
1eee0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
1eef0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1ef00 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
1ef10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1ef20 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
1ef30 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1ef40 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
1ef50 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
1ef60 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1ef70 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
1ef80 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
1ef90 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
1efa0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1efb0 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69  3CommitTransacti
1efc0 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
1efd0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1efe0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
1eff0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f000 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
1f010 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
1f020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
1f030 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
1f040 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
1f050 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
1f060 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
1f070 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
1f080 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1f090 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
1f0a0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
1f0b0 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
1f0c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1f0d0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
1f0e0 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a  unction(Expr*);.
1f0f0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
1f100 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
1f110 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
1f120 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
1f130 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f  const Expr*);.vo
1f140 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1f150 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62  deIsNullJump(Vdb
1f160 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  e*, const Expr*,
1f170 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1f180 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
1f190 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
1f1a0 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
1f1b0 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
1f1c0 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
1f1d0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1f1e0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
1f1f0 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
1f200 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1f210 74 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  t, Trigger *, in
1f220 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f230 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
1f240 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
1f250 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  able*, int, int*
1f260 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1f270 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
1f280 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
1f290 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1f2a0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1f2b0 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
1f2c0 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
1f2d0 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  *,int,int,.     
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f300 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
1f310 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
1f320 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
1f330 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
1f340 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1f350 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69  nt, int*, int, i
1f360 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1f370 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
1f380 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
1f390 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1f3a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f3b0 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
1f3c0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
1f3d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f3e0 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
1f3f0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1f400 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
1f410 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f420 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
1f430 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 68 61  Parse*, int, cha
1f440 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  r*, int);.Expr *
1f450 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
1f460 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
1f470 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
1f480 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
1f490 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
1f4a0 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
1f4b0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1f4c0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
1f4d0 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
1f4e0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
1f4f0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
1f500 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
1f510 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
1f520 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
1f530 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
1f540 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65  lite3FuncDefInse
1f550 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c  rt(FuncDefHash*,
1f560 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63   FuncDef*);.Func
1f570 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
1f580 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
1f590 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
1f5a0 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f  t,int,u8,u8);.vo
1f5b0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
1f5c0 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
1f5d0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ns(sqlite3*);.vo
1f5e0 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
1f5f0 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69  erDateTimeFuncti
1f600 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
1f610 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 47  sqlite3RegisterG
1f620 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76  lobalFunctions(v
1f630 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
1f640 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73  3SafetyCheckOk(s
1f650 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
1f660 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
1f670 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33  SickOrOk(sqlite3
1f680 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f690 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72  ChangeCookie(Par
1f6a0 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20  se*, int);..#if 
1f6b0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1f6c0 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64  OMIT_VIEW) && !d
1f6d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1f6e0 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64  IT_TRIGGER).void
1f6f0 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c   sqlite3Material
1f700 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20  izeView(Parse*, 
1f710 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
1f720 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
1f730 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1f740 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
1f750 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
1f760 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
1f770 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
1f780 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
1f790 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1f7b0 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
1f7c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
1f7d0 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
1f7e0 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
1f7f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
1f800 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
1f810 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
1f820 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
1f830 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
1f840 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
1f850 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
1f860 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
1f870 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
1f880 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
1f890 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
1f8a0 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
1f8b0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
1f8c0 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
1f8d0 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
1f8e0 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
1f8f0 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
1f900 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c   Trigger *, int,
1f910 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
1f920 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20   Table *,.      
1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f940 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20        int, int, 
1f950 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1f960 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
1f970 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a  erDirect(Parse *
1f980 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62  , Trigger *, Tab
1f990 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
1f9a0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1f9b0 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28  iteViewTriggers(
1f9c0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1f9d0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72  Expr*, int, Expr
1f9e0 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
1f9f0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
1fa00 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a  gerStep(sqlite3*
1fa10 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
1fa20 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1fa30 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65  sqlite3TriggerSe
1fa40 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33  lectStep(sqlite3
1fa50 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72  *,Select*);.  Tr
1fa60 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
1fa70 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
1fa80 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
1fa90 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fac0 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 2a 2c        ExprList*,
1fad0 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
1fae0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
1faf0 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
1fb00 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
1fb10 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
1fb20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
1fb30 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
1fb40 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
1fb50 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
1fb60 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
1fb70 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1fb80 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
1fb90 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
1fba0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
1fbb0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
1fbc0 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
1fbd0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
1fbe0 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
1fbf0 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
1fc00 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
1fc10 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
1fc20 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
1fc30 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
1fc40 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
1fc50 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
1fc60 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
1fc70 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1fc80 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
1fc90 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
1fca0 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
1fcb0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
1fcc0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
1fcd0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
1fce0 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
1fcf0 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
1fd00 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
1fd10 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
1fd20 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1fd30 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
1fd40 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
1fd50 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
1fd60 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
1fd70 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
1fd80 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
1fd90 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
1fda0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fdb0 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
1fdc0 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
1fdd0 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
1fde0 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
1fdf0 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
1fe00 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
1fe10 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
1fe20 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
1fe30 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
1fe40 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
1fe50 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1fe60 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
1fe70 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1fe80 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
1fe90 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
1fea0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
1feb0 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
1fec0 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
1fed0 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
1fee0 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
1fef0 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
1ff00 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
1ff10 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
1ff20 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1ff30 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
1ff40 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
1ff50 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1ff60 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
1ff70 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
1ff80 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
1ff90 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
1ffa0 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
1ffb0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
1ffc0 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
1ffd0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1ffe0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
1fff0 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
20000 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
20010 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
20020 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20030 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
20040 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
20050 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
20060 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
20070 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
20080 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
20090 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
200a0 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
200b0 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
200c0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
200d0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
200e0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
200f0 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
20100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
20110 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
20120 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
20130 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
20140 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
20150 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
20160 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
20170 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
20180 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
20190 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
201a0 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
201b0 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
201c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
201d0 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
201e0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
201f0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
20200 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
20210 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
20220 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
20230 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
20240 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
20250 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
20260 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
20270 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
20280 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
20290 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
202a0 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
202b0 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
202c0 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
202d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
202e0 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
202f0 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
20300 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
20310 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
20320 74 20 75 38 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  t u8**);../*.** 
20330 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
20340 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
20350 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
20360 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
20370 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
20380 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
20390 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
203a0 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
203b0 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
203c0 69 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c  ile.  Code shoul
203d0 64 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20  d use the MACRO 
203e0 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20  forms below, as 
203f0 74 68 65 20 56 61 72 69 6e 74 33 32 20 76 65 72  the Varint32 ver
20400 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64  sions.** are cod
20410 65 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65  ed to assume the
20420 20 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73   single byte cas
20430 65 20 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e  e is already han
20440 64 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20  dled (which .** 
20450 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64  the MACRO form d
20460 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oes)..*/.int sql
20470 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
20480 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
20490 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  4);.int sqlite3P
204a0 75 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67  utVarint32(unsig
204b0 6e 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b  ned char*, u32);
204c0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
204d0 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
204e0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
204f0 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
20500 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
20510 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
20520 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
20530 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
20540 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
20550 20 68 65 61 64 65 72 20 6f 66 20 61 20 72 65 63   header of a rec
20560 6f 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ord consists of 
20570 61 20 73 65 71 75 65 6e 63 65 20 76 61 72 69 61  a sequence varia
20580 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
20590 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e  ers..** These in
205a0 74 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73  tegers are almos
205b0 74 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61  t always small a
205c0 6e 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61  nd are encoded a
205d0 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  s a single byte.
205e0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
205f0 67 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64  g macros take ad
20600 76 61 6e 74 61 67 65 20 74 68 69 73 20 66 61 63  vantage this fac
20610 74 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66  t to provide a f
20620 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e  ast encode.** an
20630 64 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20  d decode of the 
20640 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72 65  integers in a re
20650 63 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49 74  cord header.  It
20660 20 69 73 20 66 61 73 74 65 72 20 66 6f 72 20 74   is faster for t
20670 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73  he common.** cas
20680 65 20 77 68 65 72 65 20 74 68 65 20 69 6e 74 65  e where the inte
20690 67 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ger is a single 
206a0 62 79 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c  byte.  It is a l
206b0 69 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65  ittle slower whe
206c0 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  n the.** integer
206d0 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20   is two or more 
206e0 62 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72  bytes.  But over
206f0 61 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65 72  all it is faster
20700 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
20710 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  owing expression
20720 73 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74  s are equivalent
20730 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20  :.**.**     x = 
20740 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
20750 33 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20  32( A, &B );.** 
20760 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50      x = sqlite3P
20770 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  utVarint32( A, B
20780 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20   );.**.**     x 
20790 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 20 41  = getVarint32( A
207a0 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20  , B );.**     x 
207b0 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 20 41  = putVarint32( A
207c0 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65  , B );.**.*/.#de
207d0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
207e0 28 41 2c 42 29 20 20 28 75 38 29 28 28 2a 28 41  (A,B)  (u8)((*(A
207f0 29 3c 28 75 38 29 30 78 38 30 29 20 3f 20 28 28  )<(u8)0x80) ? ((
20800 42 29 20 3d 20 28 75 33 32 29 2a 28 41 29 29 2c  B) = (u32)*(A)),
20810 31 20 3a 20 73 71 6c 69 74 65 33 47 65 74 56 61  1 : sqlite3GetVa
20820 72 69 6e 74 33 32 28 28 41 29 2c 20 28 75 33 32  rint32((A), (u32
20830 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
20840 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
20850 42 29 20 20 28 75 38 29 28 28 28 75 33 32 29 28  B)  (u8)(((u32)(
20860 42 29 3c 28 75 33 32 29 30 78 38 30 29 20 3f 20  B)<(u32)0x80) ? 
20870 28 2a 28 41 29 20 3d 20 28 75 6e 73 69 67 6e 65  (*(A) = (unsigne
20880 64 20 63 68 61 72 29 28 42 29 29 2c 31 20 3a 20  d char)(B)),1 : 
20890 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
208a0 33 32 28 28 41 29 2c 20 28 42 29 29 29 0a 23 64  32((A), (B))).#d
208b0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20  efine getVarint 
208c0 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72     sqlite3GetVar
208d0 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56  int.#define putV
208e0 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
208f0 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73  PutVarint...cons
20900 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49  t char *sqlite3I
20910 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
20920 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29  Vdbe *, Index *)
20930 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61  ;.void sqlite3Ta
20940 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28 56  bleAffinityStr(V
20950 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  dbe *, Table *);
20960 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d  .char sqlite3Com
20970 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70  pareAffinity(Exp
20980 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61  r *pExpr, char a
20990 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ff2);.int sqlite
209a0 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b  3IndexAffinityOk
209b0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
209c0 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29  ar idx_affinity)
209d0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78  ;.char sqlite3Ex
209e0 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  prAffinity(Expr 
209f0 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
20a00 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74  ite3Atoi64(const
20a10 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e   char*, i64*, in
20a20 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
20a30 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
20a40 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
20a50 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
20a60 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
20a70 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  b(sqlite3*, cons
20a80 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e  t char *z, int n
20a90 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78  );.u8 sqlite3Hex
20aa0 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e  ToInt(int h);.in
20ab0 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  t sqlite3TwoPart
20ac0 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f  Name(Parse *, To
20ad0 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  ken *, Token *, 
20ae0 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 63 6f 6e 73 74  Token **);.const
20af0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
20b00 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
20b10 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
20b20 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
20b30 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
20b40 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
20b50 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
20b60 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
20b70 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
20b80 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
20b90 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
20ba0 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
20bb0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
20bc0 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
20bd0 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
20be0 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
20bf0 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
20c00 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20  lateToken(Parse 
20c10 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20  *pParse, Expr*, 
20c20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
20c30 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
20c40 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
20c50 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
20c60 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
20c70 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
20c80 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
20c90 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
20ca0 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
20cb0 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
20cc0 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
20cd0 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
20ce0 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
20cf0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
20d00 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
20d10 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
20d20 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
20d30 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
20d40 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
20d50 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
20d60 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
20d70 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
20d80 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
20d90 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
20da0 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
20db0 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
20dc0 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
20dd0 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
20de0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20df0 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
20e00 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
20e10 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
20e20 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74 29 3b  st char *z,int);
20e30 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
20e40 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
20e50 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
20e60 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
20e70 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
20e80 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
20e90 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
20ea0 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
20eb0 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
20ec0 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20  t void *,u8, .  
20ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ee0 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
20ef0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
20f00 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
20f10 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
20f20 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
20f30 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
20f40 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
20f50 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
20f60 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
20f70 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
20f80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
20f90 4e 41 42 4c 45 5f 53 54 41 54 33 0a 63 68 61 72  NABLE_STAT3.char
20fa0 20 2a 73 71 6c 69 74 65 33 55 74 66 38 74 6f 31   *sqlite3Utf8to1
20fb0 36 28 73 71 6c 69 74 65 33 20 2a 2c 20 75 38 2c  6(sqlite3 *, u8,
20fc0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
20fd0 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  t *);.#endif.int
20fe0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
20ff0 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
21000 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
21010 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
21020 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21030 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
21040 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
21050 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
21060 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
21070 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
21080 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
21090 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
210a0 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
210b0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
210c0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
210d0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
210e0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
210f0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
21100 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
21110 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
21120 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
21130 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
21140 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
21150 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
21160 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
21170 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
21180 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
21190 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
211a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
211b0 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
211c0 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
211d0 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
211e0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
211f0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
21200 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
21210 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
21220 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
21230 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
21240 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
21250 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
21260 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
21270 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
21280 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
21290 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
212a0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
212b0 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
212c0 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
212d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
212e0 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
212f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
21300 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
21310 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
21320 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
21330 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
21340 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
21350 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
21360 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
21370 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
21380 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
21390 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
213a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
213b0 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
213c0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
213d0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
213e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
213f0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
21400 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
21410 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
21420 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
21430 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
21440 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
21450 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
21460 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
21470 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
21480 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
21490 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
214a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
214b0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
214c0 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
214d0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
214e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
214f0 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
21500 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
21510 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21520 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
21530 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
21540 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
21550 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
21560 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
21570 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
21580 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
21590 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
215a0 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  e(const char*);.
215b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
215c0 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
215d0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
215e0 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
215f0 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
21600 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndler*);.int sql
21610 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
21620 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
21630 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
21640 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
21650 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
21660 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
21670 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
21680 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
21690 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
216a0 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
216b0 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
216c0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
216d0 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
216e0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
216f0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
21700 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
21710 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
21720 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
21730 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
21740 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21750 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d  3MinimumFileForm
21760 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  at(Parse*, int, 
21770 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21780 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
21790 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
217a0 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
217b0 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
217c0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
217d0 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
217e0 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
217f0 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
21800 71 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e  qlite3IndexKeyin
21810 66 6f 28 50 61 72 73 65 20 2a 2c 20 49 6e 64 65  fo(Parse *, Inde
21820 78 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  x *);.int sqlite
21830 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69  3CreateFunc(sqli
21840 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
21850 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76  r *, int, int, v
21860 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28  oid *, .  void (
21870 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
21880 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
21890 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
218a0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
218b0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
218c0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
218d0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
218e0 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
218f0 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
21900 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73  tructor.);.int s
21910 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
21920 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
21930 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
21940 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
21950 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
21960 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
21970 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72  (StrAccum*, char
21980 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
21990 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
219a0 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75  umAppend(StrAccu
219b0 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  m*,const char*,i
219c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
219d0 33 41 70 70 65 6e 64 53 70 61 63 65 28 53 74 72  3AppendSpace(Str
219e0 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61  Accum*,int);.cha
219f0 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63  r *sqlite3StrAcc
21a00 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75  umFinish(StrAccu
21a10 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
21a20 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53  3StrAccumReset(S
21a30 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
21a40 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
21a50 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
21a60 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
21a70 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
21a80 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
21a90 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
21aa0 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
21ab0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
21ac0 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
21ad0 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
21ae0 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
21af0 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
21b00 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
21b10 75 38 20 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  u8 *);../*.** Th
21b20 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
21b30 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
21b40 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69  ed parser.*/.voi
21b50 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
21b60 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73  Alloc(void*(*)(s
21b70 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71  ize_t));.void sq
21b80 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
21b90 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
21ba0 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
21bb0 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a  ite3Parser(void*
21bc0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61  , int, Token, Pa
21bd0 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59  rse*);.#ifdef YY
21be0 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
21bf0 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
21c00 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
21c10 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
21c20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
21c30 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
21c40 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
21c50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
21c60 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
21c70 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
21c80 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
21c90 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
21ca0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
21cb0 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
21cc0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
21cd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
21ce0 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
21cf0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
21d00 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
21d10 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
21d20 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
21d30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
21d40 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
21d50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
21d60 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
21d70 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
21d80 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
21d90 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
21da0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
21db0 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
21dc0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21dd0 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
21de0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
21df0 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
21e00 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
21e10 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
21e20 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
21e30 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
21e40 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
21e50 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
21e60 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
21e70 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
21e80 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69   .#  define sqli
21e90 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
21ea0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21eb0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
21ec0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
21ed0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
21ee0 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
21ef0 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
21f00 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
21f10 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
21f20 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
21f30 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
21f40 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
21f50 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
21f60 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
21f70 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
21f80 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
21f90 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
21fa0 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
21fb0 62 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 20 20 20  b, char **);.   
21fc0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
21fd0 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
21fe0 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
21ff0 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
22000 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
22010 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
22020 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
22030 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
22040 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
22050 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
22060 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
22070 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
22080 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
22090 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
220a0 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
220b0 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
220c0 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
220d0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
220e0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
220f0 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
22100 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
22110 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
22120 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ==0).#endif.void
22130 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
22140 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
22150 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
22160 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
22170 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
22180 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
22190 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
221a0 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
221b0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
221c0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
221d0 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
221e0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
221f0 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
22200 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
22210 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
22220 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
22230 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
22240 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
22250 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
22260 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
22270 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
22280 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
22290 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
222a0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
222b0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
222c0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
222d0 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
222e0 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
222f0 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
22300 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
22310 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
22320 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76   nArg, Expr*);.v
22330 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c  oid sqlite3Inval
22340 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  idFunction(sqlit
22350 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
22360 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
22370 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
22380 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
22390 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
223a0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
223b0 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
223c0 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
223d0 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
223e0 6d 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  mt *);.int sqlit
223f0 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
22400 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22410 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
22420 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
22430 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
22440 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
22450 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
22460 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
22470 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
22480 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
22490 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
224a0 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
224b0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
224c0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
224d0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
224e0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
224f0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
22500 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
22510 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
22520 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
22530 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
22540 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
22550 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
22560 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  t);.#endif../* D
22570 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
22580 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
22590 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
225a0 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
225b0 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
225c0 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
225d0 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
225e0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
225f0 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
22600 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
22610 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
22620 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
22630 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
22640 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
22650 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
22660 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
22670 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
22680 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
22690 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
226a0 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
226b0 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
226c0 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69  ity is .** provi
226d0 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
226e0 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
226f0 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
22700 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
22710 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
22720 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
22730 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
22740 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
22750 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
22760 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
22770 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
22780 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
22790 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
227a0 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
227b0 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
227c0 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
227d0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
227e0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
227f0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
22800 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
22810 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
22820 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
22830 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
22840 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
22850 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
22860 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
22870 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
22880 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
22890 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
228a0 6e 73 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64  ns(a,b,c,d).  #d
228b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
228c0 68 65 63 6b 28 61 2c 62 2c 63 2c 64 29 0a 20 20  heck(a,b,c,d).  
228d0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
228e0 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63  kDropTable(a,b,c
228f0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
22900 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62  te3FkOldmask(a,b
22910 29 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69  )      0.  #defi
22920 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
22930 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 30 0a  ired(a,b,c,d) 0.
22940 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
22950 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
22960 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
22970 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
22980 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
22990 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
229a0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
229b0 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
229c0 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
229d0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
229e0 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
229f0 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
22a00 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
22a10 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
22a20 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
22a30 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
22a40 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
22a50 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
22a60 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
22a70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
22a80 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
22a90 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
22aa0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
22ab0 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
22ac0 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
22ad0 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
22ae0 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
22af0 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
22b00 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
22b10 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
22b20 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
22b30 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
22b40 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
22b50 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
22b60 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
22b70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22b80 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
22b90 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
22ba0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
22bb0 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
22bc0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
22bd0 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
22be0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22bf0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
22c00 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
22c10 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
22c20 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23  lloc().#endif..#
22c30 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
22c40 52 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20  ROWID           
22c50 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  1.#define IN_IND
22c60 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
22c70 20 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f     2.#define IN_
22c80 49 4e 44 45 58 5f 49 4e 44 45 58 20 20 20 20 20  INDEX_INDEX     
22c90 20 20 20 20 20 20 33 0a 69 6e 74 20 73 71 6c 69        3.int sqli
22ca0 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
22cb0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
22cc0 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  int*);..#ifdef S
22cd0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
22ce0 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20  MIC_WRITE.  int 
22cf0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
22d00 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
22d10 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
22d20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
22d30 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  int, int);.  int
22d40 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
22d50 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ize(sqlite3_vfs 
22d60 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
22d70 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
22d80 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
22d90 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
22da0 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74  rnalExists(sqlit
22db0 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c  e3_file *p);.#el
22dc0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
22dd0 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
22de0 70 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73  pVfs) ((pVfs)->s
22df0 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69  zOsFile).  #defi
22e00 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
22e10 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e  lExists(p) 1.#en
22e20 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
22e30 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  3MemJournalOpen(
22e40 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
22e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a  .int sqlite3MemJ
22e60 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29  ournalSize(void)
22e70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d  ;.int sqlite3IsM
22e80 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65  emJournal(sqlite
22e90 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20  3_file *);..#if 
22ea0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
22eb0 44 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73  DEPTH>0.  void s
22ec0 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
22ed0 67 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73  ght(Parse *pPars
22ee0 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69  e, Expr *p);.  i
22ef0 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
22f00 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63  ExprHeight(Selec
22f10 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  t *);.  int sqli
22f20 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
22f30 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ht(Parse*, int);
22f40 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22f50 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
22f60 65 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65  eight(x,y).  #de
22f70 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
22f80 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
22f90 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
22fa0 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
22fb0 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
22fc0 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
22fd0 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
22fe0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
22ff0 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
23000 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
23010 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
23020 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
23030 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
23040 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
23050 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
23060 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
23070 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
23080 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
23090 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
230a0 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
230b0 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
230c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
230d0 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
230e0 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
230f0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
23100 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
23110 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
23120 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
23130 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
23140 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
23150 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
23160 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
23170 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ar *);.#endif../
23180 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
23190 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
231a0 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
231b0 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
231c0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
231d0 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
231e0 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
231f0 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
23200 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
23210 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
23220 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49   .*/.#ifdef SQLI
23230 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
23240 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
23250 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
23260 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
23270 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
23280 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
23290 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
232a0 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54  be*);.SQLITE_EXT
232b0 45 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74  ERN void (*sqlit
232c0 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
232d0 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
232e0 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
232f0 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
23300 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
23310 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
23320 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
23330 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
23340 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
23350 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
23360 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
23370 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
23380 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
23390 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
233a0 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
233b0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
233c0 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
233d0 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
233e0 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
233f0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
23400 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
23410 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
23420 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
23430 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
23440 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
23450 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
23460 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
23470 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
23480 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
23490 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
234a0 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
234b0 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
234c0 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
234d0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
234e0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
234f0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
23500 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
23510 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
23520 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
23530 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
23540 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
23550 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
23560 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
23570 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
23580 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
23590 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
235a0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
235b0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
235c0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
235d0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
235e0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
235f0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
23600 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
23610 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
23620 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
23630 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
23640 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
23650 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
23660 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
23670 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
23680 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
23690 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
236a0 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
236b0 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
236c0 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
236d0 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
236e0 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
236f0 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
23700 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
23710 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
23720 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
23730 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
23740 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
23750 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
23760 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
23770 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
23780 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
23790 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
237a0 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
237b0 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
237c0 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
237d0 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
237e0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
237f0 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
23800 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
23810 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a  nstraint. .**.**
23820 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20   All of this is 
23830 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64  no-op for a prod
23840 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49  uction build.  I
23850 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74  t only comes int
23860 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74  o.** play when t
23870 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  he SQLITE_MEMDEB
23880 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  UG compile-time 
23890 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
238a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
238b0 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64  _MEMDEBUG.  void
238c0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
238d0 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  SetType(void*,u8
238e0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
238f0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
23900 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
23910 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
23920 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  NoType(void*,u8)
23930 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
23940 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
23950 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a  SetType(X,Y)  /*
23960 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69   no-op */.# defi
23970 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
23980 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20  ugHasType(X,Y)  
23990 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
239a0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
239b0 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66  (X,Y)   1.#endif
239c0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
239d0 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31  _HEAP       0x01
239e0 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61    /* General hea
239f0 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  p allocations */
23a00 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
23a10 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32  _LOOKASIDE  0x02
23a20 20 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20    /* Might have 
23a30 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  been lookaside m
23a40 65 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65  emory */.#define
23a50 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48   MEMTYPE_SCRATCH
23a60 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72      0x04  /* Scr
23a70 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  atch allocations
23a80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
23a90 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30  YPE_PCACHE     0
23aa0 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63  x08  /* Page cac
23ab0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  he allocations *
23ac0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
23ad0 45 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31  E_DB         0x1
23ae0 30 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74  0  /* Uses sqlit
23af0 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20  e3DbMalloc, not 
23b00 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f  sqlite_malloc */
23b10 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c  ..#endif /* _SQL
23b20 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a           ITEINT_H_ */.