/ Hex Artifact Content
Login

Artifact f7581eb79d822a6993d6aa31baf1e67e6ff17d19:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 54 68  INT_H_../*.** Th
01e0: 65 73 65 20 23 64 65 66 69 6e 65 73 20 73 68 6f  ese #defines sho
01f0: 75 6c 64 20 65 6e 61 62 6c 65 20 3e 32 47 42 20  uld enable >2GB 
0200: 66 69 6c 65 20 73 75 70 70 6f 72 74 20 6f 6e 20  file support on 
0210: 50 4f 53 49 58 20 69 66 20 74 68 65 0a 2a 2a 20  POSIX if the.** 
0220: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
0230: 74 69 6e 67 20 73 79 73 74 65 6d 20 73 75 70 70  ting system supp
0240: 6f 72 74 73 20 69 74 2e 20 20 49 66 20 74 68 65  orts it.  If the
0250: 20 4f 53 20 6c 61 63 6b 73 0a 2a 2a 20 6c 61 72   OS lacks.** lar
0260: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 2c  ge file support,
0270: 20 6f 72 20 69 66 20 74 68 65 20 4f 53 20 69 73   or if the OS is
0280: 20 77 69 6e 64 6f 77 73 2c 20 74 68 65 73 65 20   windows, these 
0290: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73  should be no-ops
02a0: 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23  ..**.** Ticket #
02b0: 32 37 33 39 3a 20 20 54 68 65 20 5f 4c 41 52 47  2739:  The _LARG
02c0: 45 46 49 4c 45 5f 53 4f 55 52 43 45 20 6d 61 63  EFILE_SOURCE mac
02d0: 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 62  ro must appear b
02e0: 65 66 6f 72 65 20 61 6e 79 0a 2a 2a 20 73 79 73  efore any.** sys
02f0: 74 65 6d 20 23 69 6e 63 6c 75 64 65 73 2e 20 20  tem #includes.  
0300: 48 65 6e 63 65 2c 20 74 68 69 73 20 62 6c 6f 63  Hence, this bloc
0310: 6b 20 6f 66 20 63 6f 64 65 20 6d 75 73 74 20 62  k of code must b
0320: 65 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  e the very first
0330: 0a 2a 2a 20 63 6f 64 65 20 69 6e 20 61 6c 6c 20  .** code in all 
0340: 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 2a 2a  source files..**
0350: 0a 2a 2a 20 4c 61 72 67 65 20 66 69 6c 65 20 73  .** Large file s
0360: 75 70 70 6f 72 74 20 63 61 6e 20 62 65 20 64 69  upport can be di
0370: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
0380: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
0390: 45 5f 4c 46 53 20 73 77 69 74 63 68 0a 2a 2a 20  E_LFS switch.** 
03a0: 6f 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  on the compiler 
03b0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 20 20 54  command line.  T
03c0: 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79  his is necessary
03d0: 20 69 66 20 79 6f 75 20 61 72 65 20 63 6f 6d 70   if you are comp
03e0: 69 6c 69 6e 67 0a 2a 2a 20 6f 6e 20 61 20 72 65  iling.** on a re
03f0: 63 65 6e 74 20 6d 61 63 68 69 6e 65 20 28 65 78  cent machine (ex
0400: 3a 20 52 65 64 20 48 61 74 20 37 2e 32 29 20 62  : Red Hat 7.2) b
0410: 75 74 20 79 6f 75 20 77 61 6e 74 20 79 6f 75 72  ut you want your
0420: 20 63 6f 64 65 20 74 6f 20 77 6f 72 6b 0a 2a 2a   code to work.**
0430: 20 6f 6e 20 61 6e 20 6f 6c 64 65 72 20 6d 61 63   on an older mac
0440: 68 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61  hine (ex: Red Ha
0450: 74 20 36 2e 30 29 2e 20 20 49 66 20 79 6f 75 20  t 6.0).  If you 
0460: 63 6f 6d 70 69 6c 65 20 6f 6e 20 52 65 64 20 48  compile on Red H
0470: 61 74 20 37 2e 32 0a 2a 2a 20 77 69 74 68 6f 75  at 7.2.** withou
0480: 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 4c  t this option, L
0490: 46 53 20 69 73 20 65 6e 61 62 6c 65 2e 20 20 42  FS is enable.  B
04a0: 75 74 20 4c 46 53 20 64 6f 65 73 20 6e 6f 74 20  ut LFS does not 
04b0: 65 78 69 73 74 20 69 6e 20 74 68 65 20 6b 65 72  exist in the ker
04c0: 6e 65 6c 0a 2a 2a 20 69 6e 20 52 65 64 20 48 61  nel.** in Red Ha
04d0: 74 20 36 2e 30 2c 20 73 6f 20 74 68 65 20 63 6f  t 6.0, so the co
04e0: 64 65 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 20 20  de won't work.  
04f0: 48 65 6e 63 65 2c 20 66 6f 72 20 6d 61 78 69 6d  Hence, for maxim
0500: 75 6d 20 62 69 6e 61 72 79 0a 2a 2a 20 70 6f 72  um binary.** por
0510: 74 61 62 69 6c 69 74 79 20 79 6f 75 20 73 68 6f  tability you sho
0520: 75 6c 64 20 6f 6d 69 74 20 4c 46 53 2e 0a 2a 2a  uld omit LFS..**
0530: 0a 2a 2a 20 53 69 6d 69 6c 61 72 20 69 73 20 74  .** Similar is t
0540: 72 75 65 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  rue for Mac OS X
0550: 2e 20 20 4c 46 53 20 69 73 20 6f 6e 6c 79 20 73  .  LFS is only s
0560: 75 70 70 6f 72 74 65 64 20 6f 6e 20 4d 61 63 20  upported on Mac 
0570: 4f 53 20 58 20 39 20 61 6e 64 20 6c 61 74 65 72  OS X 9 and later
0580: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
0590: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
05a0: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f  # define _LARGE_
05b0: 46 49 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69  FILE       1.# i
05c0: 66 6e 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53  fndef _FILE_OFFS
05d0: 45 54 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69  ET_BITS.#   defi
05e0: 6e 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ne _FILE_OFFSET_
05f0: 42 49 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a  BITS 64.# endif.
0600: 23 20 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46  # define _LARGEF
0610: 49 4c 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e  ILE_SOURCE 1.#en
0620: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  dif../*.** Inclu
0630: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
0640: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
0650: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
0660: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
0670: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
0680: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
0690: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
06a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
06b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
06c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
06d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
06e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
06f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
0700: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
0710: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
0720: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
0730: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
0740: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
0750: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
0760: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
0770: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
0780: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
0790: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
07a0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
07b0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
07c0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
07d0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
07e0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
07f0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
0800: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
0810: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
0820: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
0830: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
0840: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
0850: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
0860: 2e 2e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 5f 47  .. */.#ifndef _G
0870: 4e 55 5f 53 4f 55 52 43 45 0a 23 20 64 65 66 69  NU_SOURCE.# defi
0880: 6e 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ne _GNU_SOURCE.#
0890: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63  endif../*.** Inc
08a0: 6c 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65  lude standard he
08b0: 61 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65  ader files as ne
08c0: 63 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65  cessary.*/.#ifde
08d0: 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a  f HAVE_STDINT_H.
08e0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74  #include <stdint
08f0: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h>.#endif.#ifde
0900: 66 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f  f HAVE_INTTYPES_
0910: 48 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74  H.#include <intt
0920: 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  ypes.h>.#endif..
0930: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
0940: 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75  ing macros are u
0950: 73 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e  sed to cast poin
0960: 74 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73  ters to integers
0970: 20 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73   and.** integers
0980: 20 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54   to pointers.  T
0990: 68 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68  he way you do th
09a0: 69 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f  is varies from o
09b0: 6e 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74  ne compiler.** t
09c0: 6f 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77  o the next, so w
09d0: 65 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64  e have developed
09e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
09f0: 65 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d  et of #if statem
0a00: 65 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72  ents.** to gener
0a10: 61 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  ate appropriate 
0a20: 6d 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64  macros for a wid
0a30: 65 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69  e range of compi
0a40: 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lers..**.** The 
0a50: 63 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77  correct "ANSI" w
0a60: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73  ay to do this is
0a70: 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70   to use the intp
0a80: 74 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55  tr_t type. .** U
0a90: 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68  nfortunately, th
0aa0: 61 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f  at typedef is no
0ab0: 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61  t available on a
0ac0: 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72  ll compilers, or
0ad0: 0a 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61  .** if it is ava
0ae0: 69 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69  ilable, it requi
0af0: 72 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20  res an #include 
0b00: 6f 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64  of specific head
0b10: 65 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79  ers.** that vary
0b20: 20 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e   from one machin
0b30: 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a  e to the next..*
0b40: 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36  *.** Ticket #386
0b50: 30 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63  0:  The llvm-gcc
0b60: 2d 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72  -4.2 compiler fr
0b70: 6f 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20  om Apple chokes 
0b80: 6f 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64  on.** the ((void
0b90: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0ba0: 29 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75  ) construct.  Bu
0bb0: 74 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e  t MSVC chokes on
0bc0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a   ((void*)(X))..*
0bd0: 2a 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20  * So we have to 
0be0: 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f  define the macro
0bf0: 73 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77  s in different w
0c00: 61 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ays depending on
0c10: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72   the.** compiler
0c20: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
0c30: 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f  (__PTRDIFF_TYPE_
0c40: 5f 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65  _)  /* This case
0c50: 20 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72   should work for
0c60: 20 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65   GCC */.# define
0c70: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0c80: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0c90: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0ca0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
0cb0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0cc0: 28 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54  (X)  ((int)(__PT
0cd0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29  RDIFF_TYPE__)(X)
0ce0: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
0cf0: 28 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20  (__GNUC__)      
0d00: 20 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f   /* Works for co
0d10: 6d 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68  mpilers other th
0d20: 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66  an LLVM */.# def
0d30: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
0d40: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
0d50: 2a 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d  *)&((char*)0)[X]
0d60: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0d70: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0d80: 20 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29   ((int)(((char*)
0d90: 58 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65  X)-(char*)0)).#e
0da0: 6c 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45  lif defined(HAVE
0db0: 5f 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20  _STDINT_H)   /* 
0dc0: 55 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66  Use this case if
0dd0: 20 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65   we have ANSI he
0de0: 61 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e  aders */.# defin
0df0: 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f  e SQLITE_INT_TO_
0e00: 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29  PTR(X)  ((void*)
0e10: 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23  (intptr_t)(X)).#
0e20: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
0e30: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
0e40: 69 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58  int)(intptr_t)(X
0e50: 29 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20  )).#else        
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e70: 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61    /* Generates a
0e80: 20 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69   warning - but i
0e90: 74 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a  t always works *
0ea0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
0eb0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
0ec0: 20 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20   ((void*)(X)).# 
0ed0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0ee0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0ef0: 6e 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a  nt)(X)).#endif..
0f00: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
0f10: 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72  _THREADSAFE macr
0f20: 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65  o must be define
0f30: 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e  d as 0, 1, or 2.
0f40: 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65  .** 0 means mute
0f50: 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e  xes are permanen
0f60: 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20  tly disable and 
0f70: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e  the library is n
0f80: 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61  ever.** threadsa
0f90: 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65  fe.  1 means the
0fa0: 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69   library is seri
0fb0: 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20  alized which is 
0fc0: 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c  the highest.** l
0fd0: 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61  evel of threadsa
0fe0: 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74  fety.  2 means t
0ff0: 68 65 20 6c 69 62 61 72 79 20 69 73 20 6d 75 6c  he libary is mul
1000: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1010: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1020: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1030: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1040: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
1050: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
1060: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1070: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
1080: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
1090: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10a0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
10b0: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
10c0: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
10d0: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
10e0: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
10f0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1100: 48 52 45 41 44 53 41 46 45 29 0a 23 69 66 20 64  HREADSAFE).#if d
1110: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1120: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  E).# define SQLI
1130: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48  TE_THREADSAFE TH
1140: 52 45 41 44 53 41 46 45 0a 23 65 6c 73 65 0a 23  READSAFE.#else.#
1150: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1160: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1170: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1180: 39 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 65 6e 64  9 */.#endif.#end
1190: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73  if../*.** Powers
11a0: 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73  afe overwrite is
11b0: 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20   on by default. 
11c0: 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e   But can be turn
11d0: 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20  ed off using.** 
11e0: 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57  the -DSQLITE_POW
11f0: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1200: 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  =0 command-line 
1210: 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  option..*/.#ifnd
1220: 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ef SQLITE_POWERS
1230: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20  AFE_OVERWRITE.# 
1240: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f  define SQLITE_PO
1250: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1260: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 1.#endif../*.*
1270: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 46  * The SQLITE_DEF
1280: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 6d  AULT_MEMSTATUS m
1290: 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66  acro must be def
12a0: 69 6e 65 64 20 61 73 20 65 69 74 68 65 72 20 30  ined as either 0
12b0: 20 6f 72 20 31 2e 0a 2a 2a 20 49 74 20 64 65 74   or 1..** It det
12c0: 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
12d0: 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75  or not the featu
12e0: 72 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 0a  res related to .
12f0: 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ** SQLITE_CONFIG
1300: 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 65 20 61  _MEMSTATUS are a
1310: 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
1320: 75 6c 74 20 6f 72 20 6e 6f 74 2e 20 54 68 69 73  ult or not. This
1330: 20 76 61 6c 75 65 20 63 61 6e 0a 2a 2a 20 62 65   value can.** be
1340: 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 72   overridden at r
1350: 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  untime using the
1360: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
1370: 29 20 41 50 49 2e 0a 2a 2f 0a 23 69 66 20 21 64  ) API..*/.#if !d
1380: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1390: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29  FAULT_MEMSTATUS)
13a0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
13b0: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
13c0: 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 1.#endif../*.
13d0: 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  ** Exactly one o
13e0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13f0: 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64  macros must be d
1400: 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20  efined in order 
1410: 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68  to.** specify wh
1420: 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ich memory alloc
1430: 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20  ation subsystem 
1440: 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  to use..**.**   
1450: 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f    SQLITE_SYSTEM_
1460: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
1470: 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79  // Use normal sy
1480: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
1490: 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33       SQLITE_WIN3
14a0: 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  2_MALLOC        
14b0: 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20     // Use Win32 
14c0: 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a  native heap API.
14d0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45  **     SQLITE_ZE
14e0: 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  RO_MALLOC       
14f0: 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74       // Use a st
1500: 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61  ub allocator tha
1510: 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a  t always fails.*
1520: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d  *     SQLITE_MEM
1530: 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20  DEBUG           
1540: 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67      // Debugging
1550: 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74   version of syst
1560: 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a  em malloc().**.*
1570: 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66  * On Windows, if
1580: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33   the SQLITE_WIN3
1590: 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54  2_MALLOC_VALIDAT
15a0: 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  E macro is defin
15b0: 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73  ed and the.** as
15c0: 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20  sert() macro is 
15d0: 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61  enabled, each ca
15e0: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33  ll into the Win3
15f0: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75  2 native heap su
1600: 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20  bsystem.** will 
1610: 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61  cause HeapValida
1620: 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e  te to be called.
1630: 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61    If heap valida
1640: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c  tion should fail
1650: 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f  , an.** assertio
1660: 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65  n will be trigge
1670: 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 28 48 69 73 74  red..**.** (Hist
1680: 6f 72 69 63 61 6c 20 6e 6f 74 65 3a 20 20 54 68  orical note:  Th
1690: 65 72 65 20 75 73 65 64 20 74 6f 20 62 65 20 73  ere used to be s
16a0: 65 76 65 72 61 6c 20 6f 74 68 65 72 20 6f 70 74  everal other opt
16b0: 69 6f 6e 73 2c 20 62 75 74 20 77 65 27 76 65 0a  ions, but we've.
16c0: 2a 2a 20 70 61 72 65 64 20 69 74 20 64 6f 77 6e  ** pared it down
16d0: 20 74 6f 20 6a 75 73 74 20 74 68 65 73 65 20 74   to just these t
16e0: 68 72 65 65 2e 29 0a 2a 2a 0a 2a 2a 20 49 66 20  hree.).**.** If 
16f0: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76  none of the abov
1700: 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74  e are defined, t
1710: 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53  hen set SQLITE_S
1720: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a  YSTEM_MALLOC as.
1730: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a  ** the default..
1740: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
1750: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1760: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1770: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
1780: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
1790: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
17a0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
17b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
17c0: 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72  EMDEBUG)>1.# err
17d0: 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20  or "Two or more 
17e0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
17f0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
1800: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
1810: 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65  ons\. are define
1820: 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e  d but at most on
1830: 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20  e is allowed:\. 
1840: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
1850: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e  LLOC, SQLITE_WIN
1860: 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  32_MALLOC, SQLIT
1870: 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51  E_MEMDEBUG,\. SQ
1880: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1890: 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ".#endif.#if def
18a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54  ined(SQLITE_SYST
18b0: 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  EM_MALLOC) \.  +
18c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
18d0: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  WIN32_MALLOC) \.
18e0: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
18f0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20  TE_ZERO_MALLOC) 
1900: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
1910: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d  LITE_MEMDEBUG)==
1920: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
1930: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20  E_SYSTEM_MALLOC 
1940: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
1950: 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  If SQLITE_MALLOC
1960: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e  _SOFT_LIMIT is n
1970: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72  ot zero, then tr
1980: 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a  y to keep the.**
1990: 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79   sizes of memory
19a0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c   allocations bel
19b0: 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68  ow this value wh
19c0: 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f  ere possible..*/
19d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
19e0: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
19f0: 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65  _LIMIT).# define
1a00: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
1a10: 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23  OFT_LIMIT 1024.#
1a20: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20  endif../*.** We 
1a30: 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f  need to define _
1a40: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20  XOPEN_SOURCE as 
1a50: 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72  follows in order
1a60: 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65   to enable.** re
1a70: 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20  cursive mutexes 
1a80: 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73  on most Unix sys
1a90: 74 65 6d 73 2e 20 20 42 75 74 20 4d 61 63 20 4f  tems.  But Mac O
1aa0: 53 20 58 20 69 73 20 64 69 66 66 65 72 65 6e 74  S X is different
1ab0: 2e 0a 2a 2a 20 54 68 65 20 5f 58 4f 50 45 4e 5f  ..** The _XOPEN_
1ac0: 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63 61  SOURCE define ca
1ad0: 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f  uses problems fo
1ae0: 72 20 4d 61 63 20 4f 53 20 58 20 77 65 20 61 72  r Mac OS X we ar
1af0: 65 20 74 6f 6c 64 2c 0a 2a 2a 20 73 6f 20 69 74  e told,.** so it
1b00: 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 72   is omitted ther
1b10: 65 2e 20 20 53 65 65 20 74 69 63 6b 65 74 20 23  e.  See ticket #
1b20: 32 36 37 33 2e 0a 2a 2a 0a 2a 2a 20 4c 61 74 65  2673..**.** Late
1b30: 72 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20  r we learn that 
1b40: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 69 73  _XOPEN_SOURCE is
1b50: 20 70 6f 6f 72 6c 79 20 6f 72 20 69 6e 63 6f 72   poorly or incor
1b60: 72 65 63 74 6c 79 0a 2a 2a 20 69 6d 70 6c 65 6d  rectly.** implem
1b70: 65 6e 74 65 64 20 6f 6e 20 73 6f 6d 65 20 73 79  ented on some sy
1b80: 73 74 65 6d 73 2e 20 20 53 6f 20 77 65 20 61 76  stems.  So we av
1b90: 6f 69 64 20 64 65 66 69 6e 69 6e 67 20 69 74 20  oid defining it 
1ba0: 61 74 20 61 6c 6c 0a 2a 2a 20 69 66 20 69 74 20  at all.** if it 
1bb0: 69 73 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e  is already defin
1bc0: 65 64 20 6f 72 20 69 66 20 69 74 20 69 73 20 75  ed or if it is u
1bd0: 6e 6e 65 65 64 65 64 20 62 65 63 61 75 73 65 20  nneeded because 
1be0: 77 65 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 64 6f  we are.** not do
1bf0: 69 6e 67 20 61 20 74 68 72 65 61 64 73 61 66 65  ing a threadsafe
1c00: 20 62 75 69 6c 64 2e 20 20 54 69 63 6b 65 74 20   build.  Ticket 
1c10: 23 32 36 38 31 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  #2681..**.** See
1c20: 20 61 6c 73 6f 20 74 69 63 6b 65 74 20 23 32 37   also ticket #27
1c30: 34 31 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  41..*/.#if !defi
1c40: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
1c50: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
1c60: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
1c70: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
1c80: 29 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45  ) && SQLITE_THRE
1c90: 41 44 53 41 46 45 0a 23 20 20 64 65 66 69 6e 65  ADSAFE.#  define
1ca0: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 35   _XOPEN_SOURCE 5
1cb0: 30 30 20 20 2f 2a 20 4e 65 65 64 65 64 20 74 6f  00  /* Needed to
1cc0: 20 65 6e 61 62 6c 65 20 70 74 68 72 65 61 64 20   enable pthread 
1cd0: 72 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65  recursive mutexe
1ce0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  s */.#endif../*.
1cf0: 2a 2a 20 54 68 65 20 54 43 4c 20 68 65 61 64 65  ** The TCL heade
1d00: 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e 65 65 64  rs are only need
1d10: 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
1d20: 67 20 74 68 65 20 54 43 4c 20 62 69 6e 64 69 6e  g the TCL bindin
1d30: 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  gs..*/.#if defin
1d40: 65 64 28 53 51 4c 49 54 45 5f 54 43 4c 29 20 7c  ed(SQLITE_TCL) |
1d50: 7c 20 64 65 66 69 6e 65 64 28 54 43 4c 53 48 29  | defined(TCLSH)
1d60: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74 63 6c 2e  .# include <tcl.
1d70: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1d80: 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49   NDEBUG and SQLI
1d90: 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70  TE_DEBUG are opp
1da0: 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75  osites.  It shou
1db0: 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75  ld always be tru
1dc0: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
1dd0: 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69  d(NDEBUG)==!defi
1de0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1df0: 29 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e  ).  If this is n
1e00: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75  ot currently tru
1e10: 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72  e,.** make it tr
1e20: 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f  ue by defining o
1e30: 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45  r undefining NDE
1e40: 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69  BUG..**.** Setti
1e50: 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20  ng NDEBUG makes 
1e60: 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72  the code smaller
1e70: 20 61 6e 64 20 72 75 6e 20 66 61 73 74 65 72 20   and run faster 
1e80: 62 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65  by disabling the
1e90: 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73 73 65 72  .** number asser
1ea0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
1eb0: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
1ec0: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
1ed0: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
1ee0: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
1ef0: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
1f00: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
1f10: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
1f20: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
1f30: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
1f40: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
1f50: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
1f60: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
1f70: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
1f80: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
1f90: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1fa0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
1fb0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
1fc0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
1fd0: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
1fe0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
1ff0: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2000: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2010: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
2020: 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64 20   is used to aid 
2030: 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  in coverage test
2040: 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64  ing.  When .** d
2050: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
2060: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
2070: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
2080: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
2090: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
20a0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
20b0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
20c0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
20d0: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
20e0: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
20f0: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
2100: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
2110: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
2120: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
2130: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
2140: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
2150: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
2160: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
2170: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
2180: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
2190: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
21a0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
21b0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
21c0: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
21d0: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
21e0: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
21f0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
2200: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
2210: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
2220: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
2230: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
2240: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
2250: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
2260: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
2270: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
2280: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
2290: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
22a0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
22b0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
22c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
22d0: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
22e0: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
22f0: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
2300: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
2310: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
2320: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
2330: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
2340: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
2350: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2360: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
2370: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
2380: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
2390: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
23a0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
23b0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
23c0: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
23d0: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
23e0: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
23f0: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
2400: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
2410: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
2420: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2430: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
2440: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2450: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2460: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
2470: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2480: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
2490: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
24a0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
24b0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
24c0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
24d0: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
24e0: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
24f0: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
2500: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
2510: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
2520: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
2530: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
2540: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
2550: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
2560: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
2570: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
2580: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
2590: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
25a0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
25b0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
25c0: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
25d0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
25e0: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
25f0: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
2600: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
2610: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
2620: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
2630: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
2640: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2650: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
2660: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
2670: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2680: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
2690: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
26a0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
26b0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a  essions which .*
26c0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
26d0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
26e0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
26f0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
2700: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
2710: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
2720: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
2730: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
2740: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
2750: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
2760: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2770: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
2780: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
2790: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
27a0: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
27b0: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
27c0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
27d0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
27e0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
27f0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
2800: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
2810: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
2820: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
2830: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
2840: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
2850: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
2860: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
2870: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
2880: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
2890: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
28a0: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
28b0: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
28c0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
28d0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
28e0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 6e  chable code then
28f0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
2900: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
2910: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
2920: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2930: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2940: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2950: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
2960: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
2970: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
2980: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
2990: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
29a0: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
29b0: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
29c0: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
29d0: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
29e0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
29f0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
2a00: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2a10: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
2a20: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
2a30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
2a40: 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a  turn true (non-z
2a50: 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75  ero) if the inpu
2a60: 74 20 69 73 20 61 20 69 6e 74 65 67 65 72 20 74  t is a integer t
2a70: 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  hat is too large
2a80: 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32  .** to fit in 32
2a90: 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63  -bits.  This mac
2aa0: 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64  ro is used insid
2ab0: 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73  e of various tes
2ac0: 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f  tcase().** macro
2ad0: 73 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  s to verify that
2ae0: 20 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20   we have tested 
2af0: 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65  SQLite for large
2b00: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a  -file support..*
2b10: 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47  /.#define IS_BIG
2b20: 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e  _INT(X)  (((X)&~
2b30: 28 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (i64)0xffffffff)
2b40: 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  !=0)../*.** The 
2b50: 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29  macro unlikely()
2b60: 20 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20   is a hint that 
2b70: 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c  surrounds a bool
2b80: 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  ean.** expressio
2b90: 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c  n that is usuall
2ba0: 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20  y false.  Macro 
2bb0: 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e  likely() surroun
2bc0: 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20  ds.** a boolean 
2bd0: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
2be0: 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
2bf0: 20 20 47 43 43 20 69 73 20 61 62 6c 65 20 74 6f    GCC is able to
2c00: 0a 2a 2a 20 75 73 65 20 74 68 65 73 65 20 68 69  .** use these hi
2c10: 6e 74 73 20 74 6f 20 67 65 6e 65 72 61 74 65 20  nts to generate 
2c20: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 73 6f 6d  better code, som
2c30: 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69 66 20 64  etimes..*/.#if d
2c40: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2c50: 20 26 26 20 30 0a 23 20 64 65 66 69 6e 65 20 6c   && 0.# define l
2c60: 69 6b 65 6c 79 28 58 29 20 20 20 20 5f 5f 62 75  ikely(X)    __bu
2c70: 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29  iltin_expect((X)
2c80: 2c 31 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c  ,1).# define unl
2c90: 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62 75 69 6c  ikely(X)  __buil
2ca0: 74 69 6e 5f 65 78 70 65 63 74 28 28 58 29 2c 30  tin_expect((X),0
2cb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
2cc0: 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 21 21   likely(X)    !!
2cd0: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 75 6e 6c  (X).# define unl
2ce0: 69 6b 65 6c 79 28 58 29 20 20 21 21 28 58 29 0a  ikely(X)  !!(X).
2cf0: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65  #endif..#include
2d00: 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 23 69 6e   "sqlite3.h".#in
2d10: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
2d20: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
2d30: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
2d40: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
2d50: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
2d60: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
2d70: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
2d80: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
2d90: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
2da0: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
2db0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
2dc0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
2dd0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
2de0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
2df0: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
2e00: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
2e10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
2e20: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
2e30: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
2e40: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
2e50: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
2e60: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
2e70: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
2e80: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
2e90: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
2ea0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
2eb0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
2ec0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
2ed0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
2ee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2ef0: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
2f00: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
2f10: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
2f20: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
2f30: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
2f40: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
2f50: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
2f60: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2f70: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
2f80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
2f90: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
2fa0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
2fb0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
2fc0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
2fd0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
2fe0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
2ff0: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
3000: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
3010: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
3020: 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a  e C compiler .**
3030: 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73   to omit code us
3040: 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65  ed by TEMP table
3050: 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20  s without messy 
3060: 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e  #ifndef statemen
3070: 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ts..*/.#ifdef SQ
3080: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
3090: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
30a0: 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65  MPDB 1.#else.#de
30b0: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
30c0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
30d0: 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61   The "file forma
30e0: 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20  t" number is an 
30f0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
3100: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
3110: 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45  ever.** the VDBE
3120: 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d  -level file form
3130: 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65  at changes.  The
3140: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
3150: 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20  s define the.** 
3160: 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65  the default file
3170: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20   format for new 
3180: 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68  databases and th
3190: 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66  e maximum file f
31a0: 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68  ormat.** that th
31b0: 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65  e library can re
31c0: 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ad..*/.#define S
31d0: 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46  QLITE_MAX_FILE_F
31e0: 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20  ORMAT 4.#ifndef 
31f0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
3200: 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66  ILE_FORMAT.# def
3210: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
3220: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  LT_FILE_FORMAT 4
3230: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
3240: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3250: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65   triggers are re
3260: 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75  cursive by defau
3270: 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  lt.  This can be
3280: 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72  .** changed at r
3290: 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20  un-time using a 
32a0: 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64  pragma..*/.#ifnd
32b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
32c0: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
32d0: 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51  GERS.# define SQ
32e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
32f0: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20  URSIVE_TRIGGERS 
3300: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3310: 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c  Provide a defaul
3320: 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49  t value for SQLI
3330: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e  TE_TEMP_STORE in
3340: 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20   case it is not 
3350: 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20  specified.** on 
3360: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
3370: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3380: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20  TE_TEMP_STORE.# 
3390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
33a0: 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69  MP_STORE 1.#endi
33b0: 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65  f../*.** GCC doe
33c0: 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65  s not define the
33d0: 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72   offsetof() macr
33e0: 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20  o so we'll have 
33f0: 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73  to do it.** ours
3400: 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  elves..*/.#ifnde
3410: 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69  f offsetof.#defi
3420: 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55  ne offsetof(STRU
3430: 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69  CTURE,FIELD) ((i
3440: 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54  nt)((char*)&((ST
3450: 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45  RUCTURE*)0)->FIE
3460: 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  LD)).#endif../*.
3470: 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  ** Check to see 
3480: 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20  if this machine 
3490: 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59  uses EBCDIC.  (Y
34a0: 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f  es, believe it o
34b0: 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20  r.** not, there 
34c0: 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e  are still machin
34d0: 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61  es out there tha
34e0: 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a  t use EBCDIC.).*
34f0: 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33  /.#if 'A' == '\3
3500: 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  01'.# define SQL
3510: 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c  ITE_EBCDIC 1.#el
3520: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
3530: 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69  TE_ASCII 1.#endi
3540: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72  f../*.** Integer
3550: 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73  s of known sizes
3560: 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66  .  These typedef
3570: 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  s might change f
3580: 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73  or architectures
3590: 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69  .** where the si
35a0: 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72  zes very.  Prepr
35b0: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61  ocessor macros a
35c0: 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20  re available so 
35d0: 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65  that the.** type
35e0: 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69  s can be conveni
35f0: 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20  ently redefined 
3600: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e  at compile-type.
3610: 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a    Like this:.**.
3620: 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d  **         cc '-
3630: 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f  DUINTPTR_TYPE=lo
3640: 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e  ng long int' ...
3650: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  .*/.#ifndef UINT
3660: 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  32_TYPE.# ifdef 
3670: 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20  HAVE_UINT32_T.# 
3680: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
3690: 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65  YPE uint32_t.# e
36a0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
36b0: 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT32_TYPE unsign
36c0: 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  ed int.# endif.#
36d0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
36e0: 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65  NT16_TYPE.# ifde
36f0: 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a  f HAVE_UINT16_T.
3700: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
3710: 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23  _TYPE uint16_t.#
3720: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
3730: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69  UINT16_TYPE unsi
3740: 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23  gned short int.#
3750: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
3760: 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  fndef INT16_TYPE
3770: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e  .# ifdef HAVE_IN
3780: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
3790: 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36  INT16_TYPE int16
37a0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
37b0: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73  ine INT16_TYPE s
37c0: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
37d0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
37e0: 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64  UINT8_TYPE.# ifd
37f0: 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a  ef HAVE_UINT8_T.
3800: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
3810: 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65  TYPE uint8_t.# e
3820: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
3830: 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  NT8_TYPE unsigne
3840: 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23  d char.# endif.#
3850: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
3860: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
3870: 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64  HAVE_INT8_T.#  d
3880: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
3890: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
38a0: 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50   define INT8_TYP
38b0: 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  E signed char.# 
38c0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
38d0: 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  ndef LONGDOUBLE_
38e0: 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f  TYPE.# define LO
38f0: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f  NGDOUBLE_TYPE lo
3900: 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66  ng double.#endif
3910: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
3920: 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20  int64 i64;      
3930: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69      /* 8-byte si
3940: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
3950: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75  typedef sqlite_u
3960: 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20  int64 u64;      
3970: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73     /* 8-byte uns
3980: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3990: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f  .typedef UINT32_
39a0: 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20  TYPE u32;       
39b0: 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e      /* 4-byte un
39c0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
39d0: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36  /.typedef UINT16
39e0: 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20  _TYPE u16;      
39f0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75       /* 2-byte u
3a00: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
3a10: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
3a20: 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20  _TYPE i16;      
3a30: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
3a40: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3a50: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f  /.typedef UINT8_
3a60: 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20  TYPE u8;        
3a70: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75       /* 1-byte u
3a80: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
3a90: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f  */.typedef INT8_
3aa0: 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20  TYPE i8;        
3ab0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
3ac0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3ad0: 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  /../*.** SQLITE_
3ae0: 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34  MAX_U32 is a u64
3af0: 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69   constant that i
3b00: 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36  s the maximum u6
3b10: 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20  4 value.** that 
3b20: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e  can be stored in
3b30: 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c   a u32 without l
3b40: 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68  oss of data.  Th
3b50: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78  e value.** is 0x
3b60: 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66  00000000ffffffff
3b70: 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f  .  But because o
3b80: 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65  f quirks of some
3b90: 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a   compilers, we.*
3ba0: 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66  * have to specif
3bb0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74  y the value in t
3bc0: 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76  he less intuitiv
3bd0: 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a  e manner shown:.
3be0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
3bf0: 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75  E_MAX_U32  ((((u
3c00: 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f  64)1)<<32)-1)../
3c10: 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
3c20: 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
3c30: 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65  estimates of the
3c40: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
3c50: 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72  in a.** table or
3c60: 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73   index.  This is
3c70: 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74   an unsigned int
3c80: 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20  eger type.  For 
3c90: 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20  99.9% of.** the 
3ca0: 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20  world, a 32-bit 
3cb0: 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69  integer is suffi
3cc0: 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34  cient.  But a 64
3cd0: 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
3ce0: 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63  can be used at c
3cf0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64  ompile-time if d
3d00: 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  esired..*/.#ifde
3d10: 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53  f SQLITE_64BIT_S
3d20: 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36  TATS. typedef u6
3d30: 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a  4 tRowcnt;    /*
3d40: 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20   64-bit only if 
3d50: 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d  requested at com
3d60: 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c  pile-time */.#el
3d70: 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20  se. typedef u32 
3d80: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33  tRowcnt;    /* 3
3d90: 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66  2-bit is the def
3da0: 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  ault */.#endif..
3db0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
3dc0: 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
3dd0: 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73  r the machine is
3de0: 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65   big or little e
3df0: 6e 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61  ndian,.** evalua
3e00: 74 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  ted at runtime..
3e10: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
3e20: 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f  _AMALGAMATION.co
3e30: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
3e40: 6e 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78  ne = 1;.#else.ex
3e50: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
3e60: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69  qlite3one;.#endi
3e70: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69 33  f.#if defined(i3
3e80: 38 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  86) || defined(_
3e90: 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69  _i386__) || defi
3ea0: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20  ned(_M_IX86)\.  
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ec0: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65             || de
3ed0: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20  fined(__x86_64) 
3ee0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
3ef0: 5f 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20  _64__).# define 
3f00: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
3f10: 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53      0.# define S
3f20: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
3f30: 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 1.# define SQ
3f40: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
3f50: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45    SQLITE_UTF16LE
3f60: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3f70: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
3f80: 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26      (*(char *)(&
3f90: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a  sqlite3one)==0).
3fa0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3fb0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28  LITTLEENDIAN (*(
3fc0: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
3fd0: 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e  one)==1).# defin
3fe0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
3ff0: 54 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47  TIVE (SQLITE_BIG
4000: 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54  ENDIAN?SQLITE_UT
4010: 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46  F16BE:SQLITE_UTF
4020: 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  16LE).#endif../*
4030: 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f  .** Constants fo
4040: 72 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e  r the largest an
4050: 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69  d smallest possi
4060: 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65  ble 64-bit signe
4070: 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54  d integers..** T
4080: 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20  hese macros are 
4090: 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b  designed to work
40a0: 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f   correctly on bo
40b0: 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34  th 32-bit and 64
40c0: 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72  -bit.** compiler
40d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41  s..*/.#define LA
40e0: 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78  RGEST_INT64  (0x
40f0: 66 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29  ffffffff|(((i64)
4100: 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
4110: 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45  ).#define SMALLE
4120: 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29  ST_INT64 (((i64)
4130: 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e  -1) - LARGEST_IN
4140: 54 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75  T64)../* .** Rou
4150: 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74  nd up a number t
4160: 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65  o the next large
4170: 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e  r multiple of 8.
4180: 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a    This is used.*
4190: 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74  * to force 8-byt
41a0: 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36  e alignment on 6
41b0: 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75  4-bit architectu
41c0: 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
41d0: 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28  ROUND8(x)     ((
41e0: 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  (x)+7)&~7)../*.*
41f0: 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20  * Round down to 
4200: 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74  the nearest mult
4210: 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65  iple of 8.*/.#de
4220: 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28  fine ROUNDDOWN8(
4230: 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a  x) ((x)&~7)../*.
4240: 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  ** Assert that t
4250: 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20  he pointer X is 
4260: 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d  aligned to an 8-
4270: 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20  byte boundary.  
4280: 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73  This.** macro is
4290: 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69   used only withi
42a0: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65  n assert() to ve
42b0: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f  rify that the co
42c0: 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61  de gets.** all a
42d0: 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63  lignment restric
42e0: 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a  tions correct..*
42f0: 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20  *.** Except, if 
4300: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4310: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20  IGNED_MALLOC is 
4320: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68  defined, then th
4330: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
4340: 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65  malloc() impleme
4350: 6e 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75  ntion might retu
4360: 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69  rn us 4-byte ali
4370: 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73  gned.** pointers
4380: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
4390: 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62   only verify 4-b
43a0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a  yte alignment..*
43b0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
43c0: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
43d0: 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45  ALLOC.# define E
43e0: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
43f0: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
4400: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
4410: 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  0)&3)==0).#else.
4420: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
4430: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
4440: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
4450: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d   - (char*)0)&7)=
4460: 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  =0).#endif.../*.
4470: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
4480: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
4490: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
44a0: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
44b0: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
44c0: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
44d0: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
44e0: 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71  e. .**.** The sq
44f0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
4500: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73   member of the s
4510: 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e  qlite struct con
4520: 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a  tains the busy.*
4530: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  * callback for t
4540: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
4550: 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f  le. Each pager o
4560: 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71  pened via the sq
4570: 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69  lite.** handle i
4580: 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74  s passed a point
4590: 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73  er to sqlite.bus
45a0: 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75  yHandler. The bu
45b0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
45c0: 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e  llback is curren
45d0: 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79  tly invoked only
45e0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67   from within pag
45f0: 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  er.c..*/.typedef
4600: 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64   struct BusyHand
4610: 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b  ler BusyHandler;
4620: 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64  .struct BusyHand
4630: 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46  ler {.  int (*xF
4640: 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29  unc)(void *,int)
4650: 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63  ;  /* The busy c
4660: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
4670: 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20  d *pArg;        
4680: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
4690: 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c   arg to busy cal
46a0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
46b0: 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  Busy;           
46c0: 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65        /* Increme
46d0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62  nted with each b
46e0: 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a  usy call */.};..
46f0: 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68  /*.** Name of th
4700: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
4710: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61  e table.  The ma
4720: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
4730: 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63  ble.** is a spec
4740: 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68  ial table that h
4750: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61  olds the names a
4760: 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66  nd attributes of
4770: 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62   all.** user tab
4780: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e  les and indices.
4790: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
47a0: 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73  ER_NAME       "s
47b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64  qlite_master".#d
47c0: 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45  efine TEMP_MASTE
47d0: 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f  R_NAME  "sqlite_
47e0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a  temp_master"../*
47f0: 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67  .** The root-pag
4800: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
4810: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a  database table..
4820: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
4830: 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a  R_ROOT       1..
4840: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f  /*.** The name o
4850: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  f the schema tab
4860: 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  le..*/.#define S
4870: 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20  CHEMA_TABLE(x)  
4880: 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26  ((!OMIT_TEMPDB)&
4890: 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53  &(x==1)?TEMP_MAS
48a0: 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f  TER_NAME:MASTER_
48b0: 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63  NAME)../*.** A c
48c0: 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f  onvenience macro
48d0: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
48e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  e number of elem
48f0: 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72  ents in.** an ar
4900: 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ray..*/.#define 
4910: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20  ArraySize(X)    
4920: 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29  ((int)(sizeof(X)
4930: 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a  /sizeof(X[0]))).
4940: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
4950: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
4960: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
4970: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
4980: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
4990: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
49a0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
49b0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
49c0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
49d0: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
49e0: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
49f0: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
4a00: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
4a10: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
4a20: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
4a30: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
4a40: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
4a50: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
4a60: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
4a70: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
4a80: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
4a90: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
4aa0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
4ab0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
4ac0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
4ad0: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
4ae0: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
4af0: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
4b00: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
4b10: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
4b20: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
4b30: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
4b40: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
4b50: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
4b60: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
4b70: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
4b80: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
4b90: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
4ba0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
4bb0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
4bc0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
4bd0: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
4be0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
4bf0: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
4c00: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
4c10: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
4c20: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
4c30: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
4c40: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
4c50: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
4c60: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
4c70: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
4c80: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
4c90: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
4ca0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
4cb0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
4cc0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
4cd0: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
4ce0: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
4cf0: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
4d00: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
4d10: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
4d20: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
4d30: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
4d40: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
4d50: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
4d60: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
4d70: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
4d80: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
4d90: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
4da0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
4db0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
4dc0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
4dd0: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
4de0: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
4df0: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
4e00: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
4e10: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
4e20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
4e30: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
4e40: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
4e50: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
4e60: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
4e70: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
4e80: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
4e90: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
4ea0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
4eb0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
4ec0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
4ed0: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
4ee0: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
4ef0: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
4f00: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
4f10: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
4f20: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
4f30: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
4f40: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
4f50: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
4f60: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
4f70: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
4f80: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
4f90: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
4fa0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
4fb0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
4fc0: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
4fd0: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
4fe0: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
4ff0: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
5000: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
5010: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
5020: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
5030: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
5040: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5050: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
5060: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
5070: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
5080: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
5090: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
50a0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
50b0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
50c0: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
50d0: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
50e0: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
50f0: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
5100: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
5110: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
5120: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
5130: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
5140: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
5150: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
5160: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
5170: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
5180: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
5190: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
51a0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
51b0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
51c0: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
51d0: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
51e0: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
51f0: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
5200: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
5210: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
5220: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
5230: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
5240: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
5250: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
5260: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
5270: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
5280: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
5290: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
52a0: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
52b0: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
52c0: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
52d0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
52e0: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
52f0: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
5300: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
5310: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
5320: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
5330: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
5340: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
5350: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
5360: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
5370: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
5380: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
5390: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
53a0: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
53b0: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
53c0: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
53d0: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
53e0: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
53f0: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
5400: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
5410: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5420: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
5430: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
5440: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
5450: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
5460: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
5470: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
5480: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
5490: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
54a0: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
54b0: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
54c0: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
54d0: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
54e0: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
54f0: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
5500: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5510: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
5520: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
5530: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
5540: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5550: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
5560: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
5570: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
5580: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
5590: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
55a0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
55b0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
55c0: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
55d0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
55e0: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
55f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5600: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
5610: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
5620: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
5630: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
5640: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
5650: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
5660: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
5670: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
5680: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
5690: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
56a0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
56b0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
56c0: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
56d0: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
56e0: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
56f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5700: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
5710: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
5720: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
5730: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
5740: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
5750: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
5760: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
5770: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
5780: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
5790: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
57a0: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
57b0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
57c0: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
57d0: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
57e0: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
57f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5800: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
5810: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
5820: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
5830: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5840: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
5850: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5860: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
5870: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
5880: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
5890: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
58a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
58b0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
58c0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
58d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
58e0: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
58f0: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
5900: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
5910: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
5920: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
5930: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 50 6c  f struct WherePl
5940: 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a 74 79  an WherePlan;.ty
5950: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
5960: 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f  reInfo WhereInfo
5970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5980: 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68 65 72   WhereLevel Wher
5990: 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20 44  eLevel;../*.** D
59a0: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
59b0: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
59c0: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
59d0: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
59e0: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
59f0: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
5a00: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
5a10: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
5a20: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
5a30: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
5a40: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
5a50: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
5a60: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
5a70: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
5a80: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
5a90: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
5aa0: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
5ab0: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
5ac0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
5ad0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
5ae0: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
5af0: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
5b00: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
5b10: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
5b20: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
5b30: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
5b40: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
5b50: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
5b60: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
5b70: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
5b80: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
5b90: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
5ba0: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
5bb0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
5bc0: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
5bd0: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
5be0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
5bf0: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
5c00: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
5c10: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
5c20: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
5c30: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
5c40: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
5c50: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
5c60: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
5c70: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
5c80: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 69  e file */.  u8 i
5c90: 6e 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  nTrans;         
5ca0: 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72 69 74 61   /* 0: not writa
5cb0: 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e 73 61 63  ble.  1: Transac
5cc0: 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65 63 6b 70  tion.  2: Checkp
5cd0: 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20 73 61 66  oint */.  u8 saf
5ce0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
5cf0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
5d00: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
5d10: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63   to disk */.  Sc
5d20: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
5d30: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
5d40: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
5d50: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
5d60: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
5d70: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
5d80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
5d90: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
5da0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
5db0: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
5dc0: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
5dd0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
5de0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
5df0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
5e00: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
5e10: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
5e20: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
5e30: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
5e40: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
5e50: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
5e60: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
5e70: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
5e80: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
5e90: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
5ea0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
5eb0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
5ec0: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
5ed0: 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65   .** Schema obje
5ee0: 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  cts are automati
5ef0: 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65  cally deallocate
5f00: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
5f10: 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65  Btree that.** re
5f20: 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73  ferences them is
5f30: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68   destroyed.   Th
5f40: 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73  e TEMP Schema is
5f50: 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20   manually freed 
5f60: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  by.** sqlite3_cl
5f70: 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68  ose()..*.** A th
5f80: 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c  read must be hol
5f90: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
5fa0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
5fb0: 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72  g Btree in order
5fc0: 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63  .** to access Sc
5fd0: 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54  hema content.  T
5fe0: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
5ff0: 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74   the thread must
6000: 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64   also be.** hold
6010: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
6020: 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65  he sqlite3 conne
6030: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68  ction pointer th
6040: 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65  at owns the Btre
6050: 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50  e..** For a TEMP
6060: 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68   Schema, only th
6070: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  e connection mut
6080: 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  ex is required..
6090: 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61  */.struct Schema
60a0: 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f   {.  int schema_
60b0: 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74  cookie;   /* Dat
60c0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72  abase schema ver
60d0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
60e0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
60f0: 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20  nt iGeneration; 
6100: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f      /* Generatio
6110: 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72  n counter.  Incr
6120: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
6130: 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61  h change */.  Ha
6140: 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20  sh tblHash;     
6150: 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73     /* All tables
6160: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
6170: 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61   */.  Hash idxHa
6180: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
6190: 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65  l (named) indice
61a0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
61b0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67  e */.  Hash trig
61c0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
61d0: 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65  ll triggers inde
61e0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
61f0: 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20   Hash fkeyHash; 
6200: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72        /* All for
6210: 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66  eign keys by ref
6220: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61  erenced table na
6230: 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  me */.  Table *p
6240: 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20  SeqTab;      /* 
6250: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
6260: 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  nce table used b
6270: 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  y AUTOINCREMENT 
6280: 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72  */.  u8 file_for
6290: 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68  mat;      /* Sch
62a0: 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ema format versi
62b0: 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  on for this file
62c0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
62d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
62e0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
62f0: 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73   by this databas
6300: 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  e */.  u16 flags
6310: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
6320: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
6330: 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61  with this schema
6340: 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f   */.  int cache_
6350: 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75  size;      /* Nu
6360: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
6370: 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68   use in the cach
6380: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  e */.};../*.** T
6390: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
63a0: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
63b0: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
63c0: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44  its in the .** D
63d0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
63e0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
63f0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
6400: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
6410: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6420: 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28  a->flags&(P))==(
6430: 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61  P)).#define DbHa
6440: 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49  sAnyProperty(D,I
6450: 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b  ,P)  (((D)->aDb[
6460: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  I].pSchema->flag
6470: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
6480: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
6490: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
64a0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
64b0: 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
64c0: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
64d0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
64e0: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
64f0: 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
6500: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
6510: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
6520: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
6530: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
6540: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
6550: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
6560: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
6570: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
6580: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
6590: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
65a0: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
65b0: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
65c0: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
65d0: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
65e0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
65f0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
6600: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
6610: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
6620: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
6630: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
6640: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
6650: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
6660: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
6670: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
6680: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
6690: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
66a0: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
66b0: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
66c0: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
66d0: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
66e0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
66f0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
6700: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
6710: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
6720: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
6730: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
6740: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
6750: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
6760: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
6770: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
6780: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
6790: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
67a0: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
67b0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
67c0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
67d0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
67e0: 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a  ER_DEPTH+1)../*.
67f0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
6800: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
6810: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
6820: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
6830: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
6840: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
6850: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
6860: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
6870: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
6880: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
6890: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
68a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
68b0: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
68c0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
68d0: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
68e0: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
68f0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
6900: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
6910: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
6920: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
6930: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
6940: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
6950: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
6960: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
6970: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
6980: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
6990: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
69a0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
69b0: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
69c0: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
69d0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
69e0: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
69f0: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
6a00: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
6a10: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
6a20: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
6a30: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
6a40: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
6a50: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
6a60: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
6a70: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
6a80: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
6a90: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
6aa0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
6ab0: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
6ac0: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
6ad0: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
6ae0: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
6af0: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
6b00: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
6b10: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
6b20: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
6b30: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
6b40: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
6b50: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
6b60: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
6b70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
6b80: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
6b90: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
6ba0: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
6bb0: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
6bc0: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
6bd0: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
6be0: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
6bf0: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
6c00: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20  okaside {.  u16 
6c10: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
6c20: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
6c30: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
6c40: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61  tes */.  u8 bEna
6c50: 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
6c60: 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73   /* False to dis
6c70: 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69  able new lookasi
6c80: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  de allocations *
6c90: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
6ca0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
6cb0: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
6cc0: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
6cd0: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
6ce0: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20    int nOut;     
6cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6d00: 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63  ber of buffers c
6d10: 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
6d20: 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78   out */.  int mx
6d30: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
6d40: 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d    /* Highwater m
6d50: 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a  ark for nOut */.
6d60: 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b    int anStat[3];
6d70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20            /* 0: 
6d80: 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d  hits.  1: size m
6d90: 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20  isses.  2: full 
6da0: 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b  misses */.  Look
6db0: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
6dc0: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
6dd0: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
6de0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
6df0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
6e00: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
6e10: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
6e20: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
6e30: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
6e40: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
6e50: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
6e60: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
6e70: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
6e80: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
6e90: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
6ea0: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
6eb0: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
6ec0: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
6ed0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
6ee0: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
6ef0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
6f00: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  ns..**.** Hash e
6f10: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
6f20: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
6f30: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
6f40: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
6f50: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
6f60: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48  n the FuncDef.pH
6f70: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74  ash chain..*/.st
6f80: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
6f90: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
6fa0: 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  23];       /* Ha
6fb0: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
6fc0: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ctions */.};../*
6fd0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
6fe0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
6ff0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
7000: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7010: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
7020: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
7030: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
7040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
7050: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
7060: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
7070: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
7080: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
7090: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
70a0: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
70b0: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
70c0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
70d0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
70e0: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
70f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
7100: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
7110: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
7120: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
7130: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
7140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
7150: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
7160: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7180: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
7190: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
71a0: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
71b0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
71c0: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
71d0: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
71e0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
71f0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
7200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
7210: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
7220: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
7230: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 75 6e 73 69  above) */.  unsi
7240: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
7250: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
7260: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
7270: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
7280: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
7290: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
72a0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
72b0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
72c0: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
72d0: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
72f0: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
7300: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
7310: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
7320: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
7330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
7340: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
7350: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
7360: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74  ions */.  u8 aut
7370: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
7380: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
7390: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
73a0: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
73b0: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
73c0: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
73d0: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
73e0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
73f0: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
7400: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
7410: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
7420: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
7430: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
7440: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
7450: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
7460: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
7470: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
7480: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
7490: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
74a0: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
74b0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
74c0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
74d0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
74e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
74f0: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
7500: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
7510: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
7520: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
7530: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
7540: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
7550: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
7560: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
7570: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
7580: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
7590: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
75a0: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
75b0: 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73  .  int nextPages
75c0: 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ize;            
75d0: 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74   /* Pagesize aft
75e0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20  er VACUUM if >0 
75f0: 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20  */.  u32 magic; 
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7610: 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62     /* Magic numb
7620: 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69  er for detect li
7630: 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a  brary misuse */.
7640: 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20    int nChange;  
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7660: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
7670: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61  d by sqlite3_cha
7680: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
7690: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20  nTotalChange;   
76a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
76b0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
76c0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
76d0: 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20  nges() */.  int 
76e0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f  aLimit[SQLITE_N_
76f0: 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d  LIMIT];   /* Lim
7700: 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  its */.  struct 
7710: 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20  sqlite3InitInfo 
7720: 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  {      /* Inform
7730: 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e  ation used durin
7740: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
7750: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54   */.    int newT
7760: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
7770: 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20      /* Rootpage 
7780: 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  of table being i
7790: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
77a0: 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20 20    u8 iDb;       
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
77c0: 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20 69   Which db file i
77d0: 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  s being initiali
77e0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75  zed */.    u8 bu
77f0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
7800: 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69         /* TRUE i
7810: 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74  f currently init
7820: 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20  ializing */.    
7830: 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72  u8 orphanTrigger
7840: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
7850: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ast statement is
7860: 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74   orphaned TEMP t
7870: 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e  rigger */.  } in
7880: 69 74 3b 0a 20 20 69 6e 74 20 61 63 74 69 76 65  it;.  int active
7890: 56 64 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20  VdbeCnt;        
78a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
78b0: 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79   VDBEs currently
78c0: 20 65 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20   executing */.  
78d0: 69 6e 74 20 77 72 69 74 65 56 64 62 65 43 6e 74  int writeVdbeCnt
78e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
78f0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
7900: 65 20 56 44 42 45 73 20 74 68 61 74 20 61 72 65  e VDBEs that are
7910: 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69 6e   writing */.  in
7920: 74 20 76 64 62 65 45 78 65 63 43 6e 74 3b 20 20  t vdbeExecCnt;  
7930: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7940: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
7950: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
7960: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78  c() */.  int nEx
7970: 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  tension;        
7980: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7990: 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e   of loaded exten
79a0: 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20  sions */.  void 
79b0: 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  **aExtension;   
79c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
79d0: 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72  y of shared libr
79e0: 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20  ary handles */. 
79f0: 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28   void (*xTrace)(
7a00: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
7a10: 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72  *);        /* Tr
7a20: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ace function */.
7a30: 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72    void *pTraceAr
7a40: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
7a60: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74  rgument to the t
7a70: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
7a80: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69  .  void (*xProfi
7a90: 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  le)(void*,const 
7aa0: 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20  char*,u64);  /* 
7ab0: 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69  Profiling functi
7ac0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  on */.  void *pP
7ad0: 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20  rofileArg;      
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7af0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
7b00: 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f   profile functio
7b10: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f  n */.  void *pCo
7b20: 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20 20  mmitArg;        
7b30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
7b40: 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43  ment to xCommitC
7b50: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a  allback() */   .
7b60: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
7b70: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
7b80: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
7b90: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
7ba0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
7bb0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
7bc0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7bd0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
7be0: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a  allback() */   .
7bf0: 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61    void (*xRollba
7c00: 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  ckCallback)(void
7c10: 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61  *); /* Invoked a
7c20: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
7c30: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61  */.  void *pUpda
7c40: 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a  teArg;.  void (*
7c50: 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
7c60: 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
7c70: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
7c80: 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34  ar*,sqlite_int64
7c90: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
7ca0: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
7cb0: 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29   (*xWalCallback)
7cc0: 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33  (void *, sqlite3
7cd0: 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
7ce0: 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
7cf0: 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a  pWalArg;.#endif.
7d00: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
7d10: 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  ded)(void*,sqlit
7d20: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
7d30: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
7d40: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
7d50: 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69  ed16)(void*,sqli
7d60: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
7d70: 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  p,const void*);.
7d80: 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65    void *pCollNee
7d90: 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65  dedArg;.  sqlite
7da0: 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20  3_value *pErr;  
7db0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7dc0: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
7dd0: 73 61 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  sage */.  char *
7de0: 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20  zErrMsg;        
7df0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7e00: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
7e10: 73 61 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f  sage (UTF-8 enco
7e20: 64 65 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ded) */.  char *
7e30: 7a 45 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20  zErrMsg16;      
7e40: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
7e50: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73  recent error mes
7e60: 73 61 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63  sage (UTF-16 enc
7e70: 6f 64 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e  oded) */.  union
7e80: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
7e90: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
7ea0: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
7eb0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
7ec0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
7ed0: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
7ee0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
7ef0: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
7f00: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
7f10: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
7f20: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
7f30: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
7f40: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
7f50: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7f60: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
7f70: 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f   int (*xAuth)(vo
7f80: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
7f90: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
7fa0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
7fb0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20  t char*);.      
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
7fe0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
7ff0: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
8000: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
8010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8020: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
8030: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
8040: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
8050: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
8060: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
8070: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
8080: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
8090: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
80a0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
80b0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
80c0: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
80d0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
80e0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
80f0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
8100: 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  int nProgressOps
8110: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
8120: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
8130: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
8140: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
8150: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
8160: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
8170: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
8180: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
8190: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
81a0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
81b0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
81c0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
81d0: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
81e0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
81f0: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
8200: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
8210: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
8220: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
8230: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
8240: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
8250: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
8260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
8270: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
8280: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
8290: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
82a0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
82b0: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
82c0: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
82d0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
82e0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63  */.#endif.  Func
82f0: 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20  DefHash aFunc;  
8300: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
8310: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
8320: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
8330: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
8340: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
8350: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
8360: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
8370: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
8380: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
8390: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
83a0: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
83b0: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
83c0: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
83d0: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
83e0: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
83f0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
8400: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
8410: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
8420: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
8430: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
8440: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
8450: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
8460: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
8470: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
8480: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
8490: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
84a0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
84b0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
84c0: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
84d0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
84e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
84f0: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
8500: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
8510: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
8520: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
8530: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
8540: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
8550: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
8560: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
8570: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
8580: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
8590: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
85a0: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
85b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
85c0: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
85d0: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
85e0: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
85f0: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
8600: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
8610: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
8620: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
8630: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
8640: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
8650: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
8660: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
8670: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
8680: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
8690: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
86a0: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
86b0: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
86c0: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
86d0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
86e0: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
86f0: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
8700: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
8710: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
8720: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
8730: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
8740: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
8750: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
8760: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
8770: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
8780: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
8790: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
87a0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
87b0: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
87c0: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
87d0: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
87e0: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
87f0: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
8800: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
8810: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
8820: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8840: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
8850: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
8860: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
8870: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
8880: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
8890: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
88a0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
88b0: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
88c0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
88d0: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
88e0: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
88f0: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
8900: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
8910: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
8920: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
8930: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e  e..*/.#define EN
8940: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
8950: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
8960: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
8970: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
8980: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
8990: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
89a0: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
89b0: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
89c0: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
89d0: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
89e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
89f0: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
8a00: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
8a10: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
8a20: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
8a30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
8a40: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
8a50: 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77  0000004  /* Show
8a60: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
8a70: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
8a80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
8a90: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
8aa0: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 53 68 6f  00000008  /* Sho
8ab0: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
8ac0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
8ad0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
8ae0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 31  s      0x0000001
8af0: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
8b00: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
8b10: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
8b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b40: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
8b50: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
8b60: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b90: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
8ba0: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
8bb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8bc0: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
8bd0: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
8be0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
8bf0: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
8c00: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8c30: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
8c40: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
8c50: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
8c60: 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30  e       0x000000
8c70: 34 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  40  /* Debug pri
8c80: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
8c90: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
8ca0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
8cb0: 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 30 38  ing    0x0000008
8cc0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
8cd0: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
8ce0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
8cf0: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
8d00: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 31 30  ema    0x0000010
8d10: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  0  /* OK to upda
8d20: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
8d30: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8d50: 20 20 30 78 30 30 30 30 30 32 30 30 20 20 55 6e    0x00000200  Un
8d60: 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
8d70: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
8d80: 63 6b 73 20 20 20 30 78 30 30 30 30 30 34 30 30  cks   0x00000400
8d90: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
8da0: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
8db0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
8dc0: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
8dd0: 6d 6d 69 74 74 65 64 20 30 78 30 30 30 30 38 30  mmitted 0x000080
8de0: 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64  0  /* For shared
8df0: 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
8e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
8e10: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
8e20: 30 30 30 31 30 30 30 20 20 2f 2a 20 43 72 65 61  0001000  /* Crea
8e30: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
8e40: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
8e50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
8e60: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
8e70: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 55 73 65  00002000  /* Use
8e80: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
8e90: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
8ea0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
8eb0: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
8ec0: 30 30 34 30 30 30 20 20 2f 2a 20 55 73 65 20 66  004000  /* Use f
8ed0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
8ee0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
8ef0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76  ine SQLITE_Recov
8f00: 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 30  eryMode   0x0000
8f10: 38 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20  8000  /* Ignore 
8f20: 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f  schema errors */
8f30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8f40: 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30  ReverseOrder   0
8f50: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 52 65  x00010000  /* Re
8f60: 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20  verse unordered 
8f70: 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69  SELECTs */.#defi
8f80: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69  ne SQLITE_RecTri
8f90: 67 67 65 72 73 20 20 20 20 30 78 30 30 30 32 30  ggers    0x00020
8fa0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72  000  /* Enable r
8fb0: 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
8fc0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8fd0: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
8fe0: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
8ff0: 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67  * Enforce foreig
9000: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
9010: 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s  */.#define SQ
9020: 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20  LITE_AutoIndex  
9030: 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20      0x00080000  
9040: 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61  /* Enable automa
9050: 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  tic indexes */.#
9060: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72  define SQLITE_Pr
9070: 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30  eferBuiltin  0x0
9080: 30 31 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66  0100000  /* Pref
9090: 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d  erence to built-
90a0: 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66  in funcs */.#def
90b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
90c0: 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 32 30  xtension  0x0020
90d0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
90e0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a  load_extension *
90f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9100: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
9110: 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 54  0x00400000  /* T
9120: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
9130: 69 67 67 65 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  iggers */../*.**
9140: 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c   Bits of the sql
9150: 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20  ite3.dbOptFlags 
9160: 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75  field that are u
9170: 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  sed by the.** sq
9180: 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
9190: 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
91a0: 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
91b0: 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20  ,...) interface 
91c0: 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c  to.** selectivel
91d0: 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75  y disable variou
91e0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
91f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
9200: 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65  TE_QueryFlattene
9210: 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75  r 0x0001   /* Qu
9220: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
9230: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9240: 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20  _ColumnCache    
9250: 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75  0x0002   /* Colu
9260: 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  mn cache */.#def
9270: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
9280: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
9290: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
92a0: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
92b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
92c0: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
92d0: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
92e0: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
92f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9300: 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20 20  _IdxRealAsInt   
9310: 30 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f 72  0x0010   /* Stor
9320: 65 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69 6e  e REAL as INT in
9330: 20 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65 66   indices */.#def
9340: 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69  ine SQLITE_Disti
9350: 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30  nctOpt    0x0020
9360: 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75     /* DISTINCT u
9370: 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a  sing indexes */.
9380: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
9390: 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78  overIdxScan   0x
93a0: 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69  0040   /* Coveri
93b0: 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a  ng index scans *
93c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
93d0: 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20  _OrderByIdxJoin 
93e0: 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45  0x0080   /* ORDE
93f0: 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69  R BY of joins vi
9400: 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  a index */.#defi
9410: 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f  ne SQLITE_SubqCo
9420: 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20  routine  0x0100 
9430: 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75    /* Evaluate su
9440: 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f  bqueries as coro
9450: 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e  utines */.#defin
9460: 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73  e SQLITE_AllOpts
9470: 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20          0xffff  
9480: 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61   /* All optimiza
9490: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
94a0: 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69  Macros for testi
94b0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
94c0: 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  t optimizations 
94d0: 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64  are enabled or d
94e0: 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e  isabled..*/.#ifn
94f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9500: 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65  BUILTIN_TEST.#de
9510: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
9520: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
9530: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
9540: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
9550: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
9560: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
9570: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
9580: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
9590: 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65  mask))==0).#else
95a0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
95b0: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
95c0: 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69  , mask)  0.#defi
95d0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
95e0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
95f0: 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     1.#endif../*.
9600: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
9610: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
9620: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
9630: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
9640: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
9650: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
9660: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
9670: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
9680: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
9690: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
96a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
96b0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
96c0: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
96d0: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
96e0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
96f0: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
9700: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
9710: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
9720: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
9730: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
9740: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
9750: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
9760: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
9770: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9780: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
9790: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
97a0: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
97b0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
97c0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
97d0: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
97e0: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
97f0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
9800: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
9810: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
9820: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
9830: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
9840: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
9850: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
9860: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
9870: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
9880: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
9890: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
98a0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20  * structure.  A 
98b0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
98c0: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f  structure is sto
98d0: 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
98e0: 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20  e.aFunc.** hash 
98f0: 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c  table.  When mul
9900: 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  tiple functions 
9910: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61  have the same na
9920: 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62  me, the hash tab
9930: 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20  le.** points to 
9940: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
9950: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
9960: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
9970: 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72  cDef {.  i16 nAr
9980: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
9990: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
99a0: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
99b0: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
99c0: 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20 20  8 iPrefEnc;     
99d0: 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65 64      /* Preferred
99e0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 28   text encoding (
99f0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36 4c  SQLITE_UTF8, 16L
9a00: 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75 38  E, 16BE) */.  u8
9a10: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
9a20: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
9a30: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
9a40: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
9a50: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
9a60: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
9a70: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
9a80: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
9a90: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
9aa0: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
9ab0: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
9ac0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
9ad0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
9ae0: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
9af0: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
9b00: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
9b10: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
9b20: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
9b30: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
9b40: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
9b50: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
9b60: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
9b70: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
9b80: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
9b90: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
9ba0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
9bb0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
9bc0: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
9bd0: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
9be0: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
9bf0: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
9c00: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
9c10: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
9c20: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
9c30: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
9c40: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
9c50: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
9c60: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
9c70: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
9c80: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
9c90: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
9ca0: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
9cb0: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
9cc0: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
9cd0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
9ce0: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
9cf0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
9d00: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
9d10: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
9d20: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
9d30: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
9d40: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
9d50: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
9d60: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
9d70: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
9d80: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
9d90: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
9da0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
9db0: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
9dc0: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
9dd0: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
9de0: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
9df0: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
9e00: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
9e10: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
9e20: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
9e30: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
9e40: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
9e50: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
9e60: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
9e70: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
9e80: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
9e90: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
9ea0: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
9eb0: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
9ec0: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
9ed0: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
9ee0: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
9ef0: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
9f00: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
9f10: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
9f20: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
9f30: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
9f40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
9f50: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
9f60: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
9f70: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
9f80: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
9f90: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
9fa0: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
9fb0: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
9fc0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
9fd0: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
9fe0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
9ff0: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
a000: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
a010: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
a020: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
a030: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
a040: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
a050: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
a060: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
a070: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
a080: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
a090: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
a0a0: 4b 45 20 20 20 20 20 30 78 30 31 20 2f 2a 20 43  KE     0x01 /* C
a0b0: 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65  andidate for the
a0c0: 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69   LIKE optimizati
a0d0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
a0e0: 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20  LITE_FUNC_CASE  
a0f0: 20 20 20 30 78 30 32 20 2f 2a 20 43 61 73 65 2d     0x02 /* Case-
a100: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
a110: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
a120: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a130: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
a140: 34 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  4 /* Ephemeral. 
a150: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
a160: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
a170: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
a180: 4c 20 30 78 30 38 20 2f 2a 20 73 71 6c 69 74 65  L 0x08 /* sqlite
a190: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
a1a0: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
a1b0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
a1c0: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
a1d0: 20 20 30 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d    0x10 /* Built-
a1e0: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
a1f0: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
a200: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
a210: 4c 45 53 43 45 20 30 78 32 30 20 2f 2a 20 42 75  LESCE 0x20 /* Bu
a220: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
a230: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66 75  ) or ifnull() fu
a240: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a250: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
a260: 4e 47 54 48 20 20 20 30 78 34 30 20 2f 2a 20 42  NGTH   0x40 /* B
a270: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
a280: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a290: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a2a0: 5f 54 59 50 45 4f 46 20 20 20 30 78 38 30 20 2f  _TYPEOF   0x80 /
a2b0: 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f  * Built-in typeo
a2c0: 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  f() function */.
a2d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
a2e0: 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f  wing three macro
a2f0: 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c  s, FUNCTION(), L
a300: 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47  IKEFUNC() and AG
a310: 47 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a  GREGATE() are.**
a320: 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   used to create 
a330: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73  the initializers
a340: 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66   for the FuncDef
a350: 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a   structures..**.
a360: 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e  **   FUNCTION(zN
a370: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
a380: 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20   bNC, xFunc).** 
a390: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
a3a0: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
a3b0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
a3c0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
a3d0: 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c  ame .**     impl
a3e0: 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e  emented by C fun
a3f0: 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74  ction xFunc that
a400: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
a410: 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20  guments. The.** 
a420: 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65 64      value passed
a430: 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73 74   as iArg is cast
a440: 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e   to a (void*) an
a450: 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  d made available
a460: 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20 75  .**     as the u
a470: 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65  ser-data (sqlite
a480: 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20 66  3_user_data()) f
a490: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  or the function.
a4a0: 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75   If .**     argu
a4b0: 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
a4c0: 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
a4d0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
a4e0: 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
a4f0: 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a  **   AGGREGATE(z
a500: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
a510: 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46  , bNC, xStep, xF
a520: 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65  inal).**     Use
a530: 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
a540: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
a550: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
a560: 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
a570: 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
a580: 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
a590: 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
a5a0: 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
a5b0: 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
a5c0: 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
a5d0: 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
a5e0: 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
a5f0: 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
a600: 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
a610: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
a620: 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
a630: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
a640: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
a650: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
a660: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
a670: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
a680: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
a690: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
a6a0: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
a6b0: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a  y a call to C .*
a6c0: 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
a6d0: 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
a6e0: 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
a6f0: 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
a700: 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
a710: 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
a720: 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
a730: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
a740: 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
a750: 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
a760: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
a770: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
a780: 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
a790: 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
a7a0: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
a7b0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
a7c0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
a7d0: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
a7e0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 28  , SQLITE_UTF8, (
a7f0: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
a800: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
a810: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
a820: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
a830: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
a840: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 46   0, 0}.#define F
a850: 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20  UNCTION2(zName, 
a860: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
a870: 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61   xFunc, extraFla
a880: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
a890: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
a8a0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
a8b0: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
a8c0: 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
a8d0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
a8e0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
a8f0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
a900: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
a910: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
a920: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
a930: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
a940: 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53  LITE_UTF8, bNC*S
a950: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
a960: 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  OLL, \.   pArg, 
a970: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
a980: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
a990: 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a  efine LIKEFUNC(z
a9a0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
a9b0: 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72   flags) \.  {nAr
a9c0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  g, SQLITE_UTF8, 
a9d0: 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29 61  flags, (void *)a
a9e0: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
a9f0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
aa00: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  , 0}.#define AGG
aa10: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
aa20: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
aa30: 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20  ep, xFinal) \.  
aa40: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
aa50: 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8, nc*SQLITE_FU
aa60: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20  NC_NEEDCOLL, \. 
aa70: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
aa80: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
aa90: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
aaa0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
aab0: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
aac0: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
aad0: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
aae0: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
aaf0: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
ab00: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
ab10: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
ab20: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
ab30: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
ab40: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
ab50: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
ab60: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
ab70: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
ab80: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
ab90: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
aba0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
abb0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abd0: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
abe0: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
abf0: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
ac00: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
ac30: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
ac40: 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  ons */.  Savepoi
ac50: 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ac70: 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
ac80: 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
ac90: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
aca0: 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
acb0: 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
acc0: 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
acd0: 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
ace0: 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
acf0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
ad00: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
ad10: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
ad20: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
ad30: 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
ad40: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
ad50: 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
ad60: 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
ad70: 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
ad80: 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
ad90: 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
ada0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
adb0: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
adc0: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
add0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
ade0: 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
adf0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
ae00: 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
ae10: 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
ae20: 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
ae30: 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
ae40: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
ae50: 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
ae60: 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
ae70: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ae90: 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
aea0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
aeb0: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
aee0: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
aef0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
af00: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
af10: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
af20: 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
af30: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
af40: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
af50: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
af60: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
af70: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
af80: 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
af90: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
afa0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
afb0: 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
afc0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
afd0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
afe0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70   column */.  Exp
aff0: 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
b000: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
b010: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
b020: 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20  .  char *zDflt; 
b030: 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
b040: 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66 61  text of the defa
b050: 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63  ult value */.  c
b060: 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20  har *zType;     
b070: 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f 72  /* Data type for
b080: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
b090: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
b0a0: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
b0b0: 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
b0c0: 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
b0d0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
b0e0: 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
b0f0: 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
b100: 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
b110: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
b120: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
b130: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
b140: 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
b150: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 63  alues */.  u16 c
b160: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 42  olFlags;    /* B
b170: 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
b180: 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
b190: 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
b1a0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
b1b0: 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
b1c0: 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
b1d0: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
b1e0: 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
b1f0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
b200: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
b210: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
b220: 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
b230: 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
b240: 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
b250: 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
b260: 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ble */../*.** A 
b270: 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65  "Collating Seque
b280: 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20  nce" is defined 
b290: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
b2a0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
b2b0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f  ** structure. Co
b2c0: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f  nceptually, a co
b2d0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b2e0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e   consists of a n
b2f0: 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d  ame and.** a com
b300: 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20  parison routine 
b310: 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
b320: 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73   order of that s
b330: 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49  equence..**.** I
b340: 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69  f CollSeq.xCmp i
b350: 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73  s NULL, it means
b360: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c   that the.** col
b370: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
b380: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49  is undefined.  I
b390: 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20  ndices built on 
b3a0: 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20  an undefined.** 
b3b0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
b3c0: 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65  ce may not be re
b3d0: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a  ad or written..*
b3e0: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  /.struct CollSeq
b3f0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
b400: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
b410: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
b420: 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54  ing sequence, UT
b430: 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
b440: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
b450: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
b460: 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
b470: 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76  by xCmp() */.  v
b480: 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
b490: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
b4a0: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29  gument to xCmp()
b4b0: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70   */.  int (*xCmp
b4c0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
b4d0: 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  st void*, int, c
b4e0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
b4f0: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
b500: 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74  *);  /* Destruct
b510: 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a  or for pUser */.
b520: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74  };../*.** A sort
b530: 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69   order can be ei
b540: 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
b550: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b560: 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20  ITE_SO_ASC      
b570: 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   0  /* Sort in a
b580: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
b590: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b5a0: 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20  _SO_DESC      1 
b5b0: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
b5c0: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a  nding order */..
b5d0: 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
b5e0: 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
b5f0: 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
b600: 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
b610: 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
b620: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
b630: 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
b640: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
b650: 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
b660: 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
b670: 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
b680: 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
b690: 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
b6a0: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
b6b0: 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a  nsecutively.  .*
b6c0: 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
b6d0: 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
b6e0: 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
b6f0: 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61 74   with 'a'.  That
b700: 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
b710: 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
b720: 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
b730: 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
b740: 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
b750: 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
b760: 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
b770: 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
b780: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
b790: 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
b7a0: 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
b7b0: 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
b7c0: 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
b7d0: 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
b7e0: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
b7f0: 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65  mparison..*/.#de
b800: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b810: 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64 65  TEXT     'a'.#de
b820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b830: 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65  NONE     'b'.#de
b840: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b850: 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65  NUMERIC  'c'.#de
b860: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b870: 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64 65  INTEGER  'd'.#de
b880: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
b890: 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64  REAL     'e'..#d
b8a0: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
b8b0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
b8c0: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
b8d0: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
b8e0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
b8f0: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
b900: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
b910: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
b920: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
b930: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
b940: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
b950: 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a  SK     0x67../*.
b960: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
b970: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
b980: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
b990: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
b9a0: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
b9b0: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a  he affinity..*/.
b9c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
b9d0: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38  UMPIFNULL   0x08
b9e0: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
b9f0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
ba00: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
ba10: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
ba20: 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f      0x10  /* Sto
ba30: 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
ba40: 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
ba50: 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
ba60: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
ba70: 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
ba80: 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  LL=NULL */../*.*
ba90: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
baa0: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
bab0: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
bac0: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
bad0: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
bae0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a  abase schema. .*
baf0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
bb00: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
bb10: 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
bb20: 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
bb30: 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
bb40: 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
bb50: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
bb60: 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
bb70: 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
bb80: 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
bb90: 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
bba0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
bbb0: 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
bbc0: 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
bbd0: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
bbe0: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
bbf0: 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
bc00: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
bc10: 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70  al table .** imp
bc20: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
bc30: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
bc40: 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
bc50: 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a  ared between .**
bc60: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
bc70: 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
bc80: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
bc90: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
bca0: 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69  ase .** schema i
bcb0: 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
bcc0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bcd0: 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
bce0: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
bcf0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
bd00: 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
bd10: 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
bd20: 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
bd30: 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
bd40: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
bd50: 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
bd60: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
bd70: 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
bd80: 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
bd90: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
bda0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bdb0: 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
bdc0: 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e  ables .** within
bdd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
bde0: 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
bdf0: 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
be00: 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72  e callers .** tr
be10: 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
be20: 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
be30: 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
be40: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
be50: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
be60: 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
be70: 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
be80: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
be90: 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
bea0: 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
beb0: 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
bec0: 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
bed0: 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
bee0: 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
bef0: 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
bf00: 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
bf10: 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
bf20: 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
bf30: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
bf40: 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
bf50: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
bf60: 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
bf70: 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
bf80: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
bf90: 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
bfa0: 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
bfb0: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
bfc0: 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
bfd0: 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
bfe0: 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
bff0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
c000: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
c010: 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
c020: 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
c030: 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
c040: 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
c050: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
c060: 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
c070: 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
c080: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
c090: 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
c0a0: 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
c0b0: 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
c0c0: 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
c0d0: 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
c0e0: 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
c0f0: 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
c100: 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  ot .** deleted a
c110: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
c120: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
c130: 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
c140: 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61  ()ed .** immedia
c150: 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
c160: 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
c170: 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
c180: 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
c190: 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
c1a0: 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
c1b0: 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
c1c0: 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
c1d0: 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
c1e0: 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
c1f0: 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
c200: 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
c210: 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20  isconnected .** 
c220: 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
c230: 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
c240: 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
c250: 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
c260: 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
c270: 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
c280: 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
c290: 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
c2a0: 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
c2b0: 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
c2c0: 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
c2d0: 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
c2e0: 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
c2f0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
c300: 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
c310: 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
c320: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
c330: 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
c340: 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
c350: 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
c360: 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
c370: 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
c380: 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
c390: 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
c3a0: 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
c3b0: 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73  located by .** s
c3c0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
c3d0: 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
c3e0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
c3f0: 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
c400: 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72  b as .** the fir
c410: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
c420: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
c430: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
c440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
c450: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
c460: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
c470: 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
c480: 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c4a0: 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
c4b0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
c4c0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
c4d0: 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
c4e0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
c4f0: 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
c500: 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
c510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c520: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
c530: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
c540: 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
c550: 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
c560: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
c570: 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
c580: 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
c590: 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
c5a0: 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
c5b0: 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
c5c0: 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
c5d0: 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
c5e0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
c5f0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
c600: 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
c610: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61  *.** Each SQL ta
c620: 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
c630: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
c640: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
c650: 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  he.** following 
c660: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
c670: 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20   Table.zName is 
c680: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
c690: 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65  table.  The case
c6a0: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
c6b0: 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45  .** CREATE TABLE
c6c0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
c6d0: 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20 69  ored, but case i
c6e0: 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e  s not significan
c6f0: 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69  t for.** compari
c700: 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  sons..**.** Tabl
c710: 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75  e.nCol is the nu
c720: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
c730: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20  in this table.  
c740: 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a  Table.aCol is a.
c750: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e  ** pointer to an
c760: 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e   array of Column
c770: 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65   structures, one
c780: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
c790: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74  ..**.** If the t
c7a0: 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45  able has an INTE
c7b0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
c7c0: 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65   then Table.iPKe
c7d0: 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  y is the index o
c7e0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20  f.** the column 
c7f0: 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65 79  that is that key
c800: 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54 61  .   Otherwise Ta
c810: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67  ble.iPKey is neg
c820: 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20  ative.  Note.** 
c830: 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79 70  that the datatyp
c840: 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  e of the PRIMARY
c850: 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54   KEY must be INT
c860: 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66 69  EGER for this fi
c870: 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74  eld to.** be set
c880: 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52  .  An INTEGER PR
c890: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73 65  IMARY KEY is use
c8a0: 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 66  d as the rowid f
c8b0: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a  or each row of.*
c8c0: 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  * the table.  If
c8d0: 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20   a table has no 
c8e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c8f0: 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64  KEY, then a rand
c900: 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67  om rowid.** is g
c910: 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61 63  enerated for eac
c920: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
c930: 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61  le.  TF_HasPrima
c940: 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a  ryKey is set if.
c950: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  ** the table has
c960: 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59   any PRIMARY KEY
c970: 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68  , INTEGER or oth
c980: 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  erwise..**.** Ta
c990: 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20  ble.tnum is the 
c9a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
c9b0: 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70  the root BTree p
c9c0: 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
c9d0: 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   in the.** datab
c9e0: 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61  ase file.  If Ta
c9f0: 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20 69  ble.iDb is the i
ca00: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
ca10: 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65  base table backe
ca20: 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e  nd.** in sqlite.
ca30: 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72  aDb[].  0 is for
ca40: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
ca50: 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20  se and 1 is for 
ca60: 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a  the file that.**
ca70: 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79   holds temporary
ca80: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
ca90: 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65  ces.  If TF_Ephe
caa0: 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20  meral is set.** 
cab0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
cac0: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69  s stored in a fi
cad0: 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d  le that is autom
cae0: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
caf0: 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42  .** when the VDB
cb00: 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  E cursor to the 
cb10: 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
cb20: 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 54    In this case T
cb30: 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65  able.tnum .** re
cb40: 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f 72  fers VDBE cursor
cb50: 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c   number that hol
cb60: 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65  ds the table ope
cb70: 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f  n, not to the ro
cb80: 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65  ot.** page numbe
cb90: 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61  r.  Transient ta
cba0: 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  bles are used to
cbb0: 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74   hold the result
cbc0: 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75  s of a.** sub-qu
cbd0: 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72 73  ery that appears
cbe0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65   instead of a re
cbf0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  al table name in
cc00: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
cc10: 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54   .** of a SELECT
cc20: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
cc30: 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
cc40: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
cc50: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
cc60: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
cc70: 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
cc80: 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
cc90: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
cca0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
ccb0: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
ccc0: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
ccd0: 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
cce0: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
ccf0: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
cd00: 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
cd10: 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
cd20: 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
cd30: 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
cd40: 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
cd50: 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
cd60: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
cd70: 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
cd80: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
cd90: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
cda0: 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
cdb0: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
cdc0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
cdd0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
cde0: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45  E_OMIT_CHECK.  E
cdf0: 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
ce00: 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
ce10: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
ce20: 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e 74  #endif.  tRowcnt
ce30: 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a   nRowEst;     /*
ce40: 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
ce50: 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
ce60: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
ce70: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  le */.  int tnum
ce80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ce90: 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20  Root BTree node 
cea0: 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28  for this table (
ceb0: 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20  see note above) 
cec0: 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
ced0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
cee0: 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
cef0: 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
cf00: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
cf10: 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
cf20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cf30: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
cf40: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
cf50: 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
cf60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
cf70: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
cf80: 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
cf90: 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20   u8 tabFlags;   
cfa0: 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
cfb0: 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   TF_* values */.
cfc0: 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
cfd0: 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
cfe0: 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
cff0: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
d000: 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
d010: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d020: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
d030: 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
d040: 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
d050: 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
d060: 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
d070: 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
d080: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
d090: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d0a0: 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
d0b0: 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
d0c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
d0d0: 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
d0e0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
d0f0: 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78  duleArg;  /* Tex
d100: 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20  t of all module 
d110: 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64  args. [0] is mod
d120: 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54  ule name */.  VT
d130: 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
d140: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
d150: 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
d160: 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
d170: 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
d180: 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
d190: 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
d1a0: 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
d1b0: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
d1c0: 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
d1d0: 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
d1e0: 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
d1f0: 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
d200: 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
d210: 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
d220: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
d230: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
d240: 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a   Tabe.tabFlags..
d250: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
d260: 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
d270: 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
d280: 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
d290: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
d2a0: 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
d2b0: 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
d2c0: 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
d2d0: 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
d2e0: 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
d2f0: 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
d300: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
d310: 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
d320: 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
d330: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
d340: 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
d350: 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
d360: 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
d370: 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
d380: 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
d390: 20 74 61 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a   table */.../*.*
d3a0: 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
d3b0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
d3c0: 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
d3d0: 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
d3e0: 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
d3f0: 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
d400: 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
d410: 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
d420: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
d430: 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
d440: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
d450: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
d460: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
d470: 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
d480: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
d490: 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
d4a0: 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29   TF_Virtual)!=0)
d4b0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
d4c0: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
d4d0: 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
d4e0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
d4f0: 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  0).#else.#  defi
d500: 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
d510: 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
d520: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
d530: 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  X) 0.#endif../*.
d540: 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
d550: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
d560: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
d570: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
d580: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
d590: 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
d5a0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
d5b0: 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
d5c0: 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
d5d0: 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
d5e0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
d5f0: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
d600: 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
d610: 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
d620: 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
d630: 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
d640: 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
d650: 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
d660: 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
d670: 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
d680: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
d690: 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
d6a0: 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
d6b0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
d6c0: 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
d6d0: 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
d6e0: 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
d6f0: 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
d700: 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
d710: 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
d720: 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
d730: 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
d740: 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a  le is "ex2"..**.
d750: 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
d760: 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
d770: 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
d780: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
d790: 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
d7a0: 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
d7b0: 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
d7c0: 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
d7d0: 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
d7e0: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
d7f0: 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
d800: 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
d810: 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
d820: 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
d830: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
d840: 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
d850: 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
d860: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
d870: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
d880: 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
d890: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
d8a0: 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72  om;  /* Next for
d8b0: 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f  eign key in pFro
d8c0: 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
d8d0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
d8e0: 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
d8f0: 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
d900: 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
d910: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
d920: 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f  o;    /* Next fo
d930: 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62  reign key on tab
d940: 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a  le named zTo */.
d950: 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
d960: 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
d970: 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74  foreign key on t
d980: 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a  able named zTo *
d990: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
d9a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d9b0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
d9c0: 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
d9d0: 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
d9e0: 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
d9f0: 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  red;    /* True 
da00: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
da10: 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
da20: 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
da30: 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
da40: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ];          /* O
da50: 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
da60: 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
da70: 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
da80: 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
da90: 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69  gger[2];  /* Tri
daa0: 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
dab0: 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
dac0: 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
dad0: 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66  {  /* Mapping of
dae0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
daf0: 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
db00: 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
db10: 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  From;         /*
db20: 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
db30: 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
db40: 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
db50: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
db60: 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
db70: 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59 20  f 0 use PRIMARY 
db80: 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
db90: 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  1];        /* On
dba0: 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
dbb0: 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20   of nCol column 
dbc0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
dbd0: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
dbe0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
dbf0: 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
dc00: 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
dc10: 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
dc20: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
dc30: 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
dc40: 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
dc50: 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
dc60: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
dc70: 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
dc80: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
dc90: 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
dca0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
dcb0: 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
dcc0: 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
dcd0: 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
dce0: 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
dcf0: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
dd00: 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
dd10: 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
dd20: 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
dd30: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
dd40: 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
dd50: 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
dd60: 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
dd70: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
dd80: 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
dd90: 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
dda0: 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
ddb0: 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
ddc0: 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
ddd0: 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
dde0: 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
ddf0: 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
de00: 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
de10: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
de20: 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
de30: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
de40: 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
de50: 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
de60: 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
de70: 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
de80: 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
de90: 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
dea0: 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
deb0: 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
dec0: 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
ded0: 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
dee0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
def0: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
df00: 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
df10: 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
df20: 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
df30: 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
df40: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
df50: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
df60: 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
df70: 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
df80: 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
df90: 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
dfa0: 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
dfb0: 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
dfc0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
dfd0: 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
dfe0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
dff0: 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
e000: 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
e010: 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
e020: 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
e030: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
e040: 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
e050: 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
e060: 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
e070: 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
e080: 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
e090: 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
e0a0: 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
e0b0: 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
e0c0: 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
e0d0: 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66  ey..** .** The f
e0e0: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
e0f0: 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
e100: 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
e110: 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
e120: 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
e130: 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
e140: 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
e150: 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
e160: 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
e170: 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
e180: 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
e190: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
e1a0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
e1b0: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
e1c0: 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
e1d0: 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
e1e0: 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
e1f0: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
e200: 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
e210: 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
e220: 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
e230: 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
e240: 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
e250: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
e260: 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
e270: 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
e280: 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
e290: 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
e2a0: 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
e2b0: 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
e2c0: 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
e2d0: 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
e2e0: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
e2f0: 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
e300: 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
e310: 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
e320: 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
e330: 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
e340: 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
e350: 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
e360: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
e370: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
e380: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
e390: 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
e3a0: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
e3b0: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
e3c0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
e3d0: 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
e3e0: 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
e3f0: 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
e400: 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
e410: 74 20 20 39 39 20 20 2f 2a 20 44 6f 20 77 68 61  t  99  /* Do wha
e420: 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
e430: 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
e440: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
e450: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
e460: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
e470: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
e480: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
e490: 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
e4a0: 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
e4b0: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
e4c0: 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69   the .** compari
e4d0: 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
e4e0: 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74  ndex keys..*/.st
e4f0: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
e500: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
e510: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
e520: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
e530: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
e540: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
e550: 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
e560: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
e570: 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
e580: 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
e590: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e5a0: 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c  entries in aColl
e5b0: 5b 5d 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  [] */.  u8 *aSor
e5c0: 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53  tOrder;     /* S
e5d0: 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61  ort order for ea
e5e0: 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20  ch column.  May 
e5f0: 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c  be NULL */.  Col
e600: 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
e610: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
e620: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
e630: 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
e640: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
e650: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e660: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
e670: 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
e680: 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a  ation about a.**
e690: 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65   single index re
e6a0: 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
e6b0: 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65  ready been parse
e6c0: 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
e6d0: 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e  idual.** values.
e6e0: 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
e6f0: 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
e700: 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
e710: 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
e720: 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
e730: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
e740: 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
e750: 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
e760: 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
e770: 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
e780: 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
e790: 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
e7a0: 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
e7b0: 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
e7c0: 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
e7d0: 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
e7e0: 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
e7f0: 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
e800: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  pcode..**.** Thi
e810: 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  s structure hold
e820: 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  s a record that 
e830: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
e840: 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a   disassembled.**
e850: 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69   into its consti
e860: 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f  tuent fields..*/
e870: 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
e880: 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
e890: 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
e8a0: 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
e8b0: 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
e8c0: 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
e8d0: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
e8e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
e8f0: 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
e900: 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20  */.  u8 flags;  
e910: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c           /* Bool
e920: 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20 55  ean settings.  U
e930: 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f  NPACKED_... belo
e940: 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64  w */.  i64 rowid
e950: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  ;          /* Us
e960: 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f 50  ed by UNPACKED_P
e970: 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a  REFIX_SEARCH */.
e980: 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
e990: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
e9a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
e9b0: 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20 55  owed values of U
e9c0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c  npackedRecord.fl
e9d0: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ags.*/.#define U
e9e0: 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
e9f0: 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 4d        0x01  /* M
ea00: 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e 20  ake this key an 
ea10: 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a  epsilon larger *
ea20: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
ea30: 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 20  ED_PREFIX_MATCH 
ea40: 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72 65 66   0x02  /* A pref
ea50: 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e 73  ix match is cons
ea60: 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65  idered OK */.#de
ea70: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52  fine UNPACKED_PR
ea80: 45 46 49 58 5f 53 45 41 52 43 48 20 30 78 30 34  EFIX_SEARCH 0x04
ea90: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61    /* Ignore fina
eaa0: 6c 20 28 72 6f 77 69 64 29 20 66 69 65 6c 64 20  l (rowid) field 
eab0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
eac0: 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
ead0: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
eae0: 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
eaf0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
eb00: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
eb10: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
eb20: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
eb30: 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
eb40: 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
eb50: 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
eb60: 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
eb70: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
eb80: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
eb90: 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
eba0: 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
ebb0: 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
ebc0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
ebd0: 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
ebe0: 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
ebf0: 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
ec00: 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
ec10: 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
ec20: 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
ec30: 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
ec40: 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
ec50: 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
ec60: 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
ec70: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
ec80: 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
ec90: 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
eca0: 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
ecb0: 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
ecc0: 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
ecd0: 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
ece0: 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
ecf0: 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
ed00: 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
ed10: 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
ed20: 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74  se the .** first
ed30: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
ed40: 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61  dexed (c3) has a
ed50: 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20  n index of 2 in 
ed60: 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54  Ex1.aCol[]..** T
ed70: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
ed80: 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
ed90: 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c1) has an index
eda0: 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e   of 0 in.** Ex1.
edb0: 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78  aCol[], hence Ex
edc0: 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30  2.aiColumn[1]==0
edd0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65  ..**.** The Inde
ede0: 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20  x.onError field 
edf0: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
ee00: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e  er or not the in
ee10: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  dexed columns.**
ee20: 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20   must be unique 
ee30: 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69  and what to do i
ee40: 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20  f they are not. 
ee50: 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72   When Index.onEr
ee60: 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20  ror=OE_None,.** 
ee70: 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73  it means this is
ee80: 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e   not a unique in
ee90: 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20  dex.  Otherwise 
eea0: 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69  it is a unique i
eeb0: 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ndex.** and the 
eec0: 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f  value of Index.o
eed0: 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20  nError indicate 
eee0: 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69  the which confli
eef0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a  ct resolution .*
ef00: 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
ef10: 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
ef20: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
ef30: 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
ef40: 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
ef50: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ent..*/.struct I
ef60: 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
ef70: 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
ef80: 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
ef90: 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43 6f 6c 75  */.  int *aiColu
efa0: 6d 6e 3b 20 20 20 2f 2a 20 57 68 69 63 68 20 63  mn;   /* Which c
efb0: 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
efc0: 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
efd0: 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 74 52  1st is 0 */.  tR
efe0: 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b  owcnt *aiRowEst;
eff0: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 41 4e   /* Result of AN
f000: 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
f010: 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
f020: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
f030: 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 2f  ble *pTable;   /
f040: 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20  * The SQL table 
f050: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f  being indexed */
f060: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
f070: 3b 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65  ;   /* String de
f080: 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
f090: 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
f0a0: 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
f0b0: 4e 65 78 74 3b 20 20 20 20 2f 2a 20 54 68 65 20  Next;    /* The 
f0c0: 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63  next index assoc
f0d0: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
f0e0: 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53  ame table */.  S
f0f0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
f100: 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
f110: 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
f120: 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
f130: 64 65 72 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f  der;  /* Array o
f140: 66 20 73 69 7a 65 20 49 6e 64 65 78 2e 6e 43 6f  f size Index.nCo
f150: 6c 75 6d 6e 2e 20 54 72 75 65 3d 3d 44 45 53 43  lumn. True==DESC
f160: 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
f170: 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
f180: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
f190: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
f1a0: 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
f1b0: 78 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  x */.  int nColu
f1c0: 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
f1d0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
f1e0: 74 68 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  the table used b
f1f0: 79 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  y this index */.
f200: 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
f210: 20 20 20 2f 2a 20 50 61 67 65 20 63 6f 6e 74 61     /* Page conta
f220: 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
f230: 69 73 20 69 6e 64 65 78 20 69 6e 20 64 61 74 61  is index in data
f240: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
f250: 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
f260: 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
f270: 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
f280: 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
f290: 2f 0a 20 20 75 38 20 61 75 74 6f 49 6e 64 65 78  /.  u8 autoIndex
f2a0: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
f2b0: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
f2c0: 20 63 72 65 61 74 65 64 20 28 65 78 3a 20 62 79   created (ex: by
f2d0: 20 55 4e 49 51 55 45 29 20 2a 2f 0a 20 20 75 38   UNIQUE) */.  u8
f2e0: 20 62 55 6e 6f 72 64 65 72 65 64 3b 20 20 20 2f   bUnordered;   /
f2f0: 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
f300: 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
f310: 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 69  eries only */.#i
f320: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
f330: 4c 45 5f 53 54 41 54 33 0a 20 20 69 6e 74 20 6e  LE_STAT3.  int n
f340: 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
f350: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f360: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
f370: 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 74 52 6f 77  mple[] */.  tRow
f380: 63 6e 74 20 61 76 67 45 71 3b 20 20 20 20 20 20  cnt avgEq;      
f390: 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
f3a0: 6e 45 71 20 76 61 6c 75 65 20 66 6f 72 20 6b 65  nEq value for ke
f3b0: 79 20 76 61 6c 75 65 73 20 6e 6f 74 20 69 6e 20  y values not in 
f3c0: 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
f3d0: 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
f3e0: 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
f3f0: 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
f400: 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a  t key */.#endif.
f410: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  };../*.** Each s
f420: 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
f430: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
f440: 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
f450: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
f460: 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
f470: 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
f480: 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
f490: 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
f4a0: 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
f4b0: 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
f4c0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
f4d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
f4e0: 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
f4f0: 70 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ple {.  union {.
f500: 20 20 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20      char *z;    
f510: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20      /* Value if 
f520: 65 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f  eType is SQLITE_
f530: 54 45 58 54 20 6f 72 20 53 51 4c 49 54 45 5f 42  TEXT or SQLITE_B
f540: 4c 4f 42 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  LOB */.    doubl
f550: 65 20 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  e r;       /* Va
f560: 6c 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20  lue if eType is 
f570: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 20 2a 2f 0a  SQLITE_FLOAT */.
f580: 20 20 20 20 69 36 34 20 69 3b 20 20 20 20 20 20      i64 i;      
f590: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20      /* Value if 
f5a0: 65 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f  eType is SQLITE_
f5b0: 49 4e 54 45 47 45 52 20 2a 2f 0a 20 20 7d 20 75  INTEGER */.  } u
f5c0: 3b 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20 20  ;.  u8 eType;   
f5d0: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
f5e0: 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 49 4e 54  NULL, SQLITE_INT
f5f0: 45 47 45 52 20 2e 2e 2e 20 65 74 63 2e 20 2a 2f  EGER ... etc. */
f600: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20  .  int nByte;   
f610: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 69 6e 20       /* Size in 
f620: 62 79 74 65 20 6f 66 20 74 65 78 74 20 6f 72 20  byte of text or 
f630: 62 6c 6f 62 2e 20 2a 2f 0a 20 20 74 52 6f 77 63  blob. */.  tRowc
f640: 6e 74 20 6e 45 71 3b 20 20 20 20 20 20 2f 2a 20  nt nEq;      /* 
f650: 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
f660: 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
f670: 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
f680: 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
f690: 74 20 6e 4c 74 3b 20 20 20 20 20 20 2f 2a 20 45  t nLt;      /* E
f6a0: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
f6b0: 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
f6c0: 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
f6d0: 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
f6e0: 6e 74 20 6e 44 4c 74 3b 20 20 20 20 20 2f 2a 20  nt nDLt;     /* 
f6f0: 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
f700: 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
f710: 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
f720: 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
f730: 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
f740: 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
f750: 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
f760: 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
f770: 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
f780: 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
f790: 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
f7a0: 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
f7b0: 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
f7c0: 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
f7d0: 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
f7e0: 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
f7f0: 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
f800: 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
f810: 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
f820: 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
f830: 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
f840: 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
f850: 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
f860: 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
f870: 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
f880: 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
f890: 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
f8a0: 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
f8b0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
f8c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f8d0: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
f8e0: 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
f8f0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
f900: 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
f910: 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
f920: 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
f930: 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
f940: 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
f950: 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
f960: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
f970: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
f980: 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
f990: 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
f9a0: 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
f9b0: 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
f9c0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
f9d0: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
f9e0: 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
f9f0: 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
fa00: 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
fa10: 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
fa20: 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
fa30: 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
fa40: 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
fa50: 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
fa60: 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
fa70: 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
fa80: 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
fa90: 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
faa0: 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
fab0: 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
fac0: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
fad0: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
fae0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
faf0: 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
fb00: 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
fb10: 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
fb20: 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
fb30: 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
fb40: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
fb50: 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
fb60: 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
fb70: 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
fb80: 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
fb90: 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
fba0: 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
fbc0: 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
fbd0: 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
fbe0: 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
fbf0: 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
fc00: 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
fc10: 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
fc20: 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
fc30: 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
fc40: 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
fc60: 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
fc70: 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
fc80: 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
fc90: 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
fca0: 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
fcb0: 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
fcc0: 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
fcd0: 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
fce0: 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
fcf0: 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
fd00: 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
fd10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
fd20: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
fd30: 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
fd40: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
fd50: 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
fd60: 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
fd70: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
fd80: 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
fd90: 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
fda0: 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
fdb0: 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
fdc0: 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
fdd0: 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
fde0: 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
fdf0: 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
fe00: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
fe10: 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
fe20: 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
fe30: 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fe50: 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
fe60: 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
fe70: 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
fe80: 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
fe90: 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
fea0: 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
feb0: 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
fec0: 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
fee0: 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
fef0: 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
ff00: 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
ff10: 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
ff20: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
ff30: 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
ff40: 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
ff50: 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
ff60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ff70: 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
ff80: 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
ff90: 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
ffa0: 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
ffb0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
ffc0: 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
ffd0: 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
ffe0: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
10000 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
10010 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
10020 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
10030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10040 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
10050 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10060 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
10070 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
10080 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
10090 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
100a0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
100b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
100c0 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
100d0 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
100e0 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
100f0 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
10100 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
10110 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
10120 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
10130 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
10140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
10150 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
10160 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
10170 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
10180 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
10190 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
101a0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
101b0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
101c0 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
101d0 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
101e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
101f0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
10200 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
10210 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
10220 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
10230 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
10240 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
10250 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
10260 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
10270 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
10280 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
10290 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
102a0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
102b0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
102c0 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
102d0 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
102e0 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
102f0 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
10300 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
10310 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
10320 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
10330 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
10340 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
10350 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
10360 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
10370 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
10380 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
10390 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
103a0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
103b0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
103c0 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
103d0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
103e0 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
103f0 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
10400 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
10410 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
10420 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
10430 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
10440 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
10450 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
10460 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
10470 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
10480 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
10490 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
104a0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
104b0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
104c0 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
104d0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
104e0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
104f0 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
10500 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
10510 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
10520 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
10530 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
10540 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
10550 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
10560 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
10570 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
10580 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
10590 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
105a0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
105b0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
105c0 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
105d0 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
105e0 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
105f0 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
10600 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
10610 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
10620 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
10630 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
10640 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
10650 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a  AT, TK_BLOB, .**
10660 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
10670 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
10680 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
10690 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
106a0 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
106b0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
106c0 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
106d0 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
106e0 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
106f0 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c   the .** variabl
10700 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c  e name. Finally,
10710 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
10720 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
10730 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49  ction (TK_FUNCTI
10740 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70  ON),.** then Exp
10750 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
10760 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
10770 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
10780 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
10790 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
107a0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
107b0 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e  ht subexpression
107c0 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79  s of a.** binary
107d0 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65   operator. Eithe
107e0 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65  r or both may be
107f0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70   NULL..**.** Exp
10800 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c  r.x.pList is a l
10810 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
10820 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
10830 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
10840 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45  ction,.** a CASE
10850 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61   expression or a
10860 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  n IN expression 
10870 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  of the form "<lh
10880 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e  s> IN (<y>, <z>.
10890 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e  ..)"..** Expr.x.
108a0 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20  pSelect is used 
108b0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
108c0 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63  n is a sub-selec
108d0 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  t or an expressi
108e0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72  on of.** the for
108f0 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c  m "<lhs> IN (SEL
10900 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68  ECT ...)". If th
10910 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62  e EP_xIsSelect b
10920 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
10930 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  .** Expr.flags m
10940 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78  ask, then Expr.x
10950 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
10960 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78  d. Otherwise, Ex
10970 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a  pr.x.pList is .*
10980 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41  * valid..**.** A
10990 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
109a0 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
109b0 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
109c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
109d0 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
109e0 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
109f0 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
10a00 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
10a10 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
10a20 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
10a30 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
10a40 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
10a50 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
10a60 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
10a70 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
10a80 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
10a90 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
10aa0 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
10ab0 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
10ac0 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
10ad0 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
10ae0 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
10af0 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
10b00 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
10b10 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
10b20 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
10b30 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
10b40 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
10b50 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
10b60 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
10b70 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
10b80 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
10b90 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d  bound variable m
10ba0 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f  arker (a questio
10bb0 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61  n mark .** chara
10bc0 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
10bd0 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
10be0 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
10bf0 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
10c00 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f  ex .** number fo
10c10 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e  r that variable.
10c20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
10c30 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
10c40 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72  bquery then Expr
10c50 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61  .iColumn holds a
10c60 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67  n integer.** reg
10c70 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e  ister number con
10c80 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75  taining the resu
10c90 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65  lt of the subque
10ca0 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73  ry.  If the.** s
10cb0 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20  ubquery gives a 
10cc0 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c  constant result,
10cd0 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
10ce0 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71  -1.  If the subq
10cf0 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20  uery.** gives a 
10d00 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72  different answer
10d10 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69   at different ti
10d20 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65  mes during state
10d30 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a  ment processing.
10d40 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  ** then iTable i
10d50 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
10d60 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68   a subroutine th
10d70 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
10d80 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  subquery..**.** 
10d90 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f  If the Expr is o
10da0 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e  f type OP_Column
10db0 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  , and the table 
10dc0 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20  it is selecting 
10dd0 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73  from.** is a dis
10de0 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22  k table or the "
10df0 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61  old.*" pseudo-ta
10e00 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70  ble, then pTab p
10e10 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
10e20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
10e30 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a  ble definition..
10e40 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e  **.** ALLOCATION
10e50 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78   NOTES:.**.** Ex
10e60 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75  pr objects can u
10e70 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f  se a lot of memo
10e80 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61  ry space in data
10e90 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f  base schema.  To
10ea0 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20  .** help reduce 
10eb0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65  memory requireme
10ec0 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61  nts, sometimes a
10ed0 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69  n Expr object wi
10ee0 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74  ll be.** truncat
10ef0 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75  ed.  And to redu
10f00 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ce the number of
10f10 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
10f20 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a  ons, sometimes.*
10f30 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78  * two or more Ex
10f40 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20  pr objects will 
10f50 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  be stored in a s
10f60 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  ingle memory all
10f70 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65  ocation,.** toge
10f80 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a  ther with Expr.z
10f90 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a  Token strings..*
10fa0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52  *.** If the EP_R
10fb0 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f  educed and EP_To
10fc0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72  kenOnly flags ar
10fd0 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e  e set when.** an
10fe0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20   Expr object is 
10ff0 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e  truncated.  When
11000 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
11010 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20  et, then all.** 
11020 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f  the child Expr o
11030 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78  bjects in the Ex
11040 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70  pr.pLeft and Exp
11050 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65  r.pRight subtree
11060 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e  s.** are contain
11070 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ed within the sa
11080 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  me memory alloca
11090 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77  tion.  Note, how
110a0 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68  ever, that.** th
110b0 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78  e subtrees in Ex
110c0 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78  pr.x.pList or Ex
110d0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65  pr.x.pSelect are
110e0 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65   always separate
110f0 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
11100 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
11110 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50  hether or not EP
11120 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e  _Reduced is set.
11130 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20  .*/.struct Expr 
11140 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
11150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
11160 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65  eration performe
11170 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
11180 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
11190 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
111a0 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68  e affinity of th
111b0 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66  e column or 0 if
111c0 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f   not a column */
111d0 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20  .  u16 flags;   
111e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
111f0 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f  ious flags.  EP_
11200 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  * See below */. 
11210 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61   union {.    cha
11220 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20  r *zToken;      
11230 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c      /* Token val
11240 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61  ue. Zero termina
11250 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64  ted and dequoted
11260 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c   */.    int iVal
11270 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ue;            /
11280 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69  * Non-negative i
11290 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20  nteger value if 
112a0 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20  EP_IntValue */. 
112b0 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } u;..  /* If t
112c0 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
112d0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
112e0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
112f0 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
11300 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
11310 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
11320 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
11330 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
11340 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
11350 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
11360 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
11370 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20   malfunction. . 
11380 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
11390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
113a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
113b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
113c0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
113d0 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
113e0 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
113f0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
11400 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
11410 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
11420 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
11430 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
11440 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
11450 20 61 72 67 75 6d 65 6e 74 73 20 6f 72 20 69 6e   arguments or in
11460 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65 78   "<expr> IN (<ex
11470 70 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20 20  pr-list)" */.   
11480 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
11490 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f  ;     /* Used fo
114a0 72 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e  r sub-selects an
114b0 64 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73  d "<expr> IN (<s
114c0 65 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 7d 20  elect>)" */.  } 
114d0 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
114e0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
114f0 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
11500 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
11510 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
11520 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
11530 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
11540 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
11550 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
11560 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
11570 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
11580 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
11590 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
115a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
115e0 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
115f0 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
11600 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
11610 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
11620 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
11630 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
11640 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
11650 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
11660 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
11670 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
11680 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
11690 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
116c0 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
116d0 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
116e0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
116f0 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
11700 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f 0a  ew, 0 -> old */.
11710 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
11720 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
11730 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
11740 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
11750 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
11770 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
11780 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
11790 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20  ways >= 1). */. 
117a0 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
117b0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
117c0 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
117d0 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
117e0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
117f0 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
11800 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
11810 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
11820 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
11830 69 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73  in */.  u8 flags
11840 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  2;             /
11850 2a 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66 20  * Second set of 
11860 66 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e 2e 20  flags.  EP2_... 
11870 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
11880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
11890 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
118a0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
118b0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
118d0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
118e0 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
118f0 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11910 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
11920 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
11930 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
11940 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
11950 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
11960 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
11970 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
11980 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
11990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
119a0 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
119b0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a  N expressions. *
119c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
119d0 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
119e0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
119f0 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
11a00 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
11a10 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
11a20 69 6e 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  in   0x0001  /* 
11a30 4f 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e  Originated in ON
11a40 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
11a50 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64   of a join */.#d
11a60 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
11a70 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43      0x0002  /* C
11a80 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
11a90 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
11aa0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
11ab0 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20  ne EP_Resolved  
11ac0 20 30 78 30 30 30 34 20 20 2f 2a 20 49 44 73 20   0x0004  /* IDs 
11ad0 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
11ae0 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f  ed to COLUMNs */
11af0 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f  .#define EP_Erro
11b00 72 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f  r      0x0008  /
11b10 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e  * Expression con
11b20 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
11b30 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  e errors */.#def
11b40 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20  ine EP_Distinct 
11b50 20 20 30 78 30 30 31 30 20 20 2f 2a 20 41 67 67    0x0010  /* Agg
11b60 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
11b70 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65  with DISTINCT ke
11b80 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
11b90 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30   EP_VarSelect  0
11ba0 78 30 30 32 30 20 20 2f 2a 20 70 53 65 6c 65 63  x0020  /* pSelec
11bb0 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c  t is correlated,
11bc0 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f   not constant */
11bd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51  .#define EP_DblQ
11be0 75 6f 74 65 64 20 20 30 78 30 30 34 30 20 20 2f  uoted  0x0040  /
11bf0 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72  * token.z was or
11c00 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e  iginally in "...
11c10 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  " */.#define EP_
11c20 49 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 38  InfixFunc  0x008
11c30 30 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61  0  /* True for a
11c40 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e  n infix function
11c50 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74  : LIKE, GLOB, et
11c60 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  c */.#define EP_
11c70 43 6f 6c 6c 61 74 65 20 20 20 20 30 78 30 31 30  Collate    0x010
11c80 30 20 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  0  /* Tree conta
11c90 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45  ins a TK_COLLATE
11ca0 20 6f 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64 65   opeartor */.#de
11cb0 66 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73  fine EP_FixedDes
11cc0 74 20 20 30 78 30 32 30 30 20 20 2f 2a 20 52 65  t  0x0200  /* Re
11cd0 73 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61  sult needed in a
11ce0 20 73 70 65 63 69 66 69 63 20 72 65 67 69 73 74   specific regist
11cf0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  er */.#define EP
11d00 5f 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 34  _IntValue   0x04
11d10 30 30 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  00  /* Integer v
11d20 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
11d30 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
11d40 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
11d50 63 74 20 20 30 78 30 38 30 30 20 20 2f 2a 20 78  ct  0x0800  /* x
11d60 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
11d70 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
11d80 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
11d90 69 6e 65 20 45 50 5f 48 69 6e 74 20 20 20 20 20  ine EP_Hint     
11da0 20 20 30 78 31 30 30 30 20 20 2f 2a 20 4e 6f 74    0x1000  /* Not
11db0 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
11dc0 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 20 30   EP_Reduced    0
11dd0 78 32 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73  x2000  /* Expr s
11de0 74 72 75 63 74 20 69 73 20 45 58 50 52 5f 52 45  truct is EXPR_RE
11df0 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20  DUCEDSIZE bytes 
11e00 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
11e10 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78  EP_TokenOnly  0x
11e20 34 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74  4000  /* Expr st
11e30 72 75 63 74 20 69 73 20 45 58 50 52 5f 54 4f 4b  ruct is EXPR_TOK
11e40 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73  ENONLYSIZE bytes
11e50 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
11e60 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 20 30   EP_Static     0
11e70 78 38 30 30 30 20 20 2f 2a 20 48 65 6c 64 20 69  x8000  /* Held i
11e80 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74  n memory not obt
11e90 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
11ea0 63 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  c() */../*.** Th
11eb0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
11ec0 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
11ed0 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
11ee0 2e 66 6c 61 67 73 32 20 66 69 65 6c 64 2e 0a 2a  .flags2 field..*
11ef0 2f 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 4d 61  /.#define EP2_Ma
11f00 6c 6c 6f 63 65 64 54 6f 6b 65 6e 20 20 30 78 30  llocedToken  0x0
11f10 30 30 31 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20  001  /* Need to 
11f20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
11f30 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23  Expr.zToken */.#
11f40 64 65 66 69 6e 65 20 45 50 32 5f 49 72 72 65 64  define EP2_Irred
11f50 75 63 69 62 6c 65 20 20 20 20 30 78 30 30 30 32  ucible    0x0002
11f60 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52    /* Cannot EXPR
11f70 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
11f80 45 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  Expr */../*.** T
11f90 68 65 20 70 73 65 75 64 6f 2d 72 6f 75 74 69 6e  he pseudo-routin
11fa0 65 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  e sqlite3ExprSet
11fb0 49 72 72 65 64 75 63 69 62 6c 65 20 73 65 74 73  Irreducible sets
11fc0 20 74 68 65 20 45 50 32 5f 49 72 72 65 64 75 63   the EP2_Irreduc
11fd0 69 62 6c 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20  ible.** flag on 
11fe0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 73 74  an expression st
11ff0 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 66  ructure.  This f
12000 6c 61 67 20 69 73 20 75 73 65 64 20 66 6f 72 20  lag is used for 
12010 56 56 26 41 20 6f 6e 6c 79 2e 20 20 54 68 65 0a  VV&A only.  The.
12020 2a 2a 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6d  ** routine is im
12030 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 6d  plemented as a m
12040 61 63 72 6f 20 74 68 61 74 20 6f 6e 6c 79 20 77  acro that only w
12050 6f 72 6b 73 20 77 68 65 6e 20 69 6e 20 64 65 62  orks when in deb
12060 75 67 67 69 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20  ugging mode,.** 
12070 73 6f 20 61 73 20 6e 6f 74 20 74 6f 20 62 75 72  so as not to bur
12080 64 65 6e 20 70 72 6f 64 75 63 74 69 6f 6e 20 63  den production c
12090 6f 64 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ode..*/.#ifdef S
120a0 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
120b0 66 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65  fine ExprSetIrre
120c0 64 75 63 69 62 6c 65 28 58 29 20 20 28 58 29 2d  ducible(X)  (X)-
120d0 3e 66 6c 61 67 73 32 20 7c 3d 20 45 50 32 5f 49  >flags2 |= EP2_I
120e0 72 72 65 64 75 63 69 62 6c 65 0a 23 65 6c 73 65  rreducible.#else
120f0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
12100 74 49 72 72 65 64 75 63 69 62 6c 65 28 58 29 0a  tIrreducible(X).
12110 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
12120 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
12130 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
12140 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
12150 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78  ts in the .** Ex
12160 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
12170 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
12180 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
12190 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
121a0 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
121b0 69 6e 65 20 45 78 70 72 48 61 73 41 6e 79 50 72  ine ExprHasAnyPr
121c0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
121d0 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
121e0 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  0).#define ExprS
121f0 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
12200 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
12210 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
12220 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
12230 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
12240 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  =~(P)../*.** Mac
12250 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
12260 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
12270 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
12280 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a   a normal Expr .
12290 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
122a0 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
122b0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
122c0 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
122d0 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20  lags .** and an 
122e0 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
122f0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
12300 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23  y flag set..*/.#
12310 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c  define EXPR_FULL
12320 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73  SIZE           s
12330 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20  izeof(Expr)     
12340 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69        /* Full si
12350 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  ze */.#define EX
12360 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20  PR_REDUCEDSIZE  
12370 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
12380 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20  xpr,iTable)  /* 
12390 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20  Common features 
123a0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
123b0 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20  TOKENONLYSIZE   
123c0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
123d0 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77  ,pLeft)   /* Few
123e0 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a  er features */..
123f0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73  /*.** Flags pass
12400 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ed to the sqlite
12410 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74  3ExprDup() funct
12420 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61  ion. See the hea
12430 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20  der comment .** 
12440 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
12450 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
12460 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
12470 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
12480 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
12490 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
124a0 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
124b0 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
124c0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
124d0 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
124e0 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
124f0 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
12500 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
12510 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
12520 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
12530 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
12540 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
12550 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
12560 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
12570 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
12580 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
12590 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
125a0 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
125b0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
125c0 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
125d0 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
125e0 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
125f0 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
12600 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
12610 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
12620 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  sed..*/.struct E
12630 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
12640 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
12650 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12660 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
12670 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74  he list */.  int
12680 20 69 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20   iECursor;      
12690 20 20 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73      /* VDBE Curs
126a0 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  or associated wi
126b0 74 68 20 74 68 69 73 20 45 78 70 72 4c 69 73 74  th this ExprList
126c0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
126d0 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
126e0 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
126f0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
12700 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
12710 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr;           /*
12720 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70   The list of exp
12730 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  ressions */.    
12740 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
12750 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
12760 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12770 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
12780 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
12790 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  an;           /*
127a0 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
127b0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
127c0 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
127d0 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
127e0 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
127f0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
12800 20 75 38 20 64 6f 6e 65 3b 20 20 20 20 20 20 20   u8 done;       
12810 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61          /* A fla
12820 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68  g to indicate wh
12830 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  en processing is
12840 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20   finished */.   
12850 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c   u16 iOrderByCol
12860 3b 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f  ;       /* For O
12870 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
12880 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
12890 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31 36 20   set */.    u16 
128a0 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
128b0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
128c0 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20   Parse.aAlias[] 
128d0 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  for zName */.  }
128e0 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20   *a;            
128f0 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61        /* Alloc a
12900 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72   power of two gr
12910 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74  eater or equal t
12920 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f  o nExpr */.};../
12930 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
12940 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
12950 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68  re is used by th
12960 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f  e parser to reco
12970 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70  rd both.** the p
12980 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e  arse tree for an
12990 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
129a0 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75  the span of inpu
129b0 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a  t text for an.**
129c0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a   expression..*/.
129d0 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
129e0 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b  {.  Expr *pExpr;
129f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
12a00 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73   expression pars
12a10 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73  e tree */.  cons
12a20 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20  t char *zStart; 
12a30 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61    /* First chara
12a40 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65  cter of input te
12a50 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
12a60 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a  ar *zEnd;     /*
12a70 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70   One character p
12a80 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69  ast the end of i
12a90 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a  nput text */.};.
12aa0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
12ab0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
12ac0 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
12ad0 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
12ae0 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
12af0 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
12b00 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
12b10 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
12b20 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
12b30 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
12b40 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
12b50 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
12b60 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
12b70 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
12b80 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
12b90 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
12ba0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
12bb0 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
12bc0 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
12bd0 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
12be0 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
12bf0 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
12c00 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
12c10 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
12c20 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
12c30 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
12c40 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
12c50 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
12c60 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
12c70 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
12c80 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
12c90 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
12ca0 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
12cb0 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
12cc0 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
12cd0 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
12ce0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
12cf0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
12d00 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
12d10 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
12d20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
12d30 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
12d40 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
12d50 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
12d60 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
12d70 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
12d80 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
12d90 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
12da0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
12db0 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79  e bitmask dataty
12dc0 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  pe defined below
12dd0 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72   is used for var
12de0 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
12df0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69  ns..**.** Changi
12e00 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36  ng this from a 6
12e10 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69  4-bit to a 32-bi
12e20 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68  t type limits th
12e30 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  e number of.** t
12e40 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20  ables in a join 
12e50 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66  to 32 instead of
12e60 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73   64.  But it als
12e70 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69  o reduces the si
12e80 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62  ze.** of the lib
12e90 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65  rary by 738 byte
12ea0 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79  s on ix86..*/.ty
12eb0 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73  pedef u64 Bitmas
12ec0 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  k;../*.** The nu
12ed0 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
12ee0 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
12ef0 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
12f00 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
12f10 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
12f20 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
12f30 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  ))../*.** The fo
12f40 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
12f50 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
12f60 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
12f70 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
12f80 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
12f90 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
12fa0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
12fb0 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
12fc0 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
12fd0 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
12fe0 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
12ff0 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
13000 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
13010 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
13020 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13030 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
13040 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
13050 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
13060 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
13070 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
13080 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
13090 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
130a0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
130b0 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
130c0 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
130d0 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
130e0 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
130f0 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
13100 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
13110 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
13120 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
13130 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
13140 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
13150 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
13160 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
13170 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
13180 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
13190 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
131a0 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
131b0 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
131c0 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
131d0 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
131e0 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
131f0 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
13200 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
13210 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
13220 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
13230 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
13240 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
13250 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
13260 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
13270 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
13280 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
13290 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
132a0 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
132b0 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
132c0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
132d0 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
132e0 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
132f0 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
13300 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
13310 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
13320 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
13330 0a 20 20 69 31 36 20 6e 53 72 63 3b 20 20 20 20  .  i16 nSrc;    
13340 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13350 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
13360 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
13370 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 31  M clause */.  i1
13380 36 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  6 nAlloc;      /
13390 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
133a0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
133b0 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
133c0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
133d0 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
133e0 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
133f0 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
13400 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
13410 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
13420 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
13430 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
13440 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
13450 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
13460 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
13470 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
13480 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
13490 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
134a0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
134b0 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
134c0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
134d0 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
134e0 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
134f0 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
13500 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
13510 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
13520 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
13530 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
13540 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
13550 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
13560 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
13570 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
13580 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
13590 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
135a0 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
135b0 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
135c0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
135d0 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
135e0 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
135f0 62 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e  b */.    u8 join
13600 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
13610 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
13620 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
13630 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
13640 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  .    unsigned no
13650 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
13660 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
13670 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
13680 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
13690 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
136a0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
136b0 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
136c0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
136d0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69  .    unsigned vi
136e0 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
136f0 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
13700 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
13710 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
13720 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
13730 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20    u8 iSelectId; 
13740 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63      /* If pSelec
13750 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20  t!=0, the id of 
13760 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69  the sub-select i
13770 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a  n EQP */.#endif.
13780 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
13790 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
137a0 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
137b0 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
137c0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
137d0 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
137e0 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
137f0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
13800 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
13810 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
13820 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
13830 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
13840 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
13850 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
13860 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
13870 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
13880 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65  .    char *zInde
13890 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  x;     /* Identi
138a0 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
138b0 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
138c0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e  clause */.    In
138d0 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
138e0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
138f0 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
13900 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61   to zIndex, if a
13910 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  ny */.  } a[1]; 
13920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
13930 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
13940 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
13950 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
13960 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
13970 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
13980 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
13990 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
139a0 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
139b0 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
139c0 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
139d0 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
139e0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
139f0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
13a00 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
13a10 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
13a20 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
13a30 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
13a40 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
13a50 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
13a60 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
13a70 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
13a80 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
13a90 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
13aa0 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
13ab0 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
13ac0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
13ad0 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
13ae0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
13af0 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
13b00 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
13b10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
13b20 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
13b30 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
13b40 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
13b50 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
13b60 2a 20 41 20 57 68 65 72 65 50 6c 61 6e 20 6f 62  * A WherePlan ob
13b70 6a 65 63 74 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ject holds infor
13b80 6d 61 74 69 6f 6e 20 74 68 61 74 20 64 65 73 63  mation that desc
13b90 72 69 62 65 73 20 61 20 6c 6f 6f 6b 75 70 0a 2a  ribes a lookup.*
13ba0 2a 20 73 74 72 61 74 65 67 79 2e 0a 2a 2a 0a 2a  * strategy..**.*
13bb0 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73  * This object is
13bc0 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20   intended to be 
13bd0 6f 70 61 71 75 65 20 6f 75 74 73 69 64 65 20 6f  opaque outside o
13be0 66 20 74 68 65 20 77 68 65 72 65 2e 63 20 6d 6f  f the where.c mo
13bf0 64 75 6c 65 2e 0a 2a 2a 20 49 74 20 69 73 20 69  dule..** It is i
13c00 6e 63 6c 75 64 65 64 20 68 65 72 65 20 6f 6e 6c  ncluded here onl
13c10 79 20 73 6f 20 74 68 61 74 20 74 68 61 74 20 63  y so that that c
13c20 6f 6d 70 69 6c 65 72 20 77 69 6c 6c 20 6b 6e 6f  ompiler will kno
13c30 77 20 68 6f 77 20 62 69 67 20 69 74 0a 2a 2a 20  w how big it.** 
13c40 69 73 2e 20 20 4e 6f 6e 65 20 6f 66 20 74 68 65  is.  None of the
13c50 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73 20   fields in this 
13c60 6f 62 6a 65 63 74 20 73 68 6f 75 6c 64 20 62 65  object should be
13c70 20 75 73 65 64 20 6f 75 74 73 69 64 65 20 6f 66   used outside of
13c80 0a 2a 2a 20 74 68 65 20 77 68 65 72 65 2e 63 20  .** the where.c 
13c90 6d 6f 64 75 6c 65 2e 0a 2a 2a 0a 2a 2a 20 57 69  module..**.** Wi
13ca0 74 68 69 6e 20 74 68 65 20 75 6e 69 6f 6e 2c 20  thin the union, 
13cb0 70 49 64 78 20 69 73 20 6f 6e 6c 79 20 75 73 65  pIdx is only use
13cc0 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26 57  d when wsFlags&W
13cd0 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20  HERE_INDEXED is 
13ce0 74 72 75 65 2e 0a 2a 2a 20 70 54 65 72 6d 20 69  true..** pTerm i
13cf0 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
13d00 20 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 4d   wsFlags&WHERE_M
13d10 55 4c 54 49 5f 4f 52 20 69 73 20 74 72 75 65 2e  ULTI_OR is true.
13d20 20 20 41 6e 64 20 70 56 74 61 62 49 64 78 0a 2a    And pVtabIdx.*
13d30 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  * is only used w
13d40 68 65 6e 20 77 73 46 6c 61 67 73 26 57 48 45 52  hen wsFlags&WHER
13d50 45 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 69  E_VIRTUALTABLE i
13d60 73 20 74 72 75 65 2e 20 20 49 74 20 69 73 20 6e  s true.  It is n
13d70 65 76 65 72 20 74 68 65 0a 2a 2a 20 63 61 73 65  ever the.** case
13d80 20 74 68 61 74 20 6d 6f 72 65 20 74 68 61 6e 20   that more than 
13d90 6f 6e 65 20 6f 66 20 74 68 65 73 65 20 63 6f 6e  one of these con
13da0 64 69 74 69 6f 6e 73 20 69 73 20 74 72 75 65 2e  ditions is true.
13db0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72 65  .*/.struct Where
13dc0 50 6c 61 6e 20 7b 0a 20 20 75 33 32 20 77 73 46  Plan {.  u32 wsF
13dd0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
13de0 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45 52 45          /* WHERE
13df0 5f 2a 20 66 6c 61 67 73 20 74 68 61 74 20 64 65  _* flags that de
13e00 73 63 72 69 62 65 20 74 68 65 20 73 74 72 61 74  scribe the strat
13e10 65 67 79 20 2a 2f 0a 20 20 75 31 36 20 6e 45 71  egy */.  u16 nEq
13e20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13e30 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13e40 72 20 6f 66 20 3d 3d 20 63 6f 6e 73 74 72 61 69  r of == constrai
13e50 6e 74 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4f 42  nts */.  u16 nOB
13e60 53 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Sat;            
13e70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13e80 72 20 6f 66 20 4f 52 44 45 52 20 42 59 20 74 65  r of ORDER BY te
13e90 72 6d 73 20 73 61 74 69 73 66 69 65 64 20 2a 2f  rms satisfied */
13ea0 0a 20 20 64 6f 75 62 6c 65 20 6e 52 6f 77 3b 20  .  double nRow; 
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
13ed0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 28 66  umber of rows (f
13ee0 6f 72 20 45 51 50 29 20 2a 2f 0a 20 20 75 6e 69  or EQP) */.  uni
13ef0 6f 6e 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  on {.    Index *
13f00 70 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 20  pIdx;           
13f10 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
13f20 20 77 68 65 6e 20 57 48 45 52 45 5f 49 4e 44 45   when WHERE_INDE
13f30 58 45 44 20 69 73 20 74 72 75 65 20 2a 2f 0a 20  XED is true */. 
13f40 20 20 20 73 74 72 75 63 74 20 57 68 65 72 65 54     struct WhereT
13f50 65 72 6d 20 2a 70 54 65 72 6d 3b 20 20 20 20 20  erm *pTerm;     
13f60 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
13f70 65 20 74 65 72 6d 20 66 6f 72 20 4f 52 2d 73 65  e term for OR-se
13f80 61 72 63 68 20 2a 2f 0a 20 20 20 20 73 71 6c 69  arch */.    sqli
13f90 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a  te3_index_info *
13fa0 70 56 74 61 62 49 64 78 3b 20 20 2f 2a 20 56 69  pVtabIdx;  /* Vi
13fb0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 64 65  rtual table inde
13fc0 78 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20 7d 20  x to use */.  } 
13fd0 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72  u;.};../*.** For
13fe0 20 65 61 63 68 20 6e 65 73 74 65 64 20 6c 6f 6f   each nested loo
13ff0 70 20 69 6e 20 61 20 57 48 45 52 45 20 63 6c 61  p in a WHERE cla
14000 75 73 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  use implementati
14010 6f 6e 2c 20 74 68 65 20 57 68 65 72 65 49 6e 66  on, the WhereInf
14020 6f 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 63  o.** structure c
14030 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
14040 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
14050 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
14060 69 73 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  is structure.** 
14070 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62  is intended to b
14080 65 20 70 72 69 76 61 74 65 20 74 6f 20 74 68 65  e private to the
14090 20 77 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20   where.c module 
140a0 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  and should not b
140b0 65 0a 2a 2a 20 61 63 63 65 73 73 20 6f 72 20 6d  e.** access or m
140c0 6f 64 69 66 69 65 64 20 62 79 20 6f 74 68 65 72  odified by other
140d0 20 6d 6f 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20   modules..**.** 
140e0 54 68 65 20 70 49 64 78 49 6e 66 6f 20 66 69 65  The pIdxInfo fie
140f0 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  ld is used to he
14100 6c 70 20 70 69 63 6b 20 74 68 65 20 62 65 73 74  lp pick the best
14110 20 69 6e 64 65 78 20 6f 6e 20 61 0a 2a 2a 20 76   index on a.** v
14120 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
14130 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e  he pIdxInfo poin
14140 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 69 6e 64  ter contains ind
14150 65 78 69 6e 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61  exing.** informa
14160 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 69 2d 74  tion for the i-t
14170 68 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 46  h table in the F
14180 52 4f 4d 20 63 6c 61 75 73 65 20 62 65 66 6f 72  ROM clause befor
14190 65 20 72 65 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a  e reordering..**
141a0 20 41 6c 6c 20 74 68 65 20 70 49 64 78 49 6e 66   All the pIdxInf
141b0 6f 20 70 6f 69 6e 74 65 72 73 20 61 72 65 20 66  o pointers are f
141c0 72 65 65 64 20 62 79 20 77 68 65 72 65 49 6e 66  reed by whereInf
141d0 6f 46 72 65 65 28 29 20 69 6e 20 77 68 65 72 65  oFree() in where
141e0 2e 63 2e 0a 2a 2a 20 41 6c 6c 20 6f 74 68 65 72  .c..** All other
141f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
14200 74 68 65 20 69 2d 74 68 20 57 68 65 72 65 4c 65  the i-th WhereLe
14210 76 65 6c 20 6f 62 6a 65 63 74 20 66 6f 72 20 74  vel object for t
14220 68 65 20 69 2d 74 68 20 74 61 62 6c 65 0a 2a 2a  he i-th table.**
14230 20 61 66 74 65 72 20 46 52 4f 4d 20 63 6c 61 75   after FROM clau
14240 73 65 20 6f 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a  se ordering..*/.
14250 73 74 72 75 63 74 20 57 68 65 72 65 4c 65 76 65  struct WhereLeve
14260 6c 20 7b 0a 20 20 57 68 65 72 65 50 6c 61 6e 20  l {.  WherePlan 
14270 70 6c 61 6e 3b 20 20 20 20 20 20 20 2f 2a 20 71  plan;       /* q
14280 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 74 68  uery plan for th
14290 69 73 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  is element of th
142a0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
142b0 0a 20 20 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e  .  int iLeftJoin
142c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f  ;        /* Memo
142d0 72 79 20 63 65 6c 6c 20 75 73 65 64 20 74 6f 20  ry cell used to 
142e0 69 6d 70 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f  implement LEFT O
142f0 55 54 45 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69  UTER JOIN */.  i
14300 6e 74 20 69 54 61 62 43 75 72 3b 20 20 20 20 20  nt iTabCur;     
14310 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
14320 20 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20   cursor used to 
14330 61 63 63 65 73 73 20 74 68 65 20 74 61 62 6c 65  access the table
14340 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75   */.  int iIdxCu
14350 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
14360 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 75  he VDBE cursor u
14370 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 70 49  sed to access pI
14380 64 78 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  dx */.  int addr
14390 42 72 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Brk;          /*
143a0 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72   Jump here to br
143b0 65 61 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  eak out of the l
143c0 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  oop */.  int add
143d0 72 4e 78 74 3b 20 20 20 20 20 20 20 20 20 20 2f  rNxt;          /
143e0 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 73  * Jump here to s
143f0 74 61 72 74 20 74 68 65 20 6e 65 78 74 20 49 4e  tart the next IN
14400 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a   combination */.
14410 20 20 69 6e 74 20 61 64 64 72 43 6f 6e 74 3b 20    int addrCont; 
14420 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
14430 68 65 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65  here to continue
14440 20 77 69 74 68 20 74 68 65 20 6e 65 78 74 20 6c   with the next l
14450 6f 6f 70 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69  oop cycle */.  i
14460 6e 74 20 61 64 64 72 46 69 72 73 74 3b 20 20 20  nt addrFirst;   
14470 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e       /* First in
14480 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 69 6e 74  struction of int
14490 65 72 69 6f 72 20 6f 66 20 74 68 65 20 6c 6f 6f  erior of the loo
144a0 70 20 2a 2f 0a 20 20 75 38 20 69 46 72 6f 6d 3b  p */.  u8 iFrom;
144b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
144c0 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 74  Which entry in t
144d0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
144e0 2f 0a 20 20 75 38 20 6f 70 2c 20 70 35 3b 20 20  /.  u8 op, p5;  
144f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
14500 6f 64 65 20 61 6e 64 20 50 35 20 6f 66 20 74 68  ode and P5 of th
14510 65 20 6f 70 63 6f 64 65 20 74 68 61 74 20 65 6e  e opcode that en
14520 64 73 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  ds the loop */. 
14530 20 69 6e 74 20 70 31 2c 20 70 32 3b 20 20 20 20   int p1, p2;    
14540 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e         /* Operan
14550 64 73 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ds of the opcode
14560 20 75 73 65 64 20 74 6f 20 65 6e 64 73 20 74 68   used to ends th
14570 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f  e loop */.  unio
14580 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
14590 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
145a0 20 74 68 61 74 20 64 65 70 65 6e 64 73 20 6f 6e   that depends on
145b0 20 70 6c 61 6e 2e 77 73 46 6c 61 67 73 20 2a 2f   plan.wsFlags */
145c0 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20  .    struct {.  
145d0 20 20 20 20 69 6e 74 20 6e 49 6e 3b 20 20 20 20      int nIn;    
145e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
145f0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
14600 6e 20 61 49 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20  n aInLoop[] */. 
14610 20 20 20 20 20 73 74 72 75 63 74 20 49 6e 4c 6f       struct InLo
14620 6f 70 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  op {.        int
14630 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
14640 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
14650 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
14660 68 69 73 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  his IN operator 
14670 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61  */.        int a
14680 64 64 72 49 6e 54 6f 70 3b 20 20 20 20 20 20 20  ddrInTop;       
14690 20 20 2f 2a 20 54 6f 70 20 6f 66 20 74 68 65 20    /* Top of the 
146a0 49 4e 20 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 20  IN loop */.     
146b0 20 7d 20 2a 61 49 6e 4c 6f 6f 70 3b 20 20 20 20   } *aInLoop;    
146c0 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
146d0 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
146e0 20 6e 65 73 74 65 64 20 49 4e 20 6f 70 65 72 61   nested IN opera
146f0 74 6f 72 20 2a 2f 0a 20 20 20 20 7d 20 69 6e 3b  tor */.    } in;
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 2f 2a 20 55 73 65 64 20 77 68 65 6e 20 70 6c   /* Used when pl
14720 61 6e 2e 77 73 46 6c 61 67 73 26 57 48 45 52 45  an.wsFlags&WHERE
14730 5f 49 4e 5f 41 42 4c 45 20 2a 2f 0a 20 20 20 20  _IN_ABLE */.    
14740 49 6e 64 65 78 20 2a 70 43 6f 76 69 64 78 3b 20  Index *pCovidx; 
14750 20 20 20 20 20 20 2f 2a 20 50 6f 73 73 69 62 6c        /* Possibl
14760 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  e covering index
14770 20 66 6f 72 20 57 48 45 52 45 5f 4d 55 4c 54 49   for WHERE_MULTI
14780 5f 4f 52 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20  _OR */.  } u;.  
14790 64 6f 75 62 6c 65 20 72 4f 70 74 43 6f 73 74 3b  double rOptCost;
147a0 20 20 20 20 20 20 2f 2a 20 22 4f 70 74 69 6d 61        /* "Optima
147b0 6c 22 20 63 6f 73 74 20 66 6f 72 20 74 68 69 73  l" cost for this
147c0 20 6c 65 76 65 6c 20 2a 2f 0a 0a 20 20 2f 2a 20   level */..  /* 
147d0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69  The following fi
147e0 65 6c 64 20 69 73 20 72 65 61 6c 6c 79 20 6e 6f  eld is really no
147f0 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 75  t part of the cu
14800 72 72 65 6e 74 20 6c 65 76 65 6c 2e 20 20 42 75  rrent level.  Bu
14810 74 0a 20 20 2a 2a 20 77 65 20 6e 65 65 64 20 61  t.  ** we need a
14820 20 70 6c 61 63 65 20 74 6f 20 63 61 63 68 65 20   place to cache 
14830 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
14840 64 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  dex information 
14850 66 6f 72 20 65 61 63 68 0a 20 20 2a 2a 20 76 69  for each.  ** vi
14860 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 74  rtual table in t
14870 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 61  he FROM clause a
14880 6e 64 20 74 68 65 20 57 68 65 72 65 4c 65 76 65  nd the WhereLeve
14890 6c 20 73 74 72 75 63 74 75 72 65 20 69 73 0a 20  l structure is. 
148a0 20 2a 2a 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74   ** a convenient
148b0 20 70 6c 61 63 65 20 73 69 6e 63 65 20 74 68 65   place since the
148c0 72 65 20 69 73 20 6f 6e 65 20 57 68 65 72 65 4c  re is one WhereL
148d0 65 76 65 6c 20 66 6f 72 20 65 61 63 68 20 46 52  evel for each FR
148e0 4f 4d 20 63 6c 61 75 73 65 0a 20 20 2a 2a 20 65  OM clause.  ** e
148f0 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 73  lement..  */.  s
14900 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66  qlite3_index_inf
14910 6f 20 2a 70 49 64 78 49 6e 66 6f 3b 20 20 2f 2a  o *pIdxInfo;  /*
14920 20 49 6e 64 65 78 20 69 6e 66 6f 20 66 6f 72 20   Index info for 
14930 6e 2d 74 68 20 73 6f 75 72 63 65 20 74 61 62 6c  n-th source tabl
14940 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 46  e */.};../*.** F
14950 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65  lags appropriate
14960 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c   for the wctrlFl
14970 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66  ags parameter of
14980 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67   sqlite3WhereBeg
14990 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20  in().** and the 
149a0 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46  WhereInfo.wctrlF
149b0 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a  lags member..*/.
149c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
149d0 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
149e0 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
149f0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14a00 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
14a10 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
14a20 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
14a30 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
14a40 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
14a50 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
14a60 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
14a70 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
14a80 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
14a90 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
14aa0 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
14ab0 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
14ac0 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
14ad0 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
14ae0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
14af0 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
14b00 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  008 /* Ok to ret
14b10 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
14b20 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
14b30 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f  ine WHERE_OMIT_O
14b40 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31  PEN_CLOSE  0x001
14b50 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f  0 /* Table curso
14b60 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f  rs are already o
14b70 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  pen */.#define W
14b80 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45  HERE_FORCE_TABLE
14b90 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20        0x0020 /* 
14ba0 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e  Do not use an in
14bb0 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20  dex-only search 
14bc0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14bd0 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20  _ONETABLE_ONLY  
14be0 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79    0x0040 /* Only
14bf0 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61   code the 1st ta
14c00 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20  ble in pTabList 
14c10 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14c20 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20  _AND_ONLY       
14c30 20 20 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27    0x0080 /* Don'
14c40 74 20 75 73 65 20 69 6e 64 69 63 65 73 20 66 6f  t use indices fo
14c50 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 0a 2f  r OR terms */../
14c60 2a 0a 2a 2a 20 54 68 65 20 57 48 45 52 45 20 63  *.** The WHERE c
14c70 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
14c80 20 72 6f 75 74 69 6e 65 20 68 61 73 20 74 77 6f   routine has two
14c90 20 68 61 6c 76 65 73 2e 20 20 54 68 65 0a 2a 2a   halves.  The.**
14ca0 20 66 69 72 73 74 20 70 61 72 74 20 64 6f 65 73   first part does
14cb0 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
14cc0 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 61 6e 64  e WHERE loop and
14cd0 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a 20 68   the second.** h
14ce0 61 6c 66 20 64 6f 65 73 20 74 68 65 20 74 61 69  alf does the tai
14cf0 6c 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c  l of the WHERE l
14d00 6f 6f 70 2e 20 20 41 6e 20 69 6e 73 74 61 6e 63  oop.  An instanc
14d10 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
14d20 75 63 74 75 72 65 20 69 73 20 72 65 74 75 72 6e  ucture is return
14d30 65 64 20 62 79 20 74 68 65 20 66 69 72 73 74 20  ed by the first 
14d40 68 61 6c 66 20 61 6e 64 20 70 61 73 73 65 64 0a  half and passed.
14d50 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 65 63 6f  ** into the seco
14d60 6e 64 20 68 61 6c 66 20 74 6f 20 67 69 76 65 20  nd half to give 
14d70 73 6f 6d 65 20 63 6f 6e 74 69 6e 75 69 74 79 2e  some continuity.
14d80 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72 65  .*/.struct Where
14d90 49 6e 66 6f 20 7b 0a 20 20 50 61 72 73 65 20 2a  Info {.  Parse *
14da0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
14db0 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20 61 6e     /* Parsing an
14dc0 64 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6e  d code generatin
14dd0 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 53  g context */.  S
14de0 72 63 4c 69 73 74 20 2a 70 54 61 62 4c 69 73 74  rcList *pTabList
14df0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
14e00 20 6f 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68   of tables in th
14e10 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 31 36 20  e join */.  u16 
14e20 6e 4f 42 53 61 74 3b 20 20 20 20 20 20 20 20 20  nOBSat;         
14e30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14e40 6f 66 20 4f 52 44 45 52 20 42 59 20 74 65 72 6d  of ORDER BY term
14e50 73 20 73 61 74 69 73 66 69 65 64 20 62 79 20 69  s satisfied by i
14e60 6e 64 69 63 65 73 20 2a 2f 0a 20 20 75 31 36 20  ndices */.  u16 
14e70 77 63 74 72 6c 46 6c 61 67 73 3b 20 20 20 20 20  wctrlFlags;     
14e80 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 6f        /* Flags o
14e90 72 69 67 69 6e 61 6c 6c 79 20 70 61 73 73 65 64  riginally passed
14ea0 20 74 6f 20 73 71 6c 69 74 65 33 57 68 65 72 65   to sqlite3Where
14eb0 42 65 67 69 6e 28 29 20 2a 2f 0a 20 20 75 38 20  Begin() */.  u8 
14ec0 6f 6b 4f 6e 65 50 61 73 73 3b 20 20 20 20 20 20  okOnePass;      
14ed0 20 20 20 20 20 20 20 2f 2a 20 4f 6b 20 74 6f 20         /* Ok to 
14ee0 75 73 65 20 6f 6e 65 2d 70 61 73 73 20 61 6c 67  use one-pass alg
14ef0 6f 72 69 74 68 6d 20 66 6f 72 20 55 50 44 41 54  orithm for UPDAT
14f00 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38  E/DELETE */.  u8
14f10 20 75 6e 74 65 73 74 65 64 54 65 72 6d 73 3b 20   untestedTerms; 
14f20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 74 20 61          /* Not a
14f30 6c 6c 20 57 48 45 52 45 20 74 65 72 6d 73 20 72  ll WHERE terms r
14f40 65 73 6f 6c 76 65 64 20 62 79 20 6f 75 74 65 72  esolved by outer
14f50 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75 38 20 65 44   loop */.  u8 eD
14f60 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
14f70 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
14f80 68 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  he WHERE_DISTINC
14f90 54 5f 2a 20 76 61 6c 75 65 73 20 62 65 6c 6f 77  T_* values below
14fa0 20 2a 2f 0a 20 20 69 6e 74 20 69 54 6f 70 3b 20   */.  int iTop; 
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 2f 2a 20 54 68 65 20 76 65 72 79 20 62 65 67 69  /* The very begi
14fd0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 57 48 45  nning of the WHE
14fe0 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74  RE loop */.  int
14ff0 20 69 43 6f 6e 74 69 6e 75 65 3b 20 20 20 20 20   iContinue;     
15000 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
15010 65 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20  ere to continue 
15020 77 69 74 68 20 6e 65 78 74 20 72 65 63 6f 72 64  with next record
15030 20 2a 2f 0a 20 20 69 6e 74 20 69 42 72 65 61 6b   */.  int iBreak
15040 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15050 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
15060 62 72 65 61 6b 20 6f 75 74 20 6f 66 20 74 68 65  break out of the
15070 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   loop */.  int n
15080 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
15090 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
150a0 66 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 2a 2f  f nested loop */
150b0 0a 20 20 73 74 72 75 63 74 20 57 68 65 72 65 43  .  struct WhereC
150c0 6c 61 75 73 65 20 2a 70 57 43 3b 20 20 2f 2a 20  lause *pWC;  /* 
150d0 44 65 63 6f 6d 70 6f 73 69 74 69 6f 6e 20 6f 66  Decomposition of
150e0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
150f0 65 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 73 61  e */.  double sa
15100 76 65 64 4e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  vedNQueryLoop;  
15110 20 2f 2a 20 70 50 61 72 73 65 2d 3e 6e 51 75 65   /* pParse->nQue
15120 72 79 4c 6f 6f 70 20 6f 75 74 73 69 64 65 20 74  ryLoop outside t
15130 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f  he WHERE loop */
15140 0a 20 20 64 6f 75 62 6c 65 20 6e 52 6f 77 4f 75  .  double nRowOu
15150 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
15160 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
15170 20 6f 66 20 6f 75 74 70 75 74 20 72 6f 77 73 20   of output rows 
15180 2a 2f 0a 20 20 57 68 65 72 65 4c 65 76 65 6c 20  */.  WhereLevel 
15190 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  a[1];          /
151a0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
151b0 6f 75 74 20 65 61 63 68 20 6e 65 73 74 20 6c 6f  out each nest lo
151c0 6f 70 20 69 6e 20 57 48 45 52 45 20 2a 2f 0a 7d  op in WHERE */.}
151d0 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
151e0 6c 75 65 73 20 66 6f 72 20 57 68 65 72 65 49 6e  lues for WhereIn
151f0 66 6f 2e 65 44 69 73 74 69 6e 63 74 20 61 6e 64  fo.eDistinct and
15200 20 44 69 73 74 69 6e 63 74 43 74 78 2e 65 54 6e   DistinctCtx.eTn
15210 63 74 54 79 70 65 20 2a 2f 0a 23 64 65 66 69 6e  ctType */.#defin
15220 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
15230 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
15240 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
15250 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
15260 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
15270 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
15280 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
15290 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
152a0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
152b0 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
152c0 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
152d0 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
152e0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
152f0 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
15300 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
15310 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
15320 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
15330 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
15340 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
15350 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
15360 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
15370 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
15380 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
15390 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
153a0 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
153b0 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
153c0 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
153d0 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
153e0 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
153f0 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
15400 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
15410 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
15420 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
15430 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
15440 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
15450 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
15460 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
15470 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
15480 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
15490 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
154a0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
154b0 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
154c0 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
154d0 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
154e0 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
154f0 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
15500 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
15510 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
15520 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
15530 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
15540 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
15550 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
15560 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
15570 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
15580 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
15590 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
155a0 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
155b0 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
155c0 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
155d0 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
155e0 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
155f0 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
15600 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
15610 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
15620 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
15630 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
15640 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
15650 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
15660 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
15670 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
15680 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
15690 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
156a0 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
156b0 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
156c0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
156d0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
156e0 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
156f0 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
15700 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
15710 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
15720 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
15730 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
15740 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
15750 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
15760 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
15770 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
15780 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
15790 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
157a0 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
157b0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
157c0 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
157d0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
157e0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
157f0 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
15800 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
15810 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
15820 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
15830 69 6f 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  ions */.  AggInf
15840 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
15850 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
15860 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
15870 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
15880 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
15890 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
158a0 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
158b0 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
158c0 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
158d0 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
158e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
158f0 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
15900 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
15910 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
15920 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15930 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
15940 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
15950 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
15960 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20    u8 ncFlags;   
15970 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
15980 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
15990 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
159a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
159b0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
159c0 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
159d0 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
159e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
159f0 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20 20 20  lowAgg  0x01    
15a00 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
15a10 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
15a20 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
15a30 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
15a40 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f  0x02    /* One o
15a50 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
15a60 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
15a70 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
15a80 43 68 65 63 6b 20 20 20 30 78 30 34 20 20 20 20  Check   0x04    
15a90 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
15aa0 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
15ab0 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
15ac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
15ad0 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20 20 20  nAggFunc 0x08   
15ae0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
15af0 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
15b00 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
15b10 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
15b20 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
15b30 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
15b40 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
15b50 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
15b60 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
15b70 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
15b80 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
15b90 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
15ba0 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
15bb0 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
15bc0 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
15bd0 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
15be0 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
15bf0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
15c00 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
15c10 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
15c20 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
15c30 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
15c40 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
15c50 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
15c60 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
15c70 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
15c80 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
15c90 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
15ca0 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
15cb0 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
15cc0 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
15cd0 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
15ce0 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
15cf0 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
15d00 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
15d10 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
15d20 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
15d30 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
15d40 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
15d50 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
15d60 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
15d70 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
15d80 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
15d90 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
15da0 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
15db0 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
15dc0 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
15dd0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
15de0 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
15df0 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
15e00 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
15e10 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
15e20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
15e30 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
15e40 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
15e50 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
15e60 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
15e70 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
15e80 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
15e90 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
15ea0 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
15eb0 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
15ec0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
15ed0 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
15ee0 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
15ef0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
15f00 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
15f10 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
15f20 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
15f30 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
15f40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
15f50 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
15f60 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
15f70 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
15f80 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
15f90 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
15fa0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
15fb0 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
15fc0 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
15fd0 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36  _EXCEPT */.  u16
15fe0 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
15ff0 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
16000 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
16010 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
16020 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
16030 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
16040 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
16050 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
16060 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  int addrOpenEphm
16070 5b 33 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  [3];   /* OP_Ope
16080 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72  nEphem opcodes r
16090 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73  elated to this s
160a0 65 6c 65 63 74 20 2a 2f 0a 20 20 64 6f 75 62 6c  elect */.  doubl
160b0 65 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20  e nSelectRow;   
160c0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
160d0 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
160e0 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rows */.  SrcLis
160f0 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20  t *pSrc;        
16100 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61   /* The FROM cla
16110 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
16120 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20  Where;          
16130 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
16140 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
16150 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
16160 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20  /* The GROUP BY 
16170 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
16180 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20   *pHaving;      
16190 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47     /* The HAVING
161a0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
161b0 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
161c0 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52      /* The ORDER
161d0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
161e0 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20  Select *pPrior; 
161f0 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20         /* Prior 
16200 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
16210 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
16220 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63  ement */.  Selec
16230 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
16240 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74    /* Next select
16250 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20   to the left in 
16260 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20  a compound */.  
16270 53 65 6c 65 63 74 20 2a 70 52 69 67 68 74 6d 6f  Select *pRightmo
16280 73 74 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 2d  st;    /* Right-
16290 6d 6f 73 74 20 73 65 6c 65 63 74 20 69 6e 20 61  most select in a
162a0 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74   compound select
162b0 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
162c0 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20  Expr *pLimit;   
162d0 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20         /* LIMIT 
162e0 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
162f0 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
16300 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66   */.  Expr *pOff
16310 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  set;         /* 
16320 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f  OFFSET expressio
16330 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
16340 74 20 75 73 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  t used. */.};../
16350 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
16360 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ues for Select.s
16370 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53  elFlags.  The "S
16380 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73  F" prefix stands
16390 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20   for.** "Select 
163a0 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Flag"..*/.#defin
163b0 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20  e SF_Distinct   
163c0 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
163d0 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65  Output should be
163e0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65   DISTINCT */.#de
163f0 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
16400 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20          0x0002  
16410 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
16420 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
16430 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
16440 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 20  Aggregate       
16450 30 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61  0x0004  /* Conta
16460 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
16470 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
16480 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65  ne SF_UsesEpheme
16490 72 61 6c 20 20 20 30 78 30 30 30 38 20 20 2f 2a  ral   0x0008  /*
164a0 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70   Uses the OpenEp
164b0 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a  hemeral opcode *
164c0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70  /.#define SF_Exp
164d0 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78 30  anded        0x0
164e0 30 31 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53  010  /* sqlite3S
164f0 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61  electExpand() ca
16500 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a  lled on this */.
16510 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79  #define SF_HasTy
16520 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30 32  peInfo     0x002
16530 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75  0  /* FROM subqu
16540 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65  eries have Table
16550 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65   metadata */.#de
16560 66 69 6e 65 20 53 46 5f 55 73 65 53 6f 72 74 65  fine SF_UseSorte
16570 72 20 20 20 20 20 20 20 30 78 30 30 34 30 20 20  r       0x0040  
16580 2f 2a 20 53 6f 72 74 20 75 73 69 6e 67 20 61 20  /* Sort using a 
16590 73 6f 72 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e  sorter */.#defin
165a0 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
165b0 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20       0x0080  /* 
165c0 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
165d0 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
165e0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 74  /.#define SF_Mat
165f0 65 72 69 61 6c 69 7a 65 20 20 20 20 20 30 78 30  erialize     0x0
16600 31 30 30 20 20 2f 2a 20 46 6f 72 63 65 20 6d 61  100  /* Force ma
16610 74 65 72 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  terialization of
16620 20 76 69 65 77 73 20 2a 2f 0a 23 64 65 66 69 6e   views */.#defin
16630 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20  e SF_NestedFrom 
16640 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20       0x0200  /* 
16650 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74  Part of a parent
16660 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61  hesized FROM cla
16670 75 73 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  use */.../*.** T
16680 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
16690 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20 64 69  select can be di
166a0 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76  stributed in sev
166b0 65 72 61 6c 20 77 61 79 73 2e 20 20 54 68 65 0a  eral ways.  The.
166c0 2a 2a 20 22 53 52 54 22 20 70 72 65 66 69 78 20  ** "SRT" prefix 
166d0 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
166e0 73 75 6c 74 20 54 79 70 65 22 2e 0a 2a 2f 0a 23  sult Type"..*/.#
166f0 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
16700 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
16710 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
16720 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
16730 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
16740 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
16750 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
16760 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
16770 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
16780 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
16790 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
167a0 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
167b0 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
167c0 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
167d0 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
167e0 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
167f0 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a   anywhere */../*
16800 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
16810 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20  ause is ignored 
16820 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  for all of the a
16830 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
16840 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79  IgnorableOrderby
16850 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c  (X) ((X->eDest)<
16860 3d 53 52 54 5f 44 69 73 63 61 72 64 29 0a 0a 23  =SRT_Discard)..#
16870 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
16880 74 20 20 20 20 20 20 20 35 20 20 2f 2a 20 4f 75  t       5  /* Ou
16890 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
168a0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
168b0 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
168c0 20 20 20 20 36 20 20 2f 2a 20 53 74 6f 72 65 20      6  /* Store 
168d0 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
168e0 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
168f0 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
16900 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
16910 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
16920 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
16930 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
16940 20 20 20 20 20 20 20 20 38 20 20 2f 2a 20 53 74          8  /* St
16950 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
16960 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
16970 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
16980 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
16990 61 62 20 20 20 20 20 39 20 20 2f 2a 20 43 72 65  ab     9  /* Cre
169a0 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
169b0 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
169c0 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
169d0 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
169e0 69 6e 65 20 20 20 31 30 20 20 2f 2a 20 47 65 6e  ine   10  /* Gen
169f0 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
16a00 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
16a10 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
16a20 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
16a30 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
16a40 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
16a50 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
16a60 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16a70 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
16a80 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
16a90 65 73 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  est;         /* 
16aa0 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
16ab0 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
16ac0 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
16ad0 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  e. */.  char aff
16ae0 53 64 73 74 3b 20 20 20 20 20 2f 2a 20 41 66 66  Sdst;     /* Aff
16af0 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
16b00 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
16b10 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
16b20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
16b30 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
16b40 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
16b50 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
16b60 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  iSdst;        /*
16b70 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
16b80 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
16b90 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
16ba0 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
16bb0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
16bc0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
16bd0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
16be0 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
16bf0 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
16c00 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
16c10 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
16c20 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73  EMENT .** tables
16c30 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
16c40 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
16c50 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
16c60 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
16c70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
16c80 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
16c90 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
16ca0 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
16cb0 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
16cc0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
16cd0 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
16ce0 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
16cf0 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
16d00 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
16d10 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
16d20 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69  s are down withi
16d30 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
16d40 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
16d50 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
16d60 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
16d70 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
16d80 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
16d90 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
16da0 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
16db0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
16dc0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
16dd0 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
16de0 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
16df0 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
16e00 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
16e10 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
16e20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
16e30 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
16e40 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
16e50 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
16e60 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16e80 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
16e90 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
16ea0 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
16eb0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
16ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
16ed0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
16ee0 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
16ef0 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
16f00 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
16f10 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
16f20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
16f30 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
16f40 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
16f50 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
16f60 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
16f70 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
16f80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
16f90 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
16fa0 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20  ed for each .** 
16fb0 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
16fc0 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
16fd0 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
16fe0 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
16ff0 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
17000 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
17010 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
17020 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
17030 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
17040 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
17050 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
17060 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
17070 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
17080 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
17090 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
170a0 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
170b0 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
170c0 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
170d0 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
170e0 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
170f0 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
17100 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
17110 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
17120 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
17130 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
17140 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
17150 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
17160 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
17170 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
17180 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
17190 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
171a0 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
171b0 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
171c0 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
171d0 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
171e0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
171f0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
17200 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
17210 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
17220 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
17230 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
17240 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
17250 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a  ult of INSERT .*
17260 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
17270 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
17280 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
17290 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
172a0 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
172b0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
172c0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
172d0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
172e0 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
172f0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
17300 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
17310 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
17320 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
17330 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
17340 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
17350 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
17360 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
17370 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
17380 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
17390 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
173a0 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
173b0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
173c0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
173d0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
173e0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
173f0 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
17400 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
17410 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
17420 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
17430 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
17440 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
17450 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
17460 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
17470 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
17480 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
17490 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
174a0 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
174b0 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
174c0 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20  yDbMask;.#else. 
174d0 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
174e0 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
174f0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
17500 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65  SQL parser conte
17510 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74  xt.  A copy of t
17520 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
17530 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
17540 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  ** the parser an
17550 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20  d down into all 
17560 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f  the parser actio
17570 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  n routine in ord
17580 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61  er to.** carry a
17590 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f  round informatio
175a0 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c  n that is global
175b0 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70   to the entire p
175c0 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  arse..**.** The 
175d0 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76  structure is div
175e0 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61  ided into two pa
175f0 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70  rts.  When the p
17600 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a  arser and code.*
17610 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20  * generate call 
17620 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72  themselves recur
17630 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73  sively, the firs
17640 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74  t part of the st
17650 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f  ructure.** is co
17660 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73  nstant but the s
17670 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65  econd part is re
17680 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e  set at the begin
17690 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a  ning and end of.
176a0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
176b0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61  n..**.** The nTa
176c0 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62  bleLock and aTab
176d0 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73  leLock variables
176e0 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69   are only used i
176f0 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  f the shared-cac
17700 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  he .** feature i
17710 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71  s enabled (if sq
17720 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53  lite3Tsd()->useS
17730 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75  haredData is tru
17740 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20  e). They are.** 
17750 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
17760 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c  e set of table-l
17770 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79  ocks required by
17780 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
17790 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64  eing.** compiled
177a0 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  . Function sqlit
177b0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73  e3TableLock() is
177c0 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74   used to add ent
177d0 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  ries to the.** l
177e0 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ist..*/.struct P
177f0 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  arse {.  sqlite3
17800 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
17810 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   The main databa
17820 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
17830 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
17840 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72         /* An err
17850 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
17860 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
17870 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e       /* An engin
17880 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20  e for executing 
17890 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64  database bytecod
178a0 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  e */.  int rc;  
178b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
178c0 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
178d0 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75  execution */.  u
178e0 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20  8 colNamesSet;  
178f0 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65      /* TRUE afte
17900 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20  r OP_ColumnName 
17910 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20  has been issued 
17920 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38  to pVdbe */.  u8
17930 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20   checkSchema;   
17940 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68     /* Causes sch
17950 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b  ema cookie check
17960 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
17970 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20  */.  u8 nested; 
17980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17990 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
179a0 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65  lls to the parse
179b0 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  r/code generator
179c0 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65   */.  u8 nTempRe
179d0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  g;         /* Nu
179e0 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
179f0 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61  y registers in a
17a00 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75  TempReg[] */.  u
17a10 38 20 6e 54 65 6d 70 49 6e 55 73 65 3b 20 20 20  8 nTempInUse;   
17a20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17a30 20 61 54 65 6d 70 52 65 67 5b 5d 20 63 75 72 72   aTempReg[] curr
17a40 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75  ently checked ou
17a50 74 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61  t */.  u8 nColCa
17a60 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  che;        /* N
17a70 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
17a80 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20   in aColCache[] 
17a90 2a 2f 0a 20 20 75 38 20 69 43 6f 6c 43 61 63 68  */.  u8 iColCach
17aa0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  e;        /* Nex
17ab0 74 20 65 6e 74 72 79 20 69 6e 20 61 43 6f 6c 43  t entry in aColC
17ac0 61 63 68 65 5b 5d 20 74 6f 20 72 65 70 6c 61 63  ache[] to replac
17ad0 65 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  e */.  u8 isMult
17ae0 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
17af0 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
17b00 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
17b10 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
17b20 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
17b30 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
17b40 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
17b50 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
17b60 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
17b70 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
17b80 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  ];     /* Holdin
17b90 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
17ba0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
17bb0 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
17bc0 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
17bd0 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
17be0 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
17bf0 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
17c00 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
17c10 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
17c20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
17c30 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
17c40 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
17c50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17c60 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
17c70 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
17c80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17c90 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
17ca0 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
17cb0 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
17cc0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
17cd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
17ce0 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
17cf0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53   far */.  int nS
17d00 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  et;            /
17d10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73  * Number of sets
17d20 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
17d30 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20    int nOnce;    
17d40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17d50 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74   of OP_Once inst
17d60 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20  ructions so far 
17d70 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b  */.  int ckBase;
17d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
17d90 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64 61  e register of da
17da0 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20  ta during check 
17db0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
17dc0 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c   int iCacheLevel
17dd0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68  ;     /* ColCach
17de0 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f  e valid when aCo
17df0 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c  lCache[].iLevel<
17e00 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a  =iCacheLevel */.
17e10 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b    int iCacheCnt;
17e20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
17e30 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  r used to genera
17e40 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c  te aColCache[].l
17e50 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 73  ru values */.  s
17e60 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
17e70 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
17e80 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
17e90 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
17ea0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
17eb0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
17ec0 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
17ed0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
17ee0 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
17ef0 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
17f00 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
17f10 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
17f20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
17f30 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
17f40 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
17f50 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
17f60 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
17f70 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
17f80 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
17f90 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
17fa0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17fc0 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
17fd0 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
17fe0 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
17ff0 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
18000 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
18010 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
18020 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
18030 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
18040 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
18050 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
18060 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
18070 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
18080 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
18090 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
180a0 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
180b0 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
180c0 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
180d0 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20 20 20 20  cookieGoto;     
180e0 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
180f0 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b 69 65  P_Goto to cookie
18100 20 76 65 72 69 66 69 65 72 20 73 75 62 72 6f 75   verifier subrou
18110 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  tine */.  int co
18120 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45  okieValue[SQLITE
18130 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d  _MAX_ATTACHED+2]
18140 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20  ;  /* Values of 
18150 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66  cookies to verif
18160 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
18170 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
18180 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
18190 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
181a0 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
181b0 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
181c0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
181d0 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
181e0 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
181f0 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
18200 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
18210 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
18220 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
18230 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
18240 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 54 6f 6b  program */.  Tok
18250 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d  en constraintNam
18260 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  e;/* Name of the
18270 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72   constraint curr
18280 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73  ently being pars
18290 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
182a0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
182b0 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61  _CACHE.  int nTa
182c0 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  bleLock;        
182d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63  /* Number of loc
182e0 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b  ks in aTableLock
182f0 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20   */.  TableLock 
18300 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20  *aTableLock; /* 
18310 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c  Required table l
18320 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d  ocks for shared-
18330 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65  cache mode */.#e
18340 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e  ndif.  AutoincIn
18350 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49  fo *pAinc;  /* I
18360 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
18370 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63   AUTOINCREMENT c
18380 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  ounters */..  /*
18390 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
183a0 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74  d while coding t
183b0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
183c0 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
183d0 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
183e0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
183f0 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
18400 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
18410 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
18420 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
18430 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
18440 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 64 6f  oded for */.  do
18450 75 62 6c 65 20 6e 51 75 65 72 79 4c 6f 6f 70 3b  uble nQueryLoop;
18460 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
18470 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
18480 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
18490 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
184a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
184b0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
184c0 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
184d0 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
184e0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
184f0 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
18500 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
18510 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
18520 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
18530 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
18540 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
18550 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
18560 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
18570 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
18580 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
18590 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
185a0 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
185b0 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
185c0 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
185d0 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   /* Above is con
185e0 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
185f0 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
18600 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
18610 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
18620 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20 2a  each recursion *
18630 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20  /..  int nVar;  
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18650 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
18660 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
18670 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
18680 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b   */.  int nzVar;
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61  /* Number of ava
186b0 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20  ilable slots in 
186c0 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20  azVar[] */.  u8 
186d0 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
186e0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
186f0 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
18700 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
18710 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
18720 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18730 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
18740 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
18750 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
18760 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
18770 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
18780 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
18790 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
187a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
187b0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
187c0 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
187d0 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
187e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
187f0 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
18800 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
18810 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69  ns */.  int nHei
18820 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
18830 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
18840 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
18850 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
18860 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
18870 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
18880 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
18890 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
188a0 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
188b0 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
188c0 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
188d0 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
188e0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
188f0 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
18900 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
18910 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
18920 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20    char **azVar; 
18930 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
18940 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73  ointers to names
18950 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a   of parameters *
18960 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
18970 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
18980 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
18990 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
189a0 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 69  repare()) */.  i
189b0 6e 74 20 2a 61 41 6c 69 61 73 3b 20 20 20 20 20  nt *aAlias;     
189c0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
189d0 73 74 65 72 20 75 73 65 64 20 74 6f 20 68 6f 6c  ster used to hol
189e0 64 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74  d aliased result
189f0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
18a00 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20   *zTail;        
18a10 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20  /* All SQL text 
18a20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65  past the last se
18a30 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a  micolon parsed *
18a40 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54  /.  Table *pNewT
18a50 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  able;         /*
18a60 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
18a70 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
18a80 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
18a90 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
18aa0 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
18ab0 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
18ac0 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
18ad0 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
18ae0 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
18af0 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
18b00 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
18b10 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
18b20 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  cks */.  Token s
18b30 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20  NameToken;      
18b40 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68     /* Token with
18b50 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68   unqualified sch
18b60 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20  ema object name 
18b70 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74  */.  Token sLast
18b80 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
18b90 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
18ba0 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64   parsed */.#ifnd
18bb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
18bc0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
18bd0 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
18be0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
18bf0 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
18c00 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
18c10 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
18c20 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
18c30 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
18c40 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
18c50 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
18c60 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
18c70 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
18c80 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
18c90 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
18ca0 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
18cb0 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
18cc0 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
18cd0 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
18ce0 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
18cf0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52  s */.};../*.** R
18d00 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
18d10 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
18d20 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
18d30 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
18d40 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
18d50 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
18d60 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
18d70 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
18d80 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
18d90 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
18da0 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
18db0 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
18dc0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
18dd0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
18de0 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
18df0 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
18e00 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
18e10 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
18e20 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
18e30 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
18e40 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
18e50 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
18e60 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
18e70 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
18e80 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
18e90 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
18ea0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
18eb0 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
18ec0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
18ed0 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
18ee0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
18ef0 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
18f00 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
18f10 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
18f20 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  codes..*/.#defin
18f30 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
18f40 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
18f50 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
18f60 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23  db->nChange */.#
18f70 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
18f80 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
18f90 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
18fa0 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
18fb0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
18fc0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
18fd0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
18fe0 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
18ff0 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
19000 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
19010 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
19020 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
19030 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
19040 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
19050 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
19060 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
19070 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
19080 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
19090 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
190a0 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  ne OPFLAG_CLEARC
190b0 41 43 48 45 20 20 20 20 30 78 32 30 20 20 20 20  ACHE    0x20    
190c0 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d  /* Clear pseudo-
190d0 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20 4f  table cache in O
190e0 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  P_Column */.#def
190f0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
19100 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
19110 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
19120 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
19130 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
19140 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
19150 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
19160 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
19170 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
19180 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
19190 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
191a0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
191b0 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
191c0 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
191d0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
191e0 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
191f0 78 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x02    /* P2 to 
19200 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
19210 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
19220 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19230 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
19240 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
19250 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
19260 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a  rmutation */../*
19270 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
19280 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
19290 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
192a0 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
192b0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
192c0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a  truct Trigger. .
192d0 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
192e0 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
192f0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
19300 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
19310 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
19320 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
19330 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
19340 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
19350 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
19360 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61  he . *    databa
19370 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
19380 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
19390 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
193a0 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
193b0 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
193c0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
193d0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
193e0 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
193f0 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
19400 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
19410 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
19420 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
19430 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
19440 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
19450 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
19460 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
19470 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
19480 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
19490 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
194a0 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
194b0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
194c0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
194d0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
194e0 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
194f0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
19500 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
19510 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
19520 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
19530 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
19540 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
19550 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
19560 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
19570 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
195a0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
195b0 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
195c0 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
195d0 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
195e0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19600 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
19610 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
19620 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
19630 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19650 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
19660 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
19670 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
19680 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
19690 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
196a0 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
196b0 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
196c0 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
196d0 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
196e0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
196f0 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
19700 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
19710 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
19740 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
19750 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
19760 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
19770 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
19780 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
19790 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
197a0 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
197b0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
197c0 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
197d0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
197e0 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
197f0 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
19800 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
19810 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
19820 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
19830 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
19840 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
19850 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
19860 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
19870 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
19880 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
19890 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
198a0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
198b0 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
198c0 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a  ermine which. .*
198d0 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
198e0 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
198f0 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
19900 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
19910 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
19920 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
19930 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
19940 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
19950 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
19960 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
19970 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
19980 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
19990 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
199a0 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
199b0 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
199c0 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
199d0 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
199e0 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
199f0 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
19a00 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a  -program. . *. *
19a10 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
19a20 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
19a30 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
19a40 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
19a50 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
19a60 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
19a70 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
19a80 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
19a90 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
19aa0 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61   the . * associa
19ab0 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
19ac0 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
19ad0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
19ae0 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
19af0 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
19b00 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
19b10 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
19b20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d  * . * The "op" m
19b30 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
19b40 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
19b50 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
19b60 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
19b70 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
19b80 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
19b90 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
19ba0 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
19bb0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
19bc0 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70  . * value of "op
19bd0 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a  " as follows:. *
19be0 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e  . * (op == TK_IN
19bf0 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20  SERT). * orconf 
19c00 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65     -> stores the
19c10 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
19c20 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63  orithm. * pSelec
19c30 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
19c40 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
19c50 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20   ... SELECT ... 
19c60 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
19c70 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19c80 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f  this stores a po
19c90 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c  inter to the SEL
19ca0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f  ECT statement. O
19cb0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
19cc0 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
19cd0 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
19ce0 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
19cf0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
19d00 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
19d10 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
19d20 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
19d30 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
19d40 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
19d50 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
19d60 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
19d70 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
19d80 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
19d90 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
19da0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
19db0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
19dc0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
19dd0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
19de0 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  . . *           
19df0 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
19e00 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
19e10 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
19e20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
19e30 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
19e40 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
19e50 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
19e60 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
19e70 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
19e80 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
19e90 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
19ea0 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
19eb0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
19ec0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
19ed0 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
19ee0 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
19ef0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
19f00 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
19f10 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
19f20 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
19f30 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
19f40 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
19f50 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
19f60 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
19f70 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e   update rows of.
19f80 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
19f90 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
19fa0 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
19fb0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
19fc0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
19fd0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
19fe0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
19ff0 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
1a000 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
1a010 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
1a020 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
1a030 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1a050 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
1a060 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
1a070 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
1a080 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
1a090 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
1a0a0 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54   * . */.struct T
1a0b0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
1a0c0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1a0d0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1a0e0 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1a0f0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
1a100 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
1a110 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1a120 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
1a130 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
1a140 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
1a150 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
1a160 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
1a170 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
1a180 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1a190 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
1a1a0 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20  statment or RHS 
1a1b0 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  of INSERT INTO .
1a1c0 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  . SELECT ... */.
1a1d0 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20    Token target; 
1a1e0 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
1a1f0 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
1a200 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
1a210 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
1a220 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
1a230 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1a240 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
1a250 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
1a260 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
1a270 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
1a280 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 20  se for UPDATE.  
1a290 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 66 6f  VALUES clause fo
1a2a0 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 49 64  r INSERT */.  Id
1a2b0 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
1a2c0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
1a2d0 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
1a2e0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1a2f0 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
1a300 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74  in the link-list
1a310 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1a320 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61  p *pLast;  /* La
1a330 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
1a340 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66  nk-list. Valid f
1a350 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79  or 1st elem only
1a360 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1a370 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1a380 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
1a390 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
1a3a0 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78  by the sqliteFix
1a3b0 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ....** routines 
1a3c0 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65  as they walk the
1a3d0 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d   parse tree to m
1a3e0 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66  ake database ref
1a3f0 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69  erences.** expli
1a400 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65  cit.  .*/.typede
1a410 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72  f struct DbFixer
1a420 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74   DbFixer;.struct
1a430 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72   DbFixer {.  Par
1a440 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1a450 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20   /* The parsing 
1a460 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20  context.  Error 
1a470 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e  messages written
1a480 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1a490 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f  a *pSchema;    /
1a4a0 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74  * Fix items to t
1a4b0 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
1a4c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
1a4d0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
1a4e0 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
1a4f0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
1a500 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
1a510 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
1a520 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
1a530 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1a540 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1a550 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
1a560 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
1a570 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1a580 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1a590 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1a5a0 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
1a5b0 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
1a5c0 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
1a5d0 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
1a5e0 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
1a5f0 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
1a600 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
1a610 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
1a620 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
1a630 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63  */.struct StrAcc
1a640 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  um {.  sqlite3 *
1a650 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  db;         /* O
1a660 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  ptional database
1a670 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20   for lookaside. 
1a680 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a   Can be NULL */.
1a690 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20    char *zBase;  
1a6a0 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65         /* A base
1a6b0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
1a6c0 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a  t from malloc. *
1a6d0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b  /.  char *zText;
1a6e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1a6f0 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64  string collected
1a700 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1a710 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20    nChar;        
1a720 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74    /* Length of t
1a730 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72  he string so far
1a740 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f   */.  int  nAllo
1a750 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
1a760 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
1a770 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
1a780 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c   */.  int  mxAll
1a790 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
1a7a0 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74  ximum allowed st
1a7b0 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1a7c0 20 75 38 20 20 20 6d 61 6c 6c 6f 63 46 61 69 6c   u8   mallocFail
1a7d0 65 64 3b 20 20 20 2f 2a 20 42 65 63 6f 6d 65 73  ed;   /* Becomes
1a7e0 20 74 72 75 65 20 69 66 20 61 6e 79 20 6d 65 6d   true if any mem
1a7f0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66  ory allocation f
1a800 61 69 6c 73 20 2a 2f 0a 20 20 75 38 20 20 20 75  ails */.  u8   u
1a810 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  seMalloc;      /
1a820 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73  * 0: none,  1: s
1a830 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
1a840 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c   2: sqlite3_mall
1a850 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 74 6f 6f  oc */.  u8   too
1a860 42 69 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Big;         /* 
1a870 42 65 63 6f 6d 65 73 20 74 72 75 65 20 69 66 20  Becomes true if 
1a880 73 74 72 69 6e 67 20 73 69 7a 65 20 65 78 63 65  string size exce
1a890 65 64 73 20 6c 69 6d 69 74 73 20 2a 2f 0a 7d 3b  eds limits */.};
1a8a0 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
1a8b0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
1a8c0 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
1a8d0 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
1a8e0 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
1a8f0 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
1a900 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
1a910 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
1a920 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
1a930 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
1a940 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1a950 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
1a960 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
1a970 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
1a980 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
1a990 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
1a9a0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1a9b0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1a9c0 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
1a9d0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
1a9e0 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
1a9f0 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
1aa00 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
1aa10 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
1aa20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
1aa30 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
1aa40 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
1aa50 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
1aa60 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
1aa70 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
1aa80 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
1aa90 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
1aaa0 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
1aab0 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
1aac0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1aad0 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
1aae0 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
1aaf0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1ab00 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1ab10 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
1ab20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
1ab30 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ab50 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1ab60 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
1ab70 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
1ab80 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1ab90 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1aba0 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
1abb0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
1abc0 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1abe0 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
1abf0 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
1ac00 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
1ac10 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
1ac20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
1ac30 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
1ac40 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
1ac50 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
1ac60 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
1ac70 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1ac80 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
1ac90 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
1aca0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1acb0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1acc0 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1acd0 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
1ace0 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad00 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1ad10 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
1ad20 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  t */.  sqlite3_m
1ad30 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20  em_methods m;   
1ad40 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d           /* Low-
1ad50 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  level memory all
1ad60 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63  ocation interfac
1ad70 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  e */.  sqlite3_m
1ad80 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74  utex_methods mut
1ad90 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d  ex;      /* Low-
1ada0 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65  level mutex inte
1adb0 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
1adc0 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64  e3_pcache_method
1add0 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20  s2 pcache2;  /* 
1ade0 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63  Low-level page-c
1adf0 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a  ache interface *
1ae00 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b  /.  void *pHeap;
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74        /* Heap st
1ae30 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20  orage space */. 
1ae40 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20   int nHeap;     
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48     /* Size of pH
1ae70 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  eap[] */.  int m
1ae80 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20  nReq, mxReq;    
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1aea0 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70  Min and max heap
1aeb0 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20   requests sizes 
1aec0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
1aed0 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1aee0 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
1aef0 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
1af00 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
1af30 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
1af40 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
1af50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1af60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1af70 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
1af80 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
1af90 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1afa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
1afb0 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
1afc0 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1aff0 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
1b000 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
1b010 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b030 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
1b040 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1b050 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
1b060 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
1b070 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
1b080 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
1b090 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
1b0a0 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
1b0b0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1b0c0 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
1b0d0 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
1b0e0 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ed */.  /* The a
1b0f0 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
1b100 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
1b110 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
1b120 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
1b130 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
1b140 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
1b150 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
1b160 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b180 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
1b190 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
1b1a0 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
1b1b0 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b1d0 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
1b1e0 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
1b1f0 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
1b200 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b220 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
1b230 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
1b240 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
1b250 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
1b260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1b270 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1b280 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1b290 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
1b2a0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1b2b0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1b2c0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1b2d0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73  itialized */.  s
1b2e0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
1b2f0 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
1b300 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
1b310 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
1b320 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lize() */.  int 
1b330 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20  nRefInitMutex;  
1b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b350 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73   Number of users
1b360 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a   of pInitMutex *
1b370 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
1b380 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
1b390 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
1b3a0 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
1b3b0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
1b3c0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1b3d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
1b3e0 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
1b3f0 78 4c 6f 67 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xLog() */.  int 
1b400 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b420 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
1b430 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
1b440 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1b450 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
1b460 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
1b470 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
1b480 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
1b490 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
1b4a0 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a  gArg;.#endif.};.
1b4b0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
1b4c0 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
1b4d0 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
1b4e0 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
1b4f0 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69  uct Walker {.  i
1b500 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
1b510 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
1b520 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
1b530 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
1b540 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
1b550 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
1b560 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1b570 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1b580 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1b590 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1b5c0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
1b5d0 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
1b5e0 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b600 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
1b610 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e  eries */.  union
1b620 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b640 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
1b650 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
1b660 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
1b670 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b690 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
1b6a0 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ext */.    int i
1b6b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
1b6e0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72   value */.    Sr
1b6f0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d           /* FROM
1b720 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
1b730 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a  truct SrcCount *
1b740 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20  pSrcCount;      
1b750 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
1b760 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
1b770 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75  erences */.  } u
1b780 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
1b790 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
1b7a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1b7b0 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
1b7c0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1b7d0 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
1b7e0 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
1b7f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1b800 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
1b810 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1b820 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1b830 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
1b840 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
1b850 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
1b860 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
1b870 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  ct*);../*.** Ret
1b880 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
1b890 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
1b8a0 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
1b8b0 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
1b8c0 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
1b8d0 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
1b8e0 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
1b8f0 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
1b900 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
1b910 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
1b920 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
1b930 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
1b940 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
1b950 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
1b960 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
1b970 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
1b980 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
1b990 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
1b9a0 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
1b9b0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
1b9c0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1b9d0 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
1b9e0 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
1b9f0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
1ba00 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
1ba10 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
1ba20 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
1ba30 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
1ba60 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1ba90 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
1baa0 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
1bab0 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
1bac0 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
1bb00 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
1bb10 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
1bb20 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
1bb30 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
1bb40 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
1bb50 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
1bb60 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
1bb70 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
1bb80 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
1bb90 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
1bba0 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
1bbb0 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
1bbc0 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
1bbd0 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
1bbe0 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
1bbf0 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
1bc00 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
1bc10 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
1bc20 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
1bc30 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
1bc40 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
1bc50 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
1bc60 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
1bc70 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
1bc80 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
1bc90 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
1bca0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
1bcb0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
1bcc0 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
1bcd0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
1bce0 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
1bcf0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
1bd00 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
1bd10 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
1bd20 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
1bd30 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
1bd40 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46  INE__).../*.** F
1bd50 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
1bd60 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
1bd70 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
1bd80 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
1bd90 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
1bda0 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
1bdb0 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
1bdc0 6f 6e 20 77 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a  on we also all.*
1bdd0 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
1bde0 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
1bdf0 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
1be00 69 73 73 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  isse for SQLITE_
1be10 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
1be20 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1be30 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
1be40 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1be50 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
1be60 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1be70 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 65 6e 64  ENABLE_FTS3.#end
1be80 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
1be90 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
1bea0 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
1beb0 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
1bec0 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
1bed0 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
1bee0 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
1bef0 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
1bf00 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
1bf10 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
1bf20 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
1bf30 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1bf40 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
1bf50 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
1bf60 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
1bf70 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
1bf80 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1bf90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1bfa0 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
1bfb0 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
1bfc0 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
1bfd0 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
1bfe0 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
1bff0 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
1c000 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
1c010 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
1c020 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
1c030 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
1c040 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
1c050 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
1c060 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
1c070 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
1c080 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
1c090 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
1c0a0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c0b0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c0c0 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
1c0d0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
1c0e0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1c0f0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1c100 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
1c110 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1c120 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
1c130 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1c140 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1c150 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
1c160 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
1c170 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
1c180 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1c190 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
1c1a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1c1b0 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
1c1c0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
1c1d0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
1c1e0 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
1c1f0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
1c200 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
1c210 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1c220 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
1c230 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1c240 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
1c250 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
1c260 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1c270 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x)]).#else.# def
1c280 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
1c290 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
1c2a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1c2b0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1c2c0 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
1c2d0 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
1c2e0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1c2f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1c300 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
1c310 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
1c320 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1c330 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
1c340 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
1c350 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1c360 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c370 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
1c380 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
1c390 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1c3a0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
1c3b0 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
1c3c0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c3d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1c3e0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
1c3f0 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
1c400 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69   char)(x)).#endi
1c410 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  f../*.** Interna
1c420 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
1c430 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  types.*/.#define
1c440 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20   sqlite3StrICmp 
1c450 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a  sqlite3_stricmp.
1c460 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
1c470 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
1c480 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
1c490 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
1c4a0 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
1c4b0 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
1c4c0 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
1c4d0 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
1c4e0 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
1c4f0 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  te3Malloc(int);.
1c500 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
1c510 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b 0a 76 6f  locZero(int);.vo
1c520 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
1c530 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
1c540 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1c550 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
1c560 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1c570 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
1c580 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  StrDup(sqlite3*,
1c590 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
1c5a0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
1c5b0 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  NDup(sqlite3*,co
1c5c0 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
1c5d0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
1c5e0 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 69 6e 74  alloc(void*, int
1c5f0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1c600 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
1c610 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
1c620 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
1c630 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
1c640 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
1c650 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1c660 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
1c670 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
1c680 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
1c690 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
1c6a0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
1c6b0 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
1c6c0 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
1c6d0 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63  te3ScratchMalloc
1c6e0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1c6f0 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76  te3ScratchFree(v
1c700 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
1c710 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
1c720 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1c730 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
1c740 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
1c750 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
1c760 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1c770 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
1c780 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
1c790 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
1c7a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  ;.int sqlite3Hea
1c7b0 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
1c7c0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
1c7d0 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
1c7e0 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
1c7f0 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
1c800 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
1c810 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
1c820 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
1c830 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
1c840 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
1c850 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
1c860 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
1c870 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
1c880 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
1c890 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
1c8a0 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
1c8b0 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
1c8c0 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
1c8d0 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
1c8e0 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
1c8f0 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
1c900 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
1c910 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
1c920 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c930 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
1c940 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
1c950 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c960 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
1c970 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
1c980 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
1c990 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1c9a0 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
1c9b0 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e    .#else.# defin
1c9c0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1c9d0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
1c9e0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
1c9f0 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
1ca00 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1ca10 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
1ca20 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
1ca30 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
1ca40 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
1ca50 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
1ca60 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
1ca70 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1ca80 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
1ca90 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
1caa0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
1cab0 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
1cac0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
1cad0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1cae0 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
1caf0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
1cb00 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
1cb10 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
1cb20 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
1cb30 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
1cb40 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
1cb50 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
1cb60 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
1cb70 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
1cb80 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1cb90 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
1cba0 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
1cbb0 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
1cbc0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
1cbd0 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
1cbe0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
1cbf0 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
1cc00 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
1cc10 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
1cc20 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  f..int sqlite3St
1cc30 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
1cc40 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
1cc50 75 73 41 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b  usAdd(int, int);
1cc60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
1cc70 74 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29  tusSet(int, int)
1cc80 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
1cc90 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
1cca0 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
1ccb0 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
1ccc0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1ccd0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
1cce0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64    0.#endif..void
1ccf0 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
1cd00 28 53 74 72 41 63 63 75 6d 2a 2c 20 69 6e 74 2c  (StrAccum*, int,
1cd10 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61   const char*, va
1cd20 5f 6c 69 73 74 29 3b 0a 23 69 66 6e 64 65 66 20  _list);.#ifndef 
1cd30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
1cd40 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50  E.void sqlite3XP
1cd50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
1cd60 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
1cd70 2e 29 3b 0a 23 65 6e 64 69 66 0a 63 68 61 72 20  .);.#endif.char 
1cd80 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
1cd90 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1cda0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
1cdb0 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
1cdc0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
1cdd0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
1cde0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
1cdf0 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a  Appendf(sqlite3*
1ce00 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,char*,const cha
1ce10 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66  r*,...);.#if def
1ce20 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
1ce30 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
1ce40 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
1ce50 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
1ce60 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
1ce70 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
1ce80 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1ce90 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
1cea0 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
1ceb0 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
1cec0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75  );.#endif../* Ou
1ced0 74 70 75 74 20 66 6f 72 6d 61 74 74 69 6e 67 20  tput formatting 
1cee0 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 53 54 43  for SQLITE_TESTC
1cef0 54 52 4c 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a 23  TRL_EXPLAIN */.#
1cf00 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1cf10 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58  E_ENABLE_TREE_EX
1cf20 50 4c 41 49 4e 29 0a 20 20 76 6f 69 64 20 73 71  PLAIN).  void sq
1cf30 6c 69 74 65 33 45 78 70 6c 61 69 6e 42 65 67 69  lite3ExplainBegi
1cf40 6e 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  n(Vdbe*);.  void
1cf50 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
1cf60 72 69 6e 74 66 28 56 64 62 65 2a 2c 20 63 6f 6e  rintf(Vdbe*, con
1cf70 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1cf80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1cf90 70 6c 61 69 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a  plainNL(Vdbe*);.
1cfa0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1cfb0 70 6c 61 69 6e 50 75 73 68 28 56 64 62 65 2a 29  plainPush(Vdbe*)
1cfc0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1cfd0 45 78 70 6c 61 69 6e 50 6f 70 28 56 64 62 65 2a  ExplainPop(Vdbe*
1cfe0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1cff0 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 56  3ExplainFinish(V
1d000 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
1d010 6c 69 74 65 33 45 78 70 6c 61 69 6e 53 65 6c 65  lite3ExplainSele
1d020 63 74 28 56 64 62 65 2a 2c 20 53 65 6c 65 63 74  ct(Vdbe*, Select
1d030 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1d040 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28 56 64  e3ExplainExpr(Vd
1d050 62 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  be*, Expr*);.  v
1d060 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d070 69 6e 45 78 70 72 4c 69 73 74 28 56 64 62 65 2a  inExprList(Vdbe*
1d080 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
1d090 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
1d0a0 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69  te3VdbeExplanati
1d0b0 6f 6e 28 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65  on(Vdbe*);.#else
1d0c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d0d0 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 58 29  3ExplainBegin(X)
1d0e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d0f0 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 41  3ExplainSelect(A
1d100 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1d110 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 28  ite3ExplainExpr(
1d120 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
1d130 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72  lite3ExplainExpr
1d140 4c 69 73 74 28 41 2c 42 29 0a 23 20 64 65 66 69  List(A,B).# defi
1d150 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d160 6e 46 69 6e 69 73 68 28 58 29 0a 23 20 64 65 66  nFinish(X).# def
1d170 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 45  ine sqlite3VdbeE
1d180 78 70 6c 61 6e 61 74 69 6f 6e 28 58 29 20 30 0a  xplanation(X) 0.
1d190 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71  #endif...void sq
1d1a0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
1d1b0 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
1d1c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1d1d0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
1d1e0 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
1d1f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
1d200 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..);.int sqlite3
1d210 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
1d220 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
1d230 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
1d240 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
1d250 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
1d260 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
1d270 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
1d280 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
1d290 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
1d2a0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
1d2b0 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
1d2c0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
1d2d0 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
1d2e0 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
1d2f0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
1d300 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
1d310 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d320 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
1d330 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
1d340 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1d350 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
1d360 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a  (Parse*);.Expr *
1d370 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63  sqlite3ExprAlloc
1d380 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1d390 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  nst Token*,int);
1d3a0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1d3b0 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  pr(sqlite3*,int,
1d3c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1d3d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74  id sqlite3ExprAt
1d3e0 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c  tachSubtrees(sql
1d3f0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72  ite3*,Expr*,Expr
1d400 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
1d410 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72  sqlite3PExpr(Par
1d420 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  se*, int, Expr*,
1d430 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
1d440 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ken*);.Expr *sql
1d450 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
1d460 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
1d470 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
1d480 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
1d490 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
1d4a0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1d4b0 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
1d4c0 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
1d4d0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1d4e0 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
1d4f0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
1d500 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
1d510 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
1d520 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
1d530 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
1d540 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
1d550 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
1d560 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
1d570 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d580 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
1d590 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1d5a0 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
1d5b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1d5c0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1d5d0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
1d5e0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
1d5f0 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
1d600 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
1d610 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
1d620 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
1d630 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
1d640 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
1d650 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
1d660 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
1d670 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
1d680 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
1d690 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ion(sqlite3*);.v
1d6a0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
1d6b0 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  OneSchema(sqlite
1d6c0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
1d6d0 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74  lite3CollapseDat
1d6e0 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74  abaseArray(sqlit
1d6f0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
1d700 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  e3BeginParse(Par
1d710 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
1d720 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65  qlite3CommitInte
1d730 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
1d740 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  te3*);.Table *sq
1d750 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66  lite3ResultSetOf
1d760 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65  Select(Parse*,Se
1d770 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lect*);.void sql
1d780 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61  ite3OpenMasterTa
1d790 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ble(Parse *, int
1d7a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1d7b0 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
1d7c0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1d7d0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
1d7e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1d7f0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
1d800 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1d810 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61  te3AddNotNull(Pa
1d820 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1d830 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61   sqlite3AddPrima
1d840 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  ryKey(Parse*, Ex
1d850 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
1d860 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1d870 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e  lite3AddCheckCon
1d880 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
1d890 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1d8a0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70  ite3AddColumnTyp
1d8b0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  e(Parse*,Token*)
1d8c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1d8d0 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61  dDefaultValue(Pa
1d8e0 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  rse*,ExprSpan*);
1d8f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1d900 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73  CollateType(Pars
1d910 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
1d920 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c  d sqlite3EndTabl
1d930 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
1d940 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 29 3b  Token*,Select*);
1d950 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
1d960 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
1d970 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
1d980 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9a0 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
1d9b0 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
1d9c0 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
1d9d0 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
1d9e0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
1d9f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
1da00 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a  eOnce(Parse *);.
1da10 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
1da20 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
1da30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
1da40 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
1da50 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
1da60 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
1da70 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
1da80 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
1da90 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
1daa0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
1dab0 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
1dac0 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
1dad0 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
1dae0 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e  ize(Bitvec*);.in
1daf0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
1db00 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
1db10 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73  nt*);..RowSet *s
1db20 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
1db30 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1db40 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
1db50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
1db60 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
1db70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1db80 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
1db90 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
1dba0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
1dbb0 28 52 6f 77 53 65 74 2a 2c 20 75 38 20 69 42 61  (RowSet*, u8 iBa
1dbc0 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
1dbd0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
1dbe0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
1dbf0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
1dc00 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
1dc10 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
1dc20 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
1dc30 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
1dc40 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1dc50 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
1dc60 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
1dc70 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
1dc80 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
1dc90 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
1dca0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
1dcb0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
1dcc0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1dcd0 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
1dce0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
1dcf0 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
1dd00 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1dd10 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1dd20 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
1dd30 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
1dd40 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1dd50 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1dd60 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
1dd70 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
1dd80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
1dd90 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
1dda0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
1ddb0 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
1ddc0 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
1ddd0 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
1dde0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
1ddf0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
1de00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1de10 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
1de20 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
1de30 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
1de40 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
1de50 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
1de60 43 6f 72 6f 75 74 69 6e 65 28 50 61 72 73 65 2a  Coroutine(Parse*
1de70 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
1de80 74 44 65 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  tDest*);.void sq
1de90 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
1dea0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
1deb0 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a  prList*, Select*
1dec0 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  , IdList*, int);
1ded0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72  .void *sqlite3Ar
1dee0 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69  rayAllocate(sqli
1def0 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69  te3*,void*,int,i
1df00 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73  nt*,int*);.IdLis
1df10 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
1df20 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
1df30 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a   IdList*, Token*
1df40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64  );.int sqlite3Id
1df50 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74  ListIndex(IdList
1df60 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
1df70 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1df80 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73  SrcListEnlarge(s
1df90 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
1dfa0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72  *, int, int);.Sr
1dfb0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
1dfc0 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  cListAppend(sqli
1dfd0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
1dfe0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
1dff0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
1e000 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72  3SrcListAppendFr
1e010 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53  omTerm(Parse*, S
1e020 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
1e030 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20   Token*,.       
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1e060 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  oken*, Select*, 
1e070 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  Expr*, IdList*);
1e080 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
1e090 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61  ListIndexedBy(Pa
1e0a0 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  rse *, SrcList *
1e0b0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20  , Token *);.int 
1e0c0 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
1e0d0 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
1e0e0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
1e0f0 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
1e100 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
1e110 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
1e120 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e130 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
1e140 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
1e150 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
1e160 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
1e170 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
1e180 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1e190 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
1e1a0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
1e1b0 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
1e1c0 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
1e1d0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
1e1e0 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
1e1f0 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
1e200 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e210 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
1e220 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1e230 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
1e240 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
1e250 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
1e260 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
1e270 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
1e280 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
1e290 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
1e2a0 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
1e2b0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
1e2c0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
1e2f0 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70  xprList*,u16,Exp
1e300 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  r*,Expr*);.void 
1e310 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
1e320 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
1e330 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
1e340 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
1e350 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
1e360 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1e370 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
1e380 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1e390 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
1e3a0 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
1e3b0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
1e3c0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
1e3d0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
1e3e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
1e3f0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
1e400 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1e410 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
1e420 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
1e430 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
1e440 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 45   *, SrcList *, E
1e450 78 70 72 20 2a 2c 20 45 78 70 72 4c 69 73 74 20  xpr *, ExprList 
1e460 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
1e470 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
1e480 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
1e490 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
1e4a0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
1e4b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e4c0 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
1e4d0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
1e4e0 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
1e4f0 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
1e500 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
1e510 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
1e520 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
1e530 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29  prList*,u16,int)
1e540 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
1e550 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
1e560 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1e570 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
1e580 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1e590 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
1e5a0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
1e5b0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
1e5c0 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
1e5d0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1e5e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1e5f0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
1e600 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
1e610 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1e620 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53  qlite3ExprCacheS
1e630 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  tore(Parse*, int
1e640 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1e650 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1e660 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a  hePush(Parse*);.
1e670 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e680 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 2c  CachePop(Parse*,
1e690 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e6a0 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
1e6b0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
1e6c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e6d0 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
1e6e0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1e6f0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
1e700 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
1e710 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
1e720 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1e730 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
1e740 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1e750 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d  lite3ExprCodeTem
1e760 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
1e770 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
1e780 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65  te3ExprCodeTarge
1e790 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
1e7a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1e7b0 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63  e3ExprCodeAndCac
1e7c0 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  he(Parse*, Expr*
1e7d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e7e0 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f 6e 73  ite3ExprCodeCons
1e7f0 74 61 6e 74 73 28 50 61 72 73 65 2a 2c 20 45 78  tants(Parse*, Ex
1e800 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1e810 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
1e820 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
1e830 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
1e840 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e850 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
1e860 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
1e870 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1e880 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
1e890 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
1e8a0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
1e8b0 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
1e8c0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1e8d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
1e8e0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
1e8f0 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
1e900 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74  int isView,const
1e910 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1e920 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
1e930 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
1e940 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  tem(Parse*,int i
1e950 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63  sView,struct Src
1e960 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
1e970 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
1e980 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
1e990 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
1e9a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
1e9b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
1e9c0 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
1e9d0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
1e9e0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1e9f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
1ea00 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
1ea10 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1ea20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
1ea30 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e  cuum(Parse*);.in
1ea40 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
1ea50 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
1ea60 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  e3*);.char *sqli
1ea70 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
1ea80 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
1ea90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1eaa0 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
1eab0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
1eac0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d  lite3ExprListCom
1ead0 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20  pare(ExprList*, 
1eae0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
1eaf0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
1eb00 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
1eb10 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
1eb20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1eb30 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
1eb40 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
1eb50 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1eb60 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
1eb70 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
1eb80 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
1eb90 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
1eba0 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
1ebb0 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53  sqlite3PrngSaveS
1ebc0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
1ebd0 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74   sqlite3PrngRest
1ebe0 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  oreState(void);.
1ebf0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
1ec00 52 65 73 65 74 53 74 61 74 65 28 76 6f 69 64 29  ResetState(void)
1ec10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
1ec20 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
1ec30 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
1ec40 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
1ec50 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
1ec60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ec70 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
1ec80 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
1ec90 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
1eca0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1ecb0 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
1ecc0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
1ecd0 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61  sqlite3CommitTra
1ece0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
1ecf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
1ed00 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f  llbackTransactio
1ed10 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
1ed20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
1ed30 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
1ed40 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1ed50 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
1ed60 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
1ed70 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
1ed80 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
1ed90 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
1eda0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
1edb0 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
1edc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1edd0 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
1ede0 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
1edf0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
1ee00 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
1ee10 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1ee20 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
1ee30 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
1ee40 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42   sqlite3ExprCanB
1ee50 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72  eNull(const Expr
1ee60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ee70 45 78 70 72 43 6f 64 65 49 73 4e 75 6c 6c 4a 75  ExprCodeIsNullJu
1ee80 6d 70 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  mp(Vdbe*, const 
1ee90 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
1eea0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1eeb0 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
1eec0 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
1eed0 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
1eee0 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
1eef0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1ef00 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
1ef10 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a  RowDelete(Parse*
1ef20 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1ef30 6e 74 2c 20 69 6e 74 2c 20 54 72 69 67 67 65 72  nt, int, Trigger
1ef40 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73   *, int);.void s
1ef50 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
1ef60 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
1ef70 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1ef80 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
1ef90 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
1efa0 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
1efb0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
1efc0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1efd0 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61  3GenerateConstra
1efe0 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a  intChecks(Parse*
1eff0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
1f000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 20 20 20 20 20 69 6e 74 2a 2c 69 6e 74 2c 69        int*,int,i
1f030 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29  nt,int,int,int*)
1f040 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1f050 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28  mpleteInsertion(
1f060 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1f070 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
1f080 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1f090 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
1f0a0 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50  ableAndIndices(P
1f0b0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1f0c0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1f0d0 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
1f0e0 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
1f0f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1f100 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
1f110 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
1f120 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
1f130 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
1f140 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
1f150 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
1f160 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  t, char*, int);.
1f170 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1f180 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  rDup(sqlite3*,Ex
1f190 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69  pr*,int);.ExprLi
1f1a0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
1f1b0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
1f1c0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
1f1d0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1f1e0 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74  SrcListDup(sqlit
1f1f0 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74  e3*,SrcList*,int
1f200 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
1f210 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69  e3IdListDup(sqli
1f220 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53  te3*,IdList*);.S
1f230 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
1f240 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a  lectDup(sqlite3*
1f250 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76  ,Select*,int);.v
1f260 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44  oid sqlite3FuncD
1f270 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66  efInsert(FuncDef
1f280 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29  Hash*, FuncDef*)
1f290 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
1f2a0 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
1f2b0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1f2c0 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75  ar*,int,int,u8,u
1f2d0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
1f2e0 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
1f2f0 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
1f300 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1f310 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
1f320 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
1f330 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
1f340 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74  isterGlobalFunct
1f350 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
1f360 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
1f370 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
1f380 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
1f390 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
1f3a0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
1f3b0 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
1f3c0 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
1f3d0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
1f3e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
1f3f0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1f400 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
1f410 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
1f420 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
1f430 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
1f440 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  pr*, int);.#endi
1f450 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
1f460 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
1f470 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
1f480 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
1f490 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
1f4a0 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
1f4b0 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
1f4e0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1f4f0 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
1f500 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
1f510 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
1f520 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1f530 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
1f540 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1f550 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f560 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
1f570 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
1f580 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
1f590 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
1f5a0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
1f5b0 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
1f5c0 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
1f5d0 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
1f5e0 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
1f5f0 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
1f600 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f610 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
1f620 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
1f630 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
1f640 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
1f670 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
1f680 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
1f690 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
1f6a0 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
1f6b0 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
1f6c0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
1f6d0 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
1f6e0 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
1f6f0 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
1f700 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
1f710 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
1f720 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
1f730 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
1f740 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
1f750 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
1f760 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
1f770 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29  qlite3*,Select*)
1f780 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1f790 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
1f7a0 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
1f7b0 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
1f7c0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
1f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
1f7f0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75 38  List*,Select*,u8
1f800 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
1f810 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
1f820 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74  UpdateStep(sqlit
1f830 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  e3*,Token*,ExprL
1f840 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29  ist*, Expr*, u8)
1f850 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1f860 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
1f870 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65  eleteStep(sqlite
1f880 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  3*,Token*, Expr*
1f890 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f8a0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
1f8b0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
1f8c0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1f8d0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
1f8e0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
1f8f0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1f900 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
1f910 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
1f920 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
1f930 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
1f940 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
1f950 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
1f960 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
1f970 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
1f980 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
1f990 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23 20   : (p)).#else.# 
1f9a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
1f9b0 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c  iggersExist(B,C,
1f9c0 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e  D,E,F) 0.# defin
1f9d0 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  e sqlite3DeleteT
1f9e0 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65  rigger(A,B).# de
1f9f0 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70  fine sqlite3Drop
1fa00 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a  TriggerPtr(A,B).
1fa10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fa20 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1fa30 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20  rigger(A,B,C).# 
1fa40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
1fa50 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42  deRowTrigger(A,B
1fa60 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a  ,C,D,E,F,G,H,I).
1fa70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fa80 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
1fa90 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  rect(A,B,C,D,E,F
1faa0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1fab0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c  e3TriggerList(X,
1fac0 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73   Y) 0.# define s
1fad0 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
1fae0 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e  vel(p) p.# defin
1faf0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
1fb00 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c  Colmask(A,B,C,D,
1fb10 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a  E,F,G) 0.#endif.
1fb20 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e  .int sqlite3Join
1fb30 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
1fb40 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
1fb50 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1fb60 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b  e3CreateForeignK
1fb70 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
1fb80 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78  ist*, Token*, Ex
1fb90 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  prList*, int);.v
1fba0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72  oid sqlite3Defer
1fbb0 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
1fbc0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  *, int);.#ifndef
1fbd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1fbe0 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69  HORIZATION.  voi
1fbf0 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  d sqlite3AuthRea
1fc00 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53  d(Parse*,Expr*,S
1fc10 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29  chema*,SrcList*)
1fc20 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
1fc30 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c  uthCheck(Parse*,
1fc40 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
1fc50 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
1fc60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
1fc70 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
1fc80 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65  ontextPush(Parse
1fc90 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c  *, AuthContext*,
1fca0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
1fcb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
1fcc0 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68  hContextPop(Auth
1fcd0 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74  Context*);.  int
1fce0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
1fcf0 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Col(Parse*, cons
1fd00 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20  t char *, const 
1fd10 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65  char *, int);.#e
1fd20 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1fd30 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62  ite3AuthRead(a,b
1fd40 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73  ,c,d).# define s
1fd50 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
1fd60 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51  a,b,c,d,e)    SQ
1fd70 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65  LITE_OK.# define
1fd80 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
1fd90 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23  extPush(a,b,c).#
1fda0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1fdb0 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29  uthContextPop(a)
1fdc0 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65    ((void)(a)).#e
1fdd0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
1fde0 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Attach(Parse*, 
1fdf0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78  Expr*, Expr*, Ex
1fe00 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1fe10 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Detach(Parse*,
1fe20 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1fe30 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
1fe40 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
1fe50 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
1fe60 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
1fe70 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
1fe80 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
1fe90 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
1fea0 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
1feb0 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
1fec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1fed0 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
1fee0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1fef0 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
1ff00 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
1ff10 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1ff20 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
1ff30 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
1ff40 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
1ff50 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
1ff60 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
1ff70 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
1ff80 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
1ff90 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
1ffa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
1ffb0 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
1ffc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
1ffd0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
1ffe0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
1fff0 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
20000 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
20010 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
20020 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
20030 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
20040 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 0a  d(const u8**);..
20050 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
20060 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
20070 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
20080 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
20090 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
200a0 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
200b0 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
200c0 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
200d0 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
200e0 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65  c.** file.  Code
200f0 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65 20   should use the 
20100 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f  MACRO forms belo
20110 77 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e 74  w, as the Varint
20120 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61  32 versions.** a
20130 72 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73 75  re coded to assu
20140 6d 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62 79  me the single by
20150 74 65 20 63 61 73 65 20 69 73 20 61 6c 72 65 61  te case is alrea
20160 64 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69 63  dy handled (whic
20170 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20  h .** the MACRO 
20180 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69  form does)..*/.i
20190 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
201a0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
201b0 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73 71  r*, u64);.int sq
201c0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
201d0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
201e0 20 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74 65   u32);.u8 sqlite
201f0 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
20200 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
20210 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
20220 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
20230 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
20240 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
20250 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
20260 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
20270 2a 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f 66  ** The header of
20280 20 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69 73   a record consis
20290 74 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65  ts of a sequence
202a0 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
202b0 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
202c0 65 73 65 20 69 6e 74 65 67 65 72 73 20 61 72 65  ese integers are
202d0 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 73   almost always s
202e0 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e 63  mall and are enc
202f0 6f 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c 65  oded as a single
20300 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f   byte..** The fo
20310 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 74  llowing macros t
20320 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74 68  ake advantage th
20330 69 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76 69  is fact to provi
20340 64 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64 65  de a fast encode
20350 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20 6f  .** and decode o
20360 66 20 74 68 65 20 69 6e 74 65 67 65 72 73 20 69  f the integers i
20370 6e 20 61 20 72 65 63 6f 72 64 20 68 65 61 64 65  n a record heade
20380 72 2e 20 20 49 74 20 69 73 20 66 61 73 74 65 72  r.  It is faster
20390 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a   for the common.
203a0 2a 2a 20 63 61 73 65 20 77 68 65 72 65 20 74 68  ** case where th
203b0 65 20 69 6e 74 65 67 65 72 20 69 73 20 61 20 73  e integer is a s
203c0 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74 20  ingle byte.  It 
203d0 69 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77  is a little slow
203e0 65 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69  er when the.** i
203f0 6e 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f 72  nteger is two or
20400 20 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42 75   more bytes.  Bu
20410 74 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73 20  t overall it is 
20420 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  faster..**.** Th
20430 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72  e following expr
20440 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69  essions are equi
20450 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20  valent:.**.**   
20460 20 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65 74    x = sqlite3Get
20470 56 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42 20  Varint32( A, &B 
20480 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71  );.**     x = sq
20490 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
204a0 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  ( A, B );.**.** 
204b0 20 20 20 20 78 20 3d 20 67 65 74 56 61 72 69 6e      x = getVarin
204c0 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20  t32( A, B );.** 
204d0 20 20 20 20 78 20 3d 20 70 75 74 56 61 72 69 6e      x = putVarin
204e0 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a  t32( A, B );.**.
204f0 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
20500 72 69 6e 74 33 32 28 41 2c 42 29 20 20 28 75 38  rint32(A,B)  (u8
20510 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
20520 29 20 3f 20 28 28 42 29 20 3d 20 28 75 33 32 29  ) ? ((B) = (u32)
20530 2a 28 41 29 29 2c 31 20 3a 20 73 71 6c 69 74 65  *(A)),1 : sqlite
20540 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
20550 2c 20 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a  , (u32 *)&(B))).
20560 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
20570 74 33 32 28 41 2c 42 29 20 20 28 75 38 29 28 28  t32(A,B)  (u8)((
20580 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78  (u32)(B)<(u32)0x
20590 38 30 29 20 3f 20 28 2a 28 41 29 20 3d 20 28 75  80) ? (*(A) = (u
205a0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29  nsigned char)(B)
205b0 29 2c 31 20 3a 20 73 71 6c 69 74 65 33 50 75 74  ),1 : sqlite3Put
205c0 56 61 72 69 6e 74 33 32 28 28 41 29 2c 20 28 42  Varint32((A), (B
205d0 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56  ))).#define getV
205e0 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
205f0 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e  GetVarint.#defin
20600 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73  e putVarint    s
20610 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a  qlite3PutVarint.
20620 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
20630 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
20640 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e  tyStr(Vdbe *, In
20650 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dex *);.void sql
20660 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
20670 79 53 74 72 28 56 64 62 65 20 2a 2c 20 54 61 62  yStr(Vdbe *, Tab
20680 6c 65 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  le *);.char sqli
20690 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
206a0 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
206b0 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
206c0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
206d0 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
206e0 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
206f0 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
20700 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
20710 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
20720 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
20730 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
20740 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  4*, int, u8);.vo
20750 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
20760 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
20770 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
20780 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
20790 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
207a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
207b0 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
207c0 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
207d0 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
207e0 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
207f0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
20800 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
20810 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
20820 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
20830 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
20840 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
20850 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
20860 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
20870 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
20880 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
20890 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
208a0 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
208b0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
208c0 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
208d0 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
208e0 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
208f0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
20900 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
20910 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
20920 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
20930 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
20940 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45  xpr*, Token*);.E
20950 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
20960 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
20970 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
20980 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
20990 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
209a0 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
209b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
209c0 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
209d0 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
209e0 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
209f0 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
20a00 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
20a10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
20a20 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
20a30 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
20a40 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
20a50 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
20a60 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
20a70 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
20a80 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
20a90 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
20aa0 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
20ab0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
20ac0 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
20ad0 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
20ae0 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
20af0 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
20b00 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
20b10 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
20b20 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
20b30 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
20b40 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
20b50 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  ,int);..const vo
20b60 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
20b70 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
20b80 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
20b90 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
20ba0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
20bb0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
20bc0 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
20bd0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
20be0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
20bf0 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
20c00 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
20c10 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
20c20 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
20c30 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
20c40 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
20c50 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
20c60 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
20c70 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
20c80 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
20c90 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
20ca0 2c 20 75 38 29 3b 0a 23 69 66 64 65 66 20 53 51  , u8);.#ifdef SQ
20cb0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
20cc0 33 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  3.char *sqlite3U
20cd0 74 66 38 74 6f 31 36 28 73 71 6c 69 74 65 33 20  tf8to16(sqlite3 
20ce0 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a 2c 20 69  *, u8, char *, i
20cf0 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23 65 6e 64  nt, int *);.#end
20d00 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  if.int sqlite3Va
20d10 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69  lueFromExpr(sqli
20d20 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  te3 *, Expr *, u
20d30 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  8, u8, sqlite3_v
20d40 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  alue **);.void s
20d50 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
20d60 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
20d70 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38  _value *, u8, u8
20d80 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
20d90 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65  E_AMALGAMATION.e
20da0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
20db0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
20dc0 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
20dd0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
20de0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
20df0 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
20e00 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
20e10 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
20e20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20e30 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
20e40 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
20e50 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
20e60 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
20e70 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
20e80 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
20e90 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
20ea0 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71  D FuncDefHash sq
20eb0 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74  lite3GlobalFunct
20ec0 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
20ed0 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
20ee0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
20ef0 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
20f00 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
20f10 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
20f20 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
20f30 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
20f40 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
20f50 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
20f60 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
20f70 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
20f80 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
20f90 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
20fa0 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
20fb0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
20fc0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
20fd0 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
20fe0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
20ff0 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
21000 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
21010 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
21020 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
21030 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
21040 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
21050 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
21060 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
21070 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78  lect(Parse *, Ex
21080 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  pr *, int, int);
21090 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
210a0 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20  ectPrep(Parse*, 
210b0 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
210c0 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  text*);.int sqli
210d0 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
210e0 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
210f0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
21100 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
21110 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
21120 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
21130 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
21140 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
21150 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
21160 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
21170 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
21180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
21190 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
211a0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
211b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
211c0 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
211d0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
211e0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
211f0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
21200 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
21210 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
21220 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
21230 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
21240 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
21250 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
21260 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
21270 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
21280 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21290 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
212a0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
212b0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
212c0 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
212d0 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
212e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
212f0 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
21300 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
21310 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
21320 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
21330 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
21340 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
21350 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
21360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
21370 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
21380 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
21390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
213a0 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
213b0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
213c0 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
213d0 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
213e0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
213f0 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
21400 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
21410 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
21420 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d  d sqlite3Minimum
21430 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65  FileFormat(Parse
21440 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
21450 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
21460 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
21470 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
21480 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
21490 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
214a0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
214b0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
214c0 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
214d0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49 6e  yInfo *sqlite3In
214e0 64 65 78 4b 65 79 69 6e 66 6f 28 50 61 72 73 65  dexKeyinfo(Parse
214f0 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69 6e   *, Index *);.in
21500 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
21510 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
21520 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
21530 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a  , int, void *, .
21540 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
21550 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
21560 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
21570 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
21580 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
21590 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
215a0 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
215b0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
215c0 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
215d0 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
215e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
215f0 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
21600 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
21610 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
21620 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
21630 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
21640 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
21650 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  m*, char*, int, 
21660 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21670 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
21680 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
21690 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
216a0 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 53  d sqlite3AppendS
216b0 70 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c 69  pace(StrAccum*,i
216c0 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
216d0 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
216e0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
216f0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
21700 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a  mReset(StrAccum*
21710 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
21720 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
21730 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
21740 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
21750 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
21760 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
21770 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
21780 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
21790 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
217a0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
217b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
217c0 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
217d0 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
217e0 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
217f0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
21800 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
21810 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
21820 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r.*/.void *sqlit
21830 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
21840 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b  id*(*)(size_t));
21850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
21860 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76  serFree(void*, v
21870 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
21880 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
21890 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54  er(void*, int, T
218a0 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23  oken, Parse*);.#
218b0 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58  ifdef YYTRACKMAX
218c0 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74  STACKDEPTH.  int
218d0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74   sqlite3ParserSt
218e0 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a  ackPeak(void*);.
218f0 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
21900 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65  ite3AutoLoadExte
21910 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
21920 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
21930 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e  _OMIT_LOAD_EXTEN
21940 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  SION.  void sqli
21950 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
21960 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  ns(sqlite3*);.#e
21970 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
21980 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
21990 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23  ons(X).#endif..#
219a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
219b0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
219c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61    void sqlite3Ta
219d0 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c  bleLock(Parse *,
219e0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63   int, int, u8, c
219f0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65  onst char *);.#e
21a00 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
21a10 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76  lite3TableLock(v
21a20 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66  ,w,x,y,z).#endif
21a30 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
21a40 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  TEST.  int sqlit
21a50 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e  e3Utf8To8(unsign
21a60 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  ed char*);.#endi
21a70 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
21a80 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
21a90 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  LE.#  define sql
21aa0 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29  ite3VtabClear(Y)
21ab0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
21ac0 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20  e3VtabSync(X,Y) 
21ad0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
21ae0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52  ine sqlite3VtabR
21af0 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65  ollback(X).#  de
21b00 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21b10 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66  Commit(X).#  def
21b20 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
21b30 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64  nSync(db) 0.#  d
21b40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
21b50 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66  bLock(X) .#  def
21b60 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
21b70 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
21b80 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
21b90 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
21ba0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
21bb0 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
21bc0 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
21bd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
21be0 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
21bf0 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
21c00 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
21c10 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
21c20 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
21c30 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
21c40 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
21c50 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
21c60 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
21c70 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
21c80 6c 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20  lite3 *db, char 
21c90 2a 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  **);.   int sqli
21ca0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
21cb0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
21cc0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
21cd0 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
21ce0 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
21cf0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
21d00 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
21d10 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
21d20 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
21d30 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
21d40 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
21d50 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
21d60 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
21d70 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
21d80 2c 20 69 6e 74 29 3b 0a 20 20 20 56 54 61 62 6c  , int);.   VTabl
21d90 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
21da0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
21db0 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65  ble*);.#  define
21dc0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
21dd0 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
21de0 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
21df0 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
21e00 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
21e10 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
21e20 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
21e30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
21e40 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
21e50 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
21e60 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
21e70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
21e80 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
21e90 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
21ea0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
21eb0 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
21ec0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
21ed0 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
21ee0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
21ef0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
21f00 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
21f10 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
21f20 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
21f30 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
21f40 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
21f50 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
21f60 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
21f70 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
21f80 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
21f90 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
21fa0 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
21fb0 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
21fc0 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
21fd0 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
21fe0 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
21ff0 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
22000 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
22010 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
22020 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  on(sqlite3_conte
22030 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
22040 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73 71  value**);.int sq
22050 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
22060 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63  erIndex(Vdbe*, c
22070 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
22080 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61  ;.int sqlite3Tra
22090 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71  nsferBindings(sq
220a0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71  lite3_stmt *, sq
220b0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 69  lite3_stmt *);.i
220c0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
220d0 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
220e0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
220f0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
22100 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
22110 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
22120 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
22130 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
22140 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
22150 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
22160 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
22170 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
22180 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
22190 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
221a0 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
221b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
221c0 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
221d0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
221e0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
221f0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
22200 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
22210 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
22220 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
22230 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
22240 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  if../* Declarati
22250 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
22260 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
22270 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
22280 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
22290 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
222a0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
222b0 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
222c0 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
222d0 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
222e0 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
222f0 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
22300 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
22310 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
22320 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
22330 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
22340 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
22350 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
22360 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
22370 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
22380 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
22390 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a  nctionality is .
223a0 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
223b0 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
223c0 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
223d0 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
223e0 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
223f0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
22400 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
22410 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
22420 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
22430 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
22440 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
22450 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
22460 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
22470 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
22480 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
22490 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
224a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
224b0 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54  ctions(Parse*, T
224c0 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  able*, ExprList*
224d0 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
224e0 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
224f0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
22500 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33  int*, int);.  u3
22510 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  2 sqlite3FkOldma
22520 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  sk(Parse*, Table
22530 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69  *);.  FKey *sqli
22540 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
22550 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a  Table *);.#else.
22560 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22570 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63  3FkActions(a,b,c
22580 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,d).  #define sq
22590 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
225a0 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20  ,c,d).  #define 
225b0 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
225c0 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66  le(a,b,c).  #def
225d0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  ine sqlite3FkOld
225e0 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 30  mask(a,b)      0
225f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22600 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
22610 2c 63 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a 23  ,c,d) 0.#endif.#
22620 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22630 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
22640 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
22650 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
22660 20 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a   Table*);.#else.
22670 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22680 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 23  3FkDelete(a,b).#
22690 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
226a0 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
226b0 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
226c0 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
226d0 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
226e0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
226f0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
22700 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
22710 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
22720 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
22730 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
22740 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
22750 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
22760 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
22770 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
22780 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
22790 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
227a0 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
227b0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
227c0 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  TEST.** is not d
227d0 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
227e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
227f0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f  UILTIN_TEST.  vo
22800 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
22810 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
22820 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22830 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
22840 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
22850 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
22860 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
22870 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
22880 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
22890 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23 64  loc().#endif..#d
228a0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
228b0 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20 31  OWID           1
228c0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
228d0 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 20  X_EPH           
228e0 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49    2.#define IN_I
228f0 4e 44 45 58 5f 49 4e 44 45 58 20 20 20 20 20 20  NDEX_INDEX      
22900 20 20 20 20 20 33 0a 69 6e 74 20 73 71 6c 69 74       3.int sqlit
22910 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
22920 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
22930 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt*);..#ifdef SQ
22940 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
22950 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
22960 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
22970 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
22980 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
22990 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
229a0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  nt, int);.  int 
229b0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
229c0 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
229d0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
229e0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
229f0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20  lite3_file *);. 
22a00 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
22a10 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65  nalExists(sqlite
22a20 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73  3_file *p);.#els
22a30 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22a40 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70  te3JournalSize(p
22a50 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a  Vfs) ((pVfs)->sz
22a60 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e  OsFile).  #defin
22a70 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  e sqlite3Journal
22a80 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64  Exists(p) 1.#end
22a90 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
22aa0 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
22ab0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
22ac0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
22ad0 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
22ae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
22af0 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
22b00 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
22b10 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
22b20 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
22b30 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
22b40 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
22b50 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
22b60 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
22b70 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
22b80 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
22b90 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22ba0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
22bb0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22bc0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
22bd0 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
22be0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
22bf0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
22c00 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22c10 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22c20 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
22c30 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
22c40 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
22c50 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
22c60 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
22c70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
22c80 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
22c90 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
22ca0 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
22cb0 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
22cc0 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
22cd0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
22ce0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
22cf0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
22d00 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
22d10 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
22d20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
22d30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
22d40 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
22d50 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
22d60 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
22d70 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
22d80 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
22d90 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
22da0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
22db0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
22dc0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
22dd0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
22de0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
22df0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
22e00 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
22e10 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
22e20 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
22e30 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
22e40 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
22e50 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
22e60 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
22e70 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
22e80 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
22e90 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
22ea0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
22eb0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
22ec0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
22ed0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
22ee0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
22ef0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
22f00 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
22f10 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
22f20 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
22f30 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
22f40 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
22f50 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
22f60 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
22f70 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
22f80 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
22f90 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
22fa0 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
22fb0 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
22fc0 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
22fd0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
22fe0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
22ff0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
23000 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
23010 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
23020 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
23030 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
23040 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
23050 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
23060 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
23070 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
23080 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
23090 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
230a0 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
230b0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
230c0 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
230d0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
230e0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
230f0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
23100 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
23110 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
23120 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
23130 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
23140 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
23150 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
23160 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
23170 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
23180 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
23190 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
231a0 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
231b0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
231c0 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
231d0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
231e0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
231f0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
23200 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
23210 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
23220 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
23230 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
23240 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
23250 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
23260 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
23270 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
23280 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
23290 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
232a0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
232b0 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
232c0 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
232d0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
232e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
232f0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
23300 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
23310 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
23320 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
23330 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
23340 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
23350 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
23360 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
23370 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
23380 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
23390 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
233a0 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
233b0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
233c0 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
233d0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
233e0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
233f0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
23400 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
23410 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
23420 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
23430 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
23440 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
23450 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
23460 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
23470 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
23480 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
23490 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
234a0 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
234b0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
234c0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
234d0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
234e0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
234f0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
23500 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
23510 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23520 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
23530 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
23540 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
23550 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
23560 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
23570 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
23580 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
23590 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
235a0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
235b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
235c0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
235d0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
235e0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
235f0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
23600 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23610 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
23620 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
23630 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23640 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
23650 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
23660 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
23670 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23680 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
23690 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
236a0 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
236b0 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
236c0 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
236d0 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
236e0 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
236f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
23700 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
23710 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
23720 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
23730 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
23740 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
23750 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
23760 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
23770 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
23780 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
23790 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.