/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact c74457cd2c4bd77683bac76e698bf2ec2d3e13f9:


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 54 68 65 20 53 51  if../*.** The SQ
11a0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
11b0: 53 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73  STATUS macro mus
11c0: 74 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20  t be defined as 
11d0: 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
11e0: 2a 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20  * It determines 
11f0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1200: 68 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61  he features rela
1210: 74 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54  ted to .** SQLIT
1220: 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54  E_CONFIG_MEMSTAT
1230: 55 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  US are available
1240: 20 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e   by default or n
1250: 6f 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63  ot. This value c
1260: 61 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64  an.** be overrid
1270: 64 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75  den at runtime u
1280: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
1290: 5f 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a  _config() API..*
12a0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
12b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45  QLITE_DEFAULT_ME
12c0: 4d 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e  MSTATUS).# defin
12d0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
12e0: 5f 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e  _MEMSTATUS 1.#en
12f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74  dif../*.** Exact
1300: 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  ly one of the fo
1310: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
1320: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69  ust be defined i
1330: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70  n order to.** sp
1340: 65 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f  ecify which memo
1350: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75  ry allocation su
1360: 62 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a  bsystem to use..
1370: 2a 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  **.**     SQLITE
1380: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20  _SYSTEM_MALLOC  
1390: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e          // Use n
13a0: 6f 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c  ormal system mal
13b0: 6c 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c  loc().**     SQL
13c0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
13d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73             // Us
13e0: 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68  e Win32 native h
13f0: 65 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  eap API.**     S
1400: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20  QLITE_MEMDEBUG  
1410: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1420: 44 65 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f  Debugging versio
1430: 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c  n of system mall
1440: 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69  oc().**.** On Wi
1450: 6e 64 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51  ndows, if the SQ
1460: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
1470: 43 5f 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f  C_VALIDATE macro
1480: 20 69 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20   is defined and 
1490: 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20  the.** assert() 
14a0: 6d 61 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64  macro is enabled
14b0: 2c 20 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f  , each call into
14c0: 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76   the Win32 nativ
14d0: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
14e0: 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48  .** will cause H
14f0: 65 61 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62  eapValidate to b
1500: 65 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65  e called.  If he
1510: 61 70 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68  ap validation sh
1520: 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a  ould fail, an.**
1530: 20 61 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20   assertion will 
1540: 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a  be triggered..**
1550: 0a 2a 2a 20 28 48 69 73 74 6f 72 69 63 61 6c 20  .** (Historical 
1560: 6e 6f 74 65 3a 20 20 54 68 65 72 65 20 75 73 65  note:  There use
1570: 64 20 74 6f 20 62 65 20 73 65 76 65 72 61 6c 20  d to be several 
1580: 6f 74 68 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62  other options, b
1590: 75 74 20 77 65 27 76 65 0a 2a 2a 20 70 61 72 65  ut we've.** pare
15a0: 64 20 69 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73  d it down to jus
15b0: 74 20 74 68 65 73 65 20 74 68 72 65 65 2e 29 0a  t these three.).
15c0: 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66  **.** If none of
15d0: 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 64   the above are d
15e0: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74  efined, then set
15f0: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
1600: 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20  ALLOC as.** the 
1610: 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20  default..*/.#if 
1620: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53  defined(SQLITE_S
1630: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 2b 64 65  YSTEM_MALLOC)+de
1640: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
1650: 33 32 5f 4d 41 4c 4c 4f 43 29 2b 64 65 66 69 6e  32_MALLOC)+defin
1660: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
1670: 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 41  UG)>1.# error "A
1680: 74 20 6d 6f 73 74 20 6f 6e 65 20 6f 66 20 74 68  t most one of th
1690: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
16a0: 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
16b0: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a  ration options\.
16c0: 20 69 73 20 61 6c 6c 6f 77 73 3a 20 53 51 4c 49   is allows: SQLI
16d0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
16e0: 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  , SQLITE_WIN32_M
16f0: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45  ALLOC, SQLITE_ME
1700: 4d 44 45 42 55 47 22 0a 23 65 6e 64 69 66 0a 23  MDEBUG".#endif.#
1710: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1720: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29  E_SYSTEM_MALLOC)
1730: 2b 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  +defined(SQLITE_
1740: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 2b 64 65  WIN32_MALLOC)+de
1750: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
1760: 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69  DEBUG)==0.# defi
1770: 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ne SQLITE_SYSTEM
1780: 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66  _MALLOC 1.#endif
1790: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ../*.** If SQLIT
17a0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
17b0: 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c  MIT is not zero,
17c0: 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65   then try to kee
17d0: 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f  p the.** sizes o
17e0: 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
17f0: 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20  ions below this 
1800: 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73  value where poss
1810: 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ible..*/.#if !de
1820: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c  fined(SQLITE_MAL
1830: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a  LOC_SOFT_LIMIT).
1840: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1850: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
1860: 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f  T 1024.#endif../
1870: 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20  *.** We need to 
1880: 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f  define _XOPEN_SO
1890: 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20  URCE as follows 
18a0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62  in order to enab
18b0: 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20  le.** recursive 
18c0: 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20  mutexes on most 
18d0: 55 6e 69 78 20 73 79 73 74 65 6d 73 2e 20 20 42  Unix systems.  B
18e0: 75 74 20 4d 61 63 20 4f 53 20 58 20 69 73 20 64  ut Mac OS X is d
18f0: 69 66 66 65 72 65 6e 74 2e 0a 2a 2a 20 54 68 65  ifferent..** The
1900: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64   _XOPEN_SOURCE d
1910: 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f  efine causes pro
1920: 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53  blems for Mac OS
1930: 20 58 20 77 65 20 61 72 65 20 74 6f 6c 64 2c 0a   X we are told,.
1940: 2a 2a 20 73 6f 20 69 74 20 69 73 20 6f 6d 69 74  ** so it is omit
1950: 74 65 64 20 74 68 65 72 65 2e 20 20 53 65 65 20  ted there.  See 
1960: 74 69 63 6b 65 74 20 23 32 36 37 33 2e 0a 2a 2a  ticket #2673..**
1970: 0a 2a 2a 20 4c 61 74 65 72 20 77 65 20 6c 65 61  .** Later we lea
1980: 72 6e 20 74 68 61 74 20 5f 58 4f 50 45 4e 5f 53  rn that _XOPEN_S
1990: 4f 55 52 43 45 20 69 73 20 70 6f 6f 72 6c 79 20  OURCE is poorly 
19a0: 6f 72 20 69 6e 63 6f 72 72 65 63 74 6c 79 0a 2a  or incorrectly.*
19b0: 2a 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 6f 6e  * implemented on
19c0: 20 73 6f 6d 65 20 73 79 73 74 65 6d 73 2e 20 20   some systems.  
19d0: 53 6f 20 77 65 20 61 76 6f 69 64 20 64 65 66 69  So we avoid defi
19e0: 6e 69 6e 67 20 69 74 20 61 74 20 61 6c 6c 0a 2a  ning it at all.*
19f0: 2a 20 69 66 20 69 74 20 69 73 20 61 6c 72 65 61  * if it is alrea
1a00: 64 79 20 64 65 66 69 6e 65 64 20 6f 72 20 69 66  dy defined or if
1a10: 20 69 74 20 69 73 20 75 6e 6e 65 65 64 65 64 20   it is unneeded 
1a20: 62 65 63 61 75 73 65 20 77 65 20 61 72 65 0a 2a  because we are.*
1a30: 2a 20 6e 6f 74 20 64 6f 69 6e 67 20 61 20 74 68  * not doing a th
1a40: 72 65 61 64 73 61 66 65 20 62 75 69 6c 64 2e 20  readsafe build. 
1a50: 20 54 69 63 6b 65 74 20 23 32 36 38 31 2e 0a 2a   Ticket #2681..*
1a60: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 74 69  *.** See also ti
1a70: 63 6b 65 74 20 23 32 37 34 31 2e 0a 2a 2f 0a 23  cket #2741..*/.#
1a80: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50  if !defined(_XOP
1a90: 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64  EN_SOURCE) && !d
1aa0: 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f  efined(__DARWIN_
1ab0: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
1ac0: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 53 51 4c  _APPLE__) && SQL
1ad0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 0a 23  ITE_THREADSAFE.#
1ae0: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
1af0: 53 4f 55 52 43 45 20 35 30 30 20 20 2f 2a 20 4e  SOURCE 500  /* N
1b00: 65 65 64 65 64 20 74 6f 20 65 6e 61 62 6c 65 20  eeded to enable 
1b10: 70 74 68 72 65 61 64 20 72 65 63 75 72 73 69 76  pthread recursiv
1b20: 65 20 6d 75 74 65 78 65 73 20 2a 2f 0a 23 65 6e  e mutexes */.#en
1b30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54  dif../*.** The T
1b40: 43 4c 20 68 65 61 64 65 72 73 20 61 72 65 20 6f  CL headers are o
1b50: 6e 6c 79 20 6e 65 65 64 65 64 20 77 68 65 6e 20  nly needed when 
1b60: 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 54 43  compiling the TC
1b70: 4c 20 62 69 6e 64 69 6e 67 73 2e 0a 2a 2f 0a 23  L bindings..*/.#
1b80: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1b90: 45 5f 54 43 4c 29 20 7c 7c 20 64 65 66 69 6e 65  E_TCL) || define
1ba0: 64 28 54 43 4c 53 48 29 0a 23 20 69 6e 63 6c 75  d(TCLSH).# inclu
1bb0: 64 65 20 3c 74 63 6c 2e 68 3e 0a 23 65 6e 64 69  de <tcl.h>.#endi
1bc0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6e 79 20 70 65  f../*.** Many pe
1bd0: 6f 70 6c 65 20 61 72 65 20 66 61 69 6c 69 6e 67  ople are failing
1be0: 20 74 6f 20 73 65 74 20 2d 44 4e 44 45 42 55 47   to set -DNDEBUG
1bf0: 3d 31 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  =1 when compilin
1c00: 67 20 53 51 4c 69 74 65 2e 0a 2a 2a 20 53 65 74  g SQLite..** Set
1c10: 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65  ting NDEBUG make
1c20: 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c  s the code small
1c30: 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74 65  er and run faste
1c40: 72 2e 20 20 53 6f 20 74 68 65 20 66 6f 6c 6c 6f  r.  So the follo
1c50: 77 69 6e 67 0a 2a 2a 20 6c 69 6e 65 73 20 61 72  wing.** lines ar
1c60: 65 20 61 64 64 65 64 20 74 6f 20 61 75 74 6f 6d  e added to autom
1c70: 61 74 69 63 61 6c 6c 79 20 73 65 74 20 4e 44 45  atically set NDE
1c80: 42 55 47 20 75 6e 6c 65 73 73 20 74 68 65 20 2d  BUG unless the -
1c90: 44 53 51 4c 49 54 45 5f 44 45 42 55 47 3d 31 0a  DSQLITE_DEBUG=1.
1ca0: 2a 2a 20 6f 70 74 69 6f 6e 20 69 73 20 73 65 74  ** option is set
1cb0: 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62  .  Thus NDEBUG b
1cc0: 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e  ecomes an opt-in
1cd0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20   rather than an 
1ce0: 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75  opt-out.** featu
1cf0: 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  re..*/.#if !defi
1d00: 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21  ned(NDEBUG) && !
1d10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1d20: 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20  EBUG) .# define 
1d30: 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a  NDEBUG 1.#endif.
1d40: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74 63  ./*.** The testc
1d50: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 75  ase() macro is u
1d60: 73 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63 6f  sed to aid in co
1d70: 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e 20  verage testing. 
1d80: 20 57 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20   When .** doing 
1d90: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
1da0: 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20  , the condition 
1db0: 69 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d  inside the argum
1dc0: 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61  ent to.** testca
1dd0: 73 65 28 29 20 6d 75 73 74 20 62 65 20 65 76 61  se() must be eva
1de0: 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72 75 65  luated both true
1df0: 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72   and false in or
1e00: 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75  der to.** get fu
1e10: 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61  ll branch covera
1e20: 67 65 2e 20 20 54 68 65 20 74 65 73 74 63 61 73  ge.  The testcas
1e30: 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73  e() macro is ins
1e40: 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70  erted.** to help
1e50: 20 65 6e 73 75 72 65 20 61 64 65 71 75 61 74 65   ensure adequate
1e60: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 69   test coverage i
1e70: 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65 20 73  n places where s
1e80: 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69  imple.** conditi
1e90: 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65  on/decision cove
1ea0: 72 61 67 65 20 69 73 20 69 6e 61 64 65 71 75 61  rage is inadequa
1eb0: 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  te.  For example
1ec0: 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  , testcase().** 
1ed0: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d  can be used to m
1ee0: 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72  ake sure boundar
1ef0: 79 20 76 61 6c 75 65 73 20 61 72 65 20 74 65 73  y values are tes
1f00: 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74  ted.  For.** bit
1f10: 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74  mask tests, test
1f20: 63 61 73 65 28 29 20 63 61 6e 20 62 65 20 75 73  case() can be us
1f30: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
1f40: 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73  each bit.** is s
1f50: 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75  ignificant and u
1f60: 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63  sed at least onc
1f70: 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74  e.  On switch st
1f80: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72  atements.** wher
1f90: 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73  e multiple cases
1fa0: 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20   go to the same 
1fb0: 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74  block of code, t
1fc0: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e  estcase().** can
1fd0: 20 69 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c   insure that all
1fe0: 20 63 61 73 65 73 20 61 72 65 20 65 76 61 6c 75   cases are evalu
1ff0: 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64  ated..**.*/.#ifd
2000: 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ef SQLITE_COVERA
2010: 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73  GE_TEST.  void s
2020: 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 69  qlite3Coverage(i
2030: 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65  nt);.# define te
2040: 73 74 63 61 73 65 28 58 29 20 20 69 66 28 20 58  stcase(X)  if( X
2050: 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72   ){ sqlite3Cover
2060: 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d  age(__LINE__); }
2070: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2080: 74 65 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64  testcase(X).#end
2090: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45  if../*.** The TE
20a0: 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20  STONLY macro is 
20b0: 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20  used to enclose 
20c0: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
20d0: 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65  tions or.** othe
20e0: 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74  r bits of code t
20f0: 68 61 74 20 61 72 65 20 6e 65 65 64 65 64 20 74  hat are needed t
2100: 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20 61 72  o support the ar
2110: 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69  guments.** withi
2120: 6e 20 74 65 73 74 63 61 73 65 28 29 20 61 6e 64  n testcase() and
2130: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73   assert() macros
2140: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2150: 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66  d(NDEBUG) || def
2160: 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45  ined(SQLITE_COVE
2170: 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66  RAGE_TEST).# def
2180: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20  ine TESTONLY(X) 
2190: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
21a0: 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65  e TESTONLY(X).#e
21b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65  ndif../*.** Some
21c0: 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20  times we need a 
21d0: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  small amount of 
21e0: 63 6f 64 65 20 73 75 63 68 20 61 73 20 61 20 76  code such as a v
21f0: 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69  ariable initiali
2200: 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74  zation.** to set
2210: 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61  up for a later a
2220: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2230: 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61  t.  We do not wa
2240: 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a  nt this code to.
2250: 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e 20 61  ** appear when a
2260: 73 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62  ssert() is disab
2270: 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  led.  The follow
2280: 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65  ing macro is the
2290: 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74  refore.** used t
22a0: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73  o contain that s
22b0: 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20  etup code.  The 
22c0: 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74  "VVA" acronym st
22d0: 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72  ands for.** "Ver
22e0: 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
22f0: 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65  ation, and Accre
2300: 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f  ditation".  In o
2310: 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a  ther words, the.
2320: 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56  ** code within V
2330: 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f  VA_ONLY() will o
2340: 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76  nly run during v
2350: 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63  erification proc
2360: 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  esses..*/.#ifnde
2370: 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e  f NDEBUG.# defin
2380: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58  e VVA_ONLY(X)  X
2390: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23a0: 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64  VVA_ONLY(X).#end
23b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c  if../*.** The AL
23c0: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d  WAYS and NEVER m
23d0: 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62  acros surround b
23e0: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
23f0: 6e 73 20 77 68 69 63 68 20 0a 2a 2a 20 61 72 65  ns which .** are
2400: 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77   intended to alw
2410: 61 79 73 20 62 65 20 74 72 75 65 20 6f 72 20 66  ays be true or f
2420: 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76 65  alse, respective
2430: 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70  ly.  Such.** exp
2440: 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62  ressions could b
2450: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  e omitted from t
2460: 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65  he code complete
2470: 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a  ly.  But they.**
2480: 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e   are included in
2490: 20 61 20 66 65 77 20 63 61 73 65 73 20 69 6e 20   a few cases in 
24a0: 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65  order to enhance
24b0: 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a   the resilience.
24c0: 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20  ** of SQLite to 
24d0: 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76  unexpected behav
24e0: 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68  ior - to make th
24f0: 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61  e code "self-hea
2500: 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63  ling".** or "duc
2510: 74 69 6c 65 22 20 72 61 74 68 65 72 20 74 68 61  tile" rather tha
2520: 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65  n being "brittle
2530: 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61  " and crashing a
2540: 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68  t the first.** h
2550: 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64  int of unplanned
2560: 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a   behavior..**.**
2570: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2580: 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45   ALWAYS and NEVE
2590: 52 20 61 72 65 20 61 64 64 65 64 20 66 6f 72 20  R are added for 
25a0: 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a  defensive code..
25b0: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67  **.** When doing
25c0: 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e   coverage testin
25d0: 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56  g ALWAYS and NEV
25e0: 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65  ER are hard-code
25f0: 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20  d to.** be true 
2600: 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61  and false so tha
2610: 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c  t the unreachabl
2620: 65 20 63 6f 64 65 20 74 68 65 6e 20 73 70 65 63  e code then spec
2630: 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20  ify will.** not 
2640: 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e  be counted as un
2650: 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a  tested code..*/.
2660: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2670: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
2680: 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59  ).# define ALWAY
2690: 53 28 58 29 20 20 20 20 20 20 28 31 29 0a 23 20  S(X)      (1).# 
26a0: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
26b0: 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20        (0).#elif 
26c0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
26d0: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
26e0: 28 58 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a  (X)      ((X)?1:
26f0: 28 61 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23  (assert(0),0)).#
2700: 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29   define NEVER(X)
2710: 20 20 20 20 20 20 20 28 28 58 29 3f 28 61 73 73         ((X)?(ass
2720: 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c  ert(0),1):0).#el
2730: 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  se.# define ALWA
2740: 59 53 28 58 29 20 20 20 20 20 20 28 58 29 0a 23  YS(X)      (X).#
2750: 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29   define NEVER(X)
2760: 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69         (X).#endi
2770: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
2780: 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  true (non-zero) 
2790: 69 66 20 74 68 65 20 69 6e 70 75 74 20 69 73 20  if the input is 
27a0: 61 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  a integer that i
27b0: 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74  s too large.** t
27c0: 6f 20 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73  o fit in 32-bits
27d0: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
27e0: 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
27f0: 76 61 72 69 6f 75 73 20 74 65 73 74 63 61 73 65  various testcase
2800: 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20  ().** macros to 
2810: 76 65 72 69 66 79 20 74 68 61 74 20 77 65 20 68  verify that we h
2820: 61 76 65 20 74 65 73 74 65 64 20 53 51 4c 69 74  ave tested SQLit
2830: 65 20 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65  e for large-file
2840: 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65   support..*/.#de
2850: 66 69 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28  fine IS_BIG_INT(
2860: 58 29 20 20 28 28 28 58 29 26 7e 28 69 36 34 29  X)  (((X)&~(i64)
2870: 30 78 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a  0xffffffff)!=0).
2880: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f  ./*.** The macro
2890: 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61   unlikely() is a
28a0: 20 68 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f   hint that surro
28b0: 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a  unds a boolean.*
28c0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  * expression tha
28d0: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c  t is usually fal
28e0: 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c  se.  Macro likel
28f0: 79 28 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a  y() surrounds.**
2900: 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65   a boolean expre
2910: 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
2920: 75 61 6c 6c 79 20 74 72 75 65 2e 20 20 47 43 43  ually true.  GCC
2930: 20 69 73 20 61 62 6c 65 20 74 6f 0a 2a 2a 20 75   is able to.** u
2940: 73 65 20 74 68 65 73 65 20 68 69 6e 74 73 20 74  se these hints t
2950: 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65  o generate bette
2960: 72 20 63 6f 64 65 2c 20 73 6f 6d 65 74 69 6d 65  r code, sometime
2970: 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
2980: 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 30  d(__GNUC__) && 0
2990: 0a 23 20 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79  .# define likely
29a0: 28 58 29 20 20 20 20 5f 5f 62 75 69 6c 74 69 6e  (X)    __builtin
29b0: 5f 65 78 70 65 63 74 28 28 58 29 2c 31 29 0a 23  _expect((X),1).#
29c0: 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79   define unlikely
29d0: 28 58 29 20 20 5f 5f 62 75 69 6c 74 69 6e 5f 65  (X)  __builtin_e
29e0: 78 70 65 63 74 28 28 58 29 2c 30 29 0a 23 65 6c  xpect((X),0).#el
29f0: 73 65 0a 23 20 64 65 66 69 6e 65 20 6c 69 6b 65  se.# define like
2a00: 6c 79 28 58 29 20 20 20 20 21 21 28 58 29 0a 23  ly(X)    !!(X).#
2a10: 20 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79   define unlikely
2a20: 28 58 29 20 20 21 21 28 58 29 0a 23 65 6e 64 69  (X)  !!(X).#endi
2a30: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  f..#include "sql
2a40: 69 74 65 33 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ite3.h".#include
2a50: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
2a60: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
2a70: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
2a80: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
2a90: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
2aa0: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
2ab0: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
2ac0: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
2ad0: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
2ae0: 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73  ing for a proces
2af0: 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66  sor that lacks f
2b00: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75  loating point su
2b10: 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69  pport,.** substi
2b20: 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72  tute integer for
2b30: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
2b40: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2b50: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
2b60: 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f  OINT.# define do
2b70: 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36  uble sqlite_int6
2b80: 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74  4.# define float
2b90: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
2ba0: 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c  define LONGDOUBL
2bb0: 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e  E_TYPE sqlite_in
2bc0: 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c  t64.# ifndef SQL
2bd0: 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20  ITE_BIG_DBL.#   
2be0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
2bf0: 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33  G_DBL (((sqlite3
2c00: 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23  _int64)1)<<50).#
2c10: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
2c20: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
2c30: 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64  TIME_FUNCS 1.# d
2c40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
2c50: 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65  T_TRACE 1.# unde
2c60: 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45  f SQLITE_MIXED_E
2c70: 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41  NDIAN_64BIT_FLOA
2c80: 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  T.# undef SQLITE
2c90: 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64  _HAVE_ISNAN.#end
2ca0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2cb0: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69  E_BIG_DBL.# defi
2cc0: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
2cd0: 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a  L (1e99).#endif.
2ce0: 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50  ./*.** OMIT_TEMP
2cf0: 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69  DB is set to 1 i
2d00: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
2d10: 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c  MPDB is defined,
2d20: 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61   or 0.** afterwa
2d30: 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20  rd. Having this 
2d40: 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20  macro allows us 
2d50: 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63  to cause the C c
2d60: 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f  ompiler .** to o
2d70: 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79  mit code used by
2d80: 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74   TEMP tables wit
2d90: 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64  hout messy #ifnd
2da0: 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  ef statements..*
2db0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2dc0: 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66  OMIT_TEMPDB.#def
2dd0: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
2de0: 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  1.#else.#define 
2df0: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65  OMIT_TEMPDB 0.#e
2e00: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2e10: 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75  "file format" nu
2e20: 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  mber is an integ
2e30: 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65  er that is incre
2e40: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a  mented whenever.
2e50: 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65  ** the VDBE-leve
2e60: 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68  l file format ch
2e70: 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c  anges.  The foll
2e80: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66  owing macros def
2e90: 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64  ine the.** the d
2ea0: 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d  efault file form
2eb0: 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  at for new datab
2ec0: 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78  ases and the max
2ed0: 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74  imum file format
2ee0: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62  .** that the lib
2ef0: 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a  rary can read..*
2f00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2f10: 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  _MAX_FILE_FORMAT
2f20: 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   4.#ifndef SQLIT
2f30: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
2f40: 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53  ORMAT.# define S
2f50: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
2f60: 4c 45 5f 46 4f 52 4d 41 54 20 31 0a 23 65 6e 64  LE_FORMAT 1.#end
2f70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d  if../*.** Determ
2f80: 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67  ine whether trig
2f90: 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69  gers are recursi
2fa0: 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ve by default.  
2fb0: 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63  This can be.** c
2fc0: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
2fd0: 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d  me using a pragm
2fe0: 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  a..*/.#ifndef SQ
2ff0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
3000: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a  URSIVE_TRIGGERS.
3010: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3020: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
3030: 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e  E_TRIGGERS 0.#en
3040: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69  dif../*.** Provi
3050: 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  de a default val
3060: 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45  ue for SQLITE_TE
3070: 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65  MP_STORE in case
3080: 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69   it is not speci
3090: 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63  fied.** on the c
30a0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23  ommand-line.*/.#
30b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45  ifndef SQLITE_TE
30c0: 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e  MP_STORE.# defin
30d0: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
30e0: 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ORE 1.#endif../*
30f0: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
3100: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
3110: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
3120: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
3130: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
3140: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
3150: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
3160: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
3170: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
3180: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
3190: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
31a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 68  #endif../*.** Ch
31b0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
31c0: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
31d0: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
31e0: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
31f0: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
3200: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
3210: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
3220: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
3230: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
3240: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
3250: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
3260: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
3270: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
3280: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
3290: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
32a0: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
32b0: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
32c0: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
32d0: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
32e0: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
32f0: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
3300: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
3310: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
3320: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
3330: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
3340: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
3350: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
3360: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
3370: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
3380: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
3390: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
33a0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
33b0: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
33c0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
33d0: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
33e0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
33f0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
3400: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
3410: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
3420: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
3430: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
3440: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
3450: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
3460: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
3470: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
3480: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
3490: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
34a0: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
34b0: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
34c0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
34d0: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
34e0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
34f0: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
3500: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
3510: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
3520: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3530: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
3540: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
3550: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
3560: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
3570: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
3580: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
3590: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
35a0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
35b0: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
35c0: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
35d0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
35e0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
35f0: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
3600: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
3610: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
3620: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
3630: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
3640: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
3650: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
3660: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
3670: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
3680: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
3690: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
36a0: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
36b0: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
36c0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
36d0: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
36e0: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
36f0: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
3700: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
3710: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
3720: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
3730: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
3740: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3750: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
3760: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
3770: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
3780: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
3790: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
37a0: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
37b0: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
37c0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
37d0: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
37e0: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
37f0: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
3800: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
3810: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
3820: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
3830: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
3840: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
3850: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
3860: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
3870: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
3880: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
3890: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
38a0: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
38b0: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
38c0: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
38d0: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
38e0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
38f0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
3900: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
3910: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
3920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
3930: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
3940: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
3950: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
3960: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
3970: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
3980: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
3990: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
39a0: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
39b0: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
39c0: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
39d0: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
39e0: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
39f0: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
3a00: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
3a10: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
3a20: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
3a30: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
3a40: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
3a50: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
3a60: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
3a70: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
3a80: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
3a90: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
3aa0: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
3ab0: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
3ac0: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
3ad0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
3ae0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
3af0: 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
3b00: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
3b10: 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20   machine is big 
3b20: 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e  or little endian
3b30: 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65 64 20 61  ,.** evaluated a
3b40: 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23 69  t runtime..*/.#i
3b50: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
3b60: 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69  GAMATION.const i
3b70: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
3b80: 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20  1;.#else.extern 
3b90: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
3ba0: 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  3one;.#endif.#if
3bb0: 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 7c   defined(i386) |
3bc0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
3bd0: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
3be0: 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20 20 20 20  M_IX86)\.       
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64        || defined
3c10: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
3c20: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
3c30: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3c40: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30  E_BIGENDIAN    0
3c50: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3c60: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a  _LITTLEENDIAN 1.
3c70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3c80: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
3c90: 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73  ITE_UTF16LE.#els
3ca0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
3cb0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28  E_BIGENDIAN    (
3cc0: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
3cd0: 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66  e3one)==0).# def
3ce0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
3cf0: 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20  EENDIAN (*(char 
3d00: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
3d10: 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =1).# define SQL
3d20: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
3d30: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
3d40: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
3d50: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
3d60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
3d70: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
3d80: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
3d90: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
3da0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
3db0: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
3dc0: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
3dd0: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
3de0: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
3df0: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
3e00: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
3e10: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
3e20: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
3e30: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
3e40: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
3e50: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
3e60: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
3e70: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
3e80: 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70  ./* .** Round up
3e90: 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65   a number to the
3ea0: 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c   next larger mul
3eb0: 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69  tiple of 8.  Thi
3ec0: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
3ed0: 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69  force 8-byte ali
3ee0: 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74  gnment on 64-bit
3ef0: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a   architectures..
3f00: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
3f10: 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37  8(x)     (((x)+7
3f20: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  )&~7)../*.** Rou
3f30: 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e  nd down to the n
3f40: 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20  earest multiple 
3f50: 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  of 8.*/.#define 
3f60: 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28  ROUNDDOWN8(x) ((
3f70: 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73  x)&~7)../*.** As
3f80: 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f  sert that the po
3f90: 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e  inter X is align
3fa0: 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20  ed to an 8-byte 
3fb0: 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a  boundary.  This.
3fc0: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
3fd0: 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73   only within ass
3fe0: 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20  ert() to verify 
3ff0: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
4000: 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d  ts.** all alignm
4010: 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ent restrictions
4020: 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20   correct..**.** 
4030: 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54  Except, if SQLIT
4040: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
4050: 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e  _MALLOC is defin
4060: 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  ed, then the.** 
4070: 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f  underlying mallo
4080: 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e  c() implemention
4090: 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73   might return us
40a0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a   4-byte aligned.
40b0: 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e  ** pointers.  In
40c0: 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79   that case, only
40d0: 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61   verify 4-byte a
40e0: 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66  lignment..*/.#if
40f0: 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54  def SQLITE_4_BYT
4100: 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43  E_ALIGNED_MALLOC
4110: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
4120: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
4130: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
4140: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29  ) - (char*)0)&3)
4150: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
4160: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
4170: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
4180: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
4190: 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23  har*)0)&7)==0).#
41a0: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  endif.../*.** An
41b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
41c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
41d0: 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
41e0: 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68  store the busy-h
41f0: 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61  andler.** callba
4200: 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73  ck for a given s
4210: 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a  qlite handle. .*
4220: 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e  *.** The sqlite.
4230: 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62  busyHandler memb
4240: 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  er of the sqlite
4250: 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73   struct contains
4260: 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c   the busy.** cal
4270: 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61  lback for the da
4280: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45  tabase handle. E
4290: 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64  ach pager opened
42a0: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a   via the sqlite.
42b0: 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73  ** handle is pas
42c0: 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  sed a pointer to
42d0: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
42e0: 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61  ler. The busy-ha
42f0: 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  ndler.** callbac
4300: 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  k is currently i
4310: 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d  nvoked only from
4320: 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e   within pager.c.
4330: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
4340: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42  ct BusyHandler B
4350: 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75  usyHandler;.stru
4360: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b  ct BusyHandler {
4370: 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28  .  int (*xFunc)(
4380: 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a  void *,int);  /*
4390: 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   The busy callba
43a0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  ck */.  void *pA
43b0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
43c0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20     /* First arg 
43d0: 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  to busy callback
43e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b   */.  int nBusy;
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20   /* Incremented 
4410: 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63  with each busy c
4420: 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  all */.};../*.**
4430: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73   Name of the mas
4440: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
4450: 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20  le.  The master 
4460: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a  database table.*
4470: 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74  * is a special t
4480: 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20  able that holds 
4490: 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74  the names and at
44a0: 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a  tributes of all.
44b0: 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61  ** user tables a
44c0: 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23  nd indices..*/.#
44d0: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41  define MASTER_NA
44e0: 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65  ME       "sqlite
44f0: 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65  _master".#define
4500: 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d   TEMP_MASTER_NAM
4510: 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  E  "sqlite_temp_
4520: 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54  master"../*.** T
4530: 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
4540: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
4550: 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ase table..*/.#d
4560: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f  efine MASTER_ROO
4570: 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  T       1../*.**
4580: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
4590: 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a   schema table..*
45a0: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
45b0: 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d  _TABLE(x)  ((!OM
45c0: 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d  IT_TEMPDB)&&(x==
45d0: 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e  1)?TEMP_MASTER_N
45e0: 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29  AME:MASTER_NAME)
45f0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e  ../*.** A conven
4600: 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74  ience macro that
4610: 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
4620: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
4630: 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a  in.** an array..
4640: 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79  */.#define Array
4650: 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74  Size(X)    ((int
4660: 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65  )(sizeof(X)/size
4670: 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a  of(X[0])))../*.*
4680: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
4690: 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72  value as a destr
46a0: 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75  uctor means to u
46b0: 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  se sqlite3DbFree
46c0: 28 29 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ()..** This is a
46d0: 6e 20 69 6e 74 65 72 6e 61 6c 20 65 78 74 65 6e  n internal exten
46e0: 73 69 6f 6e 20 74 6f 20 53 51 4c 49 54 45 5f 53  sion to SQLITE_S
46f0: 54 41 54 49 43 20 61 6e 64 20 53 51 4c 49 54 45  TATIC and SQLITE
4700: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
4710: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
4720: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
4730: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
4740: 65 29 73 71 6c 69 74 65 33 44 62 46 72 65 65 29  e)sqlite3DbFree)
4750: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c  ../*.** When SQL
4760: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20  ITE_OMIT_WSD is 
4770: 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e  defined, it mean
4780: 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67 65  s that the targe
4790: 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a  t platform does.
47a0: 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57  ** not support W
47b0: 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44  ritable Static D
47c0: 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20 61  ata (WSD) such a
47d0: 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61  s global and sta
47e0: 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a  tic variables..*
47f0: 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20  * All variables 
4800: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 6f  must either be o
4810: 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64  n the stack or d
4820: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
4830: 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  ated from.** the
4840: 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44   heap.  When WSD
4850: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c   is unsupported,
4860: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64 65   the variable de
4870: 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74  clarations scatt
4880: 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f  ered.** througho
4890: 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ut the SQLite co
48a0: 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63  de must become c
48b0: 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64  onstants instead
48c0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53  .  The SQLITE_WS
48d0: 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  D.** macro is us
48e0: 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72 70  ed for this purp
48f0: 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61  ose.  And instea
4900: 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67  d of referencing
4910: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
4920: 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73   directly, we us
4930: 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61  e its constant a
4940: 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75  s a key to looku
4950: 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  p the run-time a
4960: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66  llocated.** buff
4970: 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65  er that holds re
4980: 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68  al variable.  Th
4990: 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c  e constant is al
49a0: 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  so the initializ
49b0: 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75  er.** for the ru
49c0: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
49d0: 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49   buffer..**.** I
49e0: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
49f0: 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73 75   where WSD is su
4a00: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c  pported, the SQL
4a10: 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42  ITE_WSD and GLOB
4a20: 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63  AL.** macros bec
4a30: 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68  ome no-ops and h
4a40: 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d  ave zero perform
4a50: 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a  ance impact..*/.
4a60: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
4a70: 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65  IT_WSD.  #define
4a80: 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73   SQLITE_WSD cons
4a90: 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  t.  #define GLOB
4aa0: 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71  AL(t,v) (*(t*)sq
4ab0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28  lite3_wsd_find((
4ac0: 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65  void*)&(v), size
4ad0: 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e  of(v))).  #defin
4ae0: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
4af0: 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72  onfig GLOBAL(str
4b00: 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
4b10: 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  g, sqlite3Config
4b20: 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ).  int sqlite3_
4b30: 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20  wsd_init(int N, 
4b40: 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a  int J);.  void *
4b50: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
4b60: 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29  (void *K, int L)
4b70: 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
4b80: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20  e SQLITE_WSD .  
4b90: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
4ba0: 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20  ,v) v.  #define 
4bb0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
4bc0: 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
4bd0: 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  g.#endif../*.** 
4be0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
4bf0: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
4c00: 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c   suppress compil
4c10: 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20  er warnings and 
4c20: 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c  to.** make it cl
4c30: 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61  ear to human rea
4c40: 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63  ders when a func
4c50: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
4c60: 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a  s deliberately .
4c70: 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77  ** left unused w
4c80: 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
4c90: 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68  f a function. Th
4ca0: 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65  is usually happe
4cb0: 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e  ns when.** a fun
4cc0: 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
4cd0: 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  via a function p
4ce0: 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d  ointer. For exam
4cf0: 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c  ple the .** impl
4d00: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e  ementation of an
4d10: 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20 73   SQL aggregate s
4d20: 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79  tep callback may
4d30: 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20   not use the.** 
4d40: 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61  parameter indica
4d50: 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20  ting the number 
4d60: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
4d70: 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72 65  sed to the aggre
4d80: 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b  gate,.** if it k
4d90: 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20 69  nows that this i
4da0: 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77  s enforced elsew
4db0: 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  here..**.** When
4dc0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
4dd0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65  meter is not use
4de0: 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20  d at all within 
4df0: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
4e00: 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73  nction,.** it is
4e10: 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64   generally named
4e20: 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e   "NotUsed" or "N
4e30: 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65  otUsed2" to make
4e40: 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65   things even cle
4e50: 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72  arer..** However
4e60: 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d  , these macros m
4e70: 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ay also be used 
4e80: 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72 6e  to suppress warn
4e90: 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a  ings related to.
4ea0: 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  ** parameters th
4eb0: 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f  at may or may no
4ec0: 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e 64  t be used depend
4ed0: 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69  ing on compilati
4ee0: 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46  on options..** F
4ef0: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65  or example those
4f00: 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79   parameters only
4f10: 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74 28   used in assert(
4f20: 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e  ) statements. In
4f30: 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20   these.** cases 
4f40: 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 61  the parameters a
4f50: 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20  re named as per 
4f60: 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e  the usual conven
4f70: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
4f80: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
4f90: 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a  ER(x) (void)(x).
4fa0: 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50  #define UNUSED_P
4fb0: 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55  ARAMETER2(x,y) U
4fc0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
4fd0: 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  x),UNUSED_PARAME
4fe0: 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f  TER(y)../*.** Fo
4ff0: 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65 73  rward references
5000: 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a   to structures.*
5010: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5020: 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f   AggInfo AggInfo
5030: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5040: 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74   AuthContext Aut
5050: 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  hContext;.typede
5060: 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  f struct Autoinc
5070: 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f  Info AutoincInfo
5080: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5090: 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a   Bitvec Bitvec;.
50a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
50b0: 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a  ollSeq CollSeq;.
50c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
50d0: 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79  olumn Column;.ty
50e0: 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 20  pedef struct Db 
50f0: 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  Db;.typedef stru
5100: 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61  ct Schema Schema
5110: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5120: 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65   Expr Expr;.type
5130: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 4c  def struct ExprL
5140: 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79  ist ExprList;.ty
5150: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
5160: 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a  rSpan ExprSpan;.
5170: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
5180: 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65  Key FKey;.typede
5190: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  f struct FuncDes
51a0: 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74  tructor FuncDest
51b0: 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20  ructor;.typedef 
51c0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 46  struct FuncDef F
51d0: 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20  uncDef;.typedef 
51e0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
51f0: 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a  sh FuncDefHash;.
5200: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
5210: 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79  dList IdList;.ty
5220: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64  pedef struct Ind
5230: 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65  ex Index;.typede
5240: 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  f struct IndexSa
5250: 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65  mple IndexSample
5260: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5270: 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61   KeyClass KeyCla
5280: 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ss;.typedef stru
5290: 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e  ct KeyInfo KeyIn
52a0: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
52b0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f  ct Lookaside Loo
52c0: 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20  kaside;.typedef 
52d0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
52e0: 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  Slot LookasideSl
52f0: 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ot;.typedef stru
5300: 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65  ct Module Module
5310: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5320: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d   NameContext Nam
5330: 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65  eContext;.typede
5340: 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20 50  f struct Parse P
5350: 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74  arse;.typedef st
5360: 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53  ruct RowSet RowS
5370: 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  et;.typedef stru
5380: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76  ct Savepoint Sav
5390: 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20  epoint;.typedef 
53a0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65  struct Select Se
53b0: 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74  lect;.typedef st
53c0: 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63  ruct SrcList Src
53d0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
53e0: 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53 74  ruct StrAccum St
53f0: 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20  rAccum;.typedef 
5400: 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62  struct Table Tab
5410: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5420: 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62  ct TableLock Tab
5430: 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20  leLock;.typedef 
5440: 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b  struct Token Tok
5450: 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  en;.typedef stru
5460: 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67  ct Trigger Trigg
5470: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
5480: 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72  ct TriggerPrg Tr
5490: 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65  iggerPrg;.typede
54a0: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
54b0: 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70  Step TriggerStep
54c0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
54d0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
54e0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a  UnpackedRecord;.
54f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
5500: 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79  Table VTable;.ty
5510: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61  pedef struct Vta
5520: 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79  bCtx VtabCtx;.ty
5530: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c  pedef struct Wal
5540: 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65  ker Walker;.type
5550: 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65  def struct Where
5560: 50 6c 61 6e 20 57 68 65 72 65 50 6c 61 6e 3b 0a  Plan WherePlan;.
5570: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
5580: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
5590: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
55a0: 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 57 68  ct WhereLevel Wh
55b0: 65 72 65 4c 65 76 65 6c 3b 0a 0a 2f 2a 0a 2a 2a  ereLevel;../*.**
55c0: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
55d0: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
55e0: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
55f0: 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20  he "u8" and .** 
5600: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
5610: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
5620: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
5630: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
5640: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
5650: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
5660: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
5670: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
5680: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
5690: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
56a0: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
56b0: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a  ude "pcache.h"..
56c0: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
56d0: 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e  #include "mutex.
56e0: 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  h".../*.** Each 
56f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
5700: 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20   be accessed by 
5710: 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e  the system is an
5720: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
5730: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
5740: 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20  ructure.  There 
5750: 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f  are normally two
5760: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
5770: 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73  ures.** in the s
5780: 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61  qlite.aDb[] arra
5790: 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68  y.  aDb[0] is th
57a0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
57b0: 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b  file and.** aDb[
57c0: 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61  1] is the databa
57d0: 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
57e0: 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74  hold temporary t
57f0: 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e  ables.  Addition
5800: 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  al.** databases 
5810: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e  may be attached.
5820: 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a  .*/.struct Db {.
5830: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
5840: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
5850: 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  f this database 
5860: 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
5870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
5880: 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72   B*Tree structur
5890: 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62  e for this datab
58a0: 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  ase file */.  u8
58b0: 20 69 6e 54 72 61 6e 73 3b 20 20 20 20 20 20 20   inTrans;       
58c0: 20 20 20 2f 2a 20 30 3a 20 6e 6f 74 20 77 72 69     /* 0: not wri
58d0: 74 61 62 6c 65 2e 20 20 31 3a 20 54 72 61 6e 73  table.  1: Trans
58e0: 61 63 74 69 6f 6e 2e 20 20 32 3a 20 43 68 65 63  action.  2: Chec
58f0: 6b 70 6f 69 6e 74 20 2a 2f 0a 20 20 75 38 20 73  kpoint */.  u8 s
5900: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
5910: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
5920: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
5930: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
5940: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
5950: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
5960: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
5970: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
5980: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
5990: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
59a0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
59b0: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
59c0: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
59d0: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
59e0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
59f0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
5a00: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
5a10: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
5a20: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
5a30: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
5a40: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
5a50: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
5a60: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
5a70: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
5a80: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
5a90: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
5aa0: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
5ab0: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
5ac0: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
5ad0: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
5ae0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
5af0: 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62  ** .** Schema ob
5b00: 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61  jects are automa
5b10: 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61  tically dealloca
5b20: 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73  ted when the las
5b30: 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20  t Btree that.** 
5b40: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20  references them 
5b50: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20  is destroyed.   
5b60: 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20  The TEMP Schema 
5b70: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65  is manually free
5b80: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
5b90: 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20  close()..*.** A 
5ba0: 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68  thread must be h
5bb0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
5bc0: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
5bd0: 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64  ing Btree in ord
5be0: 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20  er.** to access 
5bf0: 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20  Schema content. 
5c00: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   This implies th
5c10: 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75  at the thread mu
5c20: 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f  st also be.** ho
5c30: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
5c40: 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e   the sqlite3 con
5c50: 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
5c60: 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74  that owns the Bt
5c70: 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45  ree..** For a TE
5c80: 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20  MP Schema, only 
5c90: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  the connection m
5ca0: 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64  utex is required
5cb0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65  ..*/.struct Sche
5cc0: 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d  ma {.  int schem
5cd0: 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44  a_cookie;   /* D
5ce0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
5cf0: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
5d00: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
5d10: 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e   int iGeneration
5d20: 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74  ;     /* Generat
5d30: 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e  ion counter.  In
5d40: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
5d50: 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20  ach change */.  
5d60: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
5d70: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
5d80: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
5d90: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
5da0: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
5db0: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
5dc0: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
5dd0: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
5de0: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
5df0: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
5e00: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
5e10: 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68  .  Hash fkeyHash
5e20: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  ;       /* All f
5e30: 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72  oreign keys by r
5e40: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
5e50: 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  name */.  Table 
5e60: 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f  *pSeqTab;      /
5e70: 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  * The sqlite_seq
5e80: 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64  uence table used
5e90: 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   by AUTOINCREMEN
5ea0: 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66  T */.  u8 file_f
5eb0: 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53  ormat;      /* S
5ec0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72  chema format ver
5ed0: 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69  sion for this fi
5ee0: 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  le */.  u8 enc; 
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5f00: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73  Text encoding us
5f10: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62  ed by this datab
5f20: 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ase */.  u16 fla
5f30: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
5f40: 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   Flags associate
5f50: 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65  d with this sche
5f60: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68  ma */.  int cach
5f70: 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20  e_size;      /* 
5f80: 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
5f90: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61  to use in the ca
5fa0: 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  che */.};../*.**
5fb0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
5fc0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
5fd0: 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
5fe0: 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
5ff0: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
6000: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
6010: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
6020: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
6030: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
6040: 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  ema->flags&(P))=
6050: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
6060: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
6070: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
6080: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  b[I].pSchema->fl
6090: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
60a0: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
60b0: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
60c0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
60d0: 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  a->flags|=(P).#d
60e0: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
60f0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
6100: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6110: 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  ma->flags&=~(P).
6120: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
6130: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
6140: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
6150: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
6160: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
6170: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
6180: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
6190: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
61a0: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
61b0: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
61c0: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
61d0: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
61e0: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
61f0: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
6200: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
6210: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
6220: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
6230: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
6240: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
6250: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
6260: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
6270: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
6280: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
6290: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
62a0: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
62b0: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
62c0: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
62d0: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
62e0: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
62f0: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
6300: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
6310: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
6320: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
6330: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
6340: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
6350: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
6360: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
6370: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
6380: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
6390: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
63a0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
63b0: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
63c0: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
63d0: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
63e0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
63f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
6400: 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f  GGER_DEPTH+1)../
6410: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
6420: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
6430: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
6440: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
6450: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
6460: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
6470: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
6480: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
6490: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
64a0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
64b0: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
64c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
64d0: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
64e0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
64f0: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
6500: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
6510: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
6520: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
6530: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
6540: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
6550: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
6560: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
6570: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
6580: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
6590: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
65a0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
65b0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
65c0: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
65d0: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
65e0: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
65f0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
6600: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
6610: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
6620: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
6630: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
6640: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
6650: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
6660: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
6670: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
6680: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
6690: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
66a0: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
66b0: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
66c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
66d0: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
66e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
66f0: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
6700: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
6710: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
6720: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
6730: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
6740: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
6750: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
6760: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
6770: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
6780: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
6790: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
67a0: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
67b0: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
67c0: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
67d0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
67e0: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
67f0: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
6800: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
6810: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
6820: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31  Lookaside {.  u1
6830: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
6840: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
6850: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
6860: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45  bytes */.  u8 bE
6870: 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
6880: 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64     /* False to d
6890: 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61  isable new looka
68a0: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
68b0: 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63   */.  u8 bMalloc
68c0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
68d0: 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20   True if pStart 
68e0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
68f0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a  lite3_malloc() *
6900: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
6910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
6920: 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73  umber of buffers
6930: 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
6940: 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
6950: 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  mxOut;          
6960: 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72      /* Highwater
6970: 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a   mark for nOut *
6980: 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33  /.  int anStat[3
6990: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
69a0: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
69b0: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
69c0: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
69d0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
69e0: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
69f0: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
6a00: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
6a10: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
6a20: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
6a30: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
6a40: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
6a50: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
6a60: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
6a70: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
6a80: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
6a90: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
6aa0: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
6ab0: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
6ac0: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
6ad0: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
6ae0: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
6af0: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
6b00: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
6b10: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
6b20: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68  ions..**.** Hash
6b30: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
6b40: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
6b50: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
6b60: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
6b70: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
6b80: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
6b90: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
6ba0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
6bb0: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
6bc0: 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20  a[23];       /* 
6bd0: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
6be0: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
6bf0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
6c00: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
6c10: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
6c20: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6c30: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
6c40: 54 68 65 20 73 71 6c 69 74 65 2e 6c 61 73 74 52  The sqlite.lastR
6c50: 6f 77 69 64 20 72 65 63 6f 72 64 73 20 74 68 65  owid records the
6c60: 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77   last insert row
6c70: 69 64 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  id generated by 
6c80: 61 6e 0a 2a 2a 20 69 6e 73 65 72 74 20 73 74 61  an.** insert sta
6c90: 74 65 6d 65 6e 74 2e 20 20 49 6e 73 65 72 74 73  tement.  Inserts
6ca0: 20 6f 6e 20 76 69 65 77 73 20 64 6f 20 6e 6f 74   on views do not
6cb0: 20 61 66 66 65 63 74 20 69 74 73 20 76 61 6c 75   affect its valu
6cc0: 65 2e 20 20 45 61 63 68 0a 2a 2a 20 74 72 69 67  e.  Each.** trig
6cd0: 67 65 72 20 68 61 73 20 69 74 73 20 6f 77 6e 20  ger has its own 
6ce0: 63 6f 6e 74 65 78 74 2c 20 73 6f 20 74 68 61 74  context, so that
6cf0: 20 6c 61 73 74 52 6f 77 69 64 20 63 61 6e 20 62   lastRowid can b
6d00: 65 20 75 70 64 61 74 65 64 20 69 6e 73 69 64 65  e updated inside
6d10: 0a 2a 2a 20 74 72 69 67 67 65 72 73 20 61 73 20  .** triggers as 
6d20: 75 73 75 61 6c 2e 20 20 54 68 65 20 70 72 65 76  usual.  The prev
6d30: 69 6f 75 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  ious value will 
6d40: 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 63 65  be restored once
6d50: 20 74 68 65 20 74 72 69 67 67 65 72 0a 2a 2a 20   the trigger.** 
6d60: 65 78 69 74 73 2e 20 20 55 70 6f 6e 20 65 6e 74  exits.  Upon ent
6d70: 65 72 69 6e 67 20 61 20 62 65 66 6f 72 65 20 6f  ering a before o
6d80: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 74 72 69  r instead of tri
6d90: 67 67 65 72 2c 20 6c 61 73 74 52 6f 77 69 64 20  gger, lastRowid 
6da0: 69 73 20 6e 6f 0a 2a 2a 20 6c 6f 6e 67 65 72 20  is no.** longer 
6db0: 28 73 69 6e 63 65 20 61 66 74 65 72 20 76 65 72  (since after ver
6dc0: 73 69 6f 6e 20 32 2e 38 2e 31 32 29 20 72 65 73  sion 2.8.12) res
6dd0: 65 74 20 74 6f 20 2d 31 2e 0a 2a 2a 0a 2a 2a 20  et to -1..**.** 
6de0: 54 68 65 20 73 71 6c 69 74 65 2e 6e 43 68 61 6e  The sqlite.nChan
6df0: 67 65 20 64 6f 65 73 20 6e 6f 74 20 63 6f 75 6e  ge does not coun
6e00: 74 20 63 68 61 6e 67 65 73 20 77 69 74 68 69 6e  t changes within
6e10: 20 74 72 69 67 67 65 72 73 20 61 6e 64 20 6b 65   triggers and ke
6e20: 65 70 73 20 6e 6f 0a 2a 2a 20 63 6f 6e 74 65 78  eps no.** contex
6e30: 74 2e 20 20 49 74 20 69 73 20 72 65 73 65 74 20  t.  It is reset 
6e40: 61 74 20 73 74 61 72 74 20 6f 66 20 73 71 6c 69  at start of sqli
6e50: 74 65 33 5f 65 78 65 63 2e 0a 2a 2a 20 54 68 65  te3_exec..** The
6e60: 20 73 71 6c 69 74 65 2e 6c 73 43 68 61 6e 67 65   sqlite.lsChange
6e70: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
6e80: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
6e90: 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 6c 61  s made by the la
6ea0: 73 74 0a 2a 2a 20 69 6e 73 65 72 74 2c 20 75 70  st.** insert, up
6eb0: 64 61 74 65 2c 20 6f 72 20 64 65 6c 65 74 65 20  date, or delete 
6ec0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 74 20 72  statement.  It r
6ed0: 65 6d 61 69 6e 73 20 63 6f 6e 73 74 61 6e 74 20  emains constant 
6ee0: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 0a 2a  throughout the.*
6ef0: 2a 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74  * length of a st
6f00: 61 74 65 6d 65 6e 74 20 61 6e 64 20 69 73 20 74  atement and is t
6f10: 68 65 6e 20 75 70 64 61 74 65 64 20 62 79 20 4f  hen updated by O
6f20: 50 5f 53 65 74 43 6f 75 6e 74 73 2e 20 20 49 74  P_SetCounts.  It
6f30: 20 6b 65 65 70 73 20 61 0a 2a 2a 20 63 6f 6e 74   keeps a.** cont
6f40: 65 78 74 20 73 74 61 63 6b 20 6a 75 73 74 20 6c  ext stack just l
6f50: 69 6b 65 20 6c 61 73 74 52 6f 77 69 64 20 73 6f  ike lastRowid so
6f60: 20 74 68 61 74 20 74 68 65 20 63 6f 75 6e 74 20   that the count 
6f70: 6f 66 20 63 68 61 6e 67 65 73 0a 2a 2a 20 77 69  of changes.** wi
6f80: 74 68 69 6e 20 61 20 74 72 69 67 67 65 72 20 69  thin a trigger i
6f90: 73 20 6e 6f 74 20 73 65 65 6e 20 6f 75 74 73 69  s not seen outsi
6fa0: 64 65 20 74 68 65 20 74 72 69 67 67 65 72 2e 20  de the trigger. 
6fb0: 20 43 68 61 6e 67 65 73 20 74 6f 20 76 69 65 77   Changes to view
6fc0: 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 61 66 66 65  s do not.** affe
6fd0: 63 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ct the value of 
6fe0: 6c 73 43 68 61 6e 67 65 2e 0a 2a 2a 20 54 68 65  lsChange..** The
6ff0: 20 73 71 6c 69 74 65 2e 63 73 43 68 61 6e 67 65   sqlite.csChange
7000: 20 6b 65 65 70 73 20 74 72 61 63 6b 20 6f 66 20   keeps track of 
7010: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 75  the number of cu
7020: 72 72 65 6e 74 20 63 68 61 6e 67 65 73 20 28 73  rrent changes (s
7030: 69 6e 63 65 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ince.** the last
7040: 20 73 74 61 74 65 6d 65 6e 74 29 20 61 6e 64 20   statement) and 
7050: 69 73 20 75 73 65 64 20 74 6f 20 75 70 64 61 74  is used to updat
7060: 65 20 73 71 6c 69 74 65 5f 6c 73 43 68 61 6e 67  e sqlite_lsChang
7070: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  e..**.** The mem
7080: 62 65 72 20 76 61 72 69 61 62 6c 65 73 20 73 71  ber variables sq
7090: 6c 69 74 65 2e 65 72 72 43 6f 64 65 2c 20 73 71  lite.errCode, sq
70a0: 6c 69 74 65 2e 7a 45 72 72 4d 73 67 20 61 6e 64  lite.zErrMsg and
70b0: 20 73 71 6c 69 74 65 2e 7a 45 72 72 4d 73 67 31   sqlite.zErrMsg1
70c0: 36 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 6d  6.** store the m
70d0: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
70e0: 20 63 6f 64 65 20 61 6e 64 2c 20 69 66 20 61 70   code and, if ap
70f0: 70 6c 69 63 61 62 6c 65 2c 20 73 74 72 69 6e 67  plicable, string
7100: 2e 20 54 68 65 0a 2a 2a 20 69 6e 74 65 72 6e 61  . The.** interna
7110: 6c 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  l function sqlit
7120: 65 33 45 72 72 6f 72 28 29 20 69 73 20 75 73 65  e3Error() is use
7130: 64 20 74 6f 20 73 65 74 20 74 68 65 73 65 20 76  d to set these v
7140: 61 72 69 61 62 6c 65 73 0a 2a 2a 20 63 6f 6e 73  ariables.** cons
7150: 69 73 74 65 6e 74 6c 79 2e 0a 2a 2f 0a 73 74 72  istently..*/.str
7160: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
7170: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
7180: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
7190: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
71a0: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
71b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
71d0: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
71e0: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 44 62 20   in use */.  Db 
71f0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
7200: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
7210: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
7220: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
7230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7240: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66   Miscellaneous f
7250: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
7260: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
7270: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
7280: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
7290: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
72a0: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
72b0: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
72d0: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
72e0: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
72f0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
7300: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
7310: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
7320: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
7330: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
7340: 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  g */.  u8 autoCo
7350: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
7360: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
7370: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
7380: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
7390: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
73a0: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
73b0: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
73c0: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
73d0: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
73e0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
73f0: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
7400: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
7410: 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64    u8 dfltLockMod
7420: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
7430: 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69  /* Default locki
7440: 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61  ng-mode for atta
7450: 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69  ched dbs */.  si
7460: 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75  gned char nextAu
7470: 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41  tovac;      /* A
7480: 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61  utovac setting a
7490: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
74a0: 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72  =0 */.  u8 suppr
74b0: 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20  essErr;         
74c0: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
74d0: 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73  issue error mess
74e0: 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ages if true */.
74f0: 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
7500: 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ict;            
7510: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
7520: 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f  rn for s3_vtab_o
7530: 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a  n_conflict() */.
7540: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
7550: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
7560: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
7570: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
7580: 2f 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 3b 20  /.  int nTable; 
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
75b0: 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
75c0: 61 62 61 73 65 20 2a 2f 0a 20 20 43 6f 6c 6c 53  abase */.  CollS
75d0: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
75e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
75f0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
7600: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
7610: 52 59 29 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  RY) */.  i64 las
7620: 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20  tRowid;         
7630: 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20         /* ROWID 
7640: 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  of most recent i
7650: 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65  nsert (see above
7660: 29 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  ) */.  u32 magic
7670: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7680: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
7690: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
76a0: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
76b0: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76d0: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
76e0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
76f0: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7700: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
7710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
7720: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
7730: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
7740: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 73 71  hanges() */.  sq
7750: 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74  lite3_mutex *mut
7760: 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ex;         /* C
7770: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
7780: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
7790: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
77a0: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
77b0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
77c0: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
77d0: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
77e0: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
77f0: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
7800: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7820: 57 68 65 6e 20 62 61 63 6b 20 69 73 20 62 65 69  When back is bei
7830: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
7840: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
7850: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
7860: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
7870: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
7880: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
7890: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
78b0: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
78c0: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
78d0: 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72  .    u8 orphanTr
78e0: 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  igger;          
78f0: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
7900: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
7910: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
7920: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
7930: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
7940: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7950: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
7960: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
7970: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
7980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
7990: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
79a0: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
79b0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
79c0: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
79d0: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
79e0: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
79f0: 6e 65 73 20 2a 2f 0a 20 20 69 6e 74 20 61 63 74  nes */.  int act
7a00: 69 76 65 56 64 62 65 43 6e 74 3b 20 20 20 20 20  iveVdbeCnt;     
7a10: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7a20: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
7a30: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 2a 2f  tly executing */
7a40: 0a 20 20 69 6e 74 20 77 72 69 74 65 56 64 62 65  .  int writeVdbe
7a50: 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cnt;            
7a60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
7a70: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
7a80: 61 72 65 20 77 72 69 74 69 6e 67 20 2a 2f 0a 20  are writing */. 
7a90: 20 69 6e 74 20 76 64 62 65 45 78 65 63 43 6e 74   int vdbeExecCnt
7aa0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
7ab0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
7ac0: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
7ad0: 45 78 65 63 28 29 20 2a 2f 0a 20 20 76 6f 69 64  Exec() */.  void
7ae0: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
7af0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20  ,const char*);  
7b00: 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66        /* Trace f
7b10: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
7b20: 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20  d *pTraceArg;   
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7b50: 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20  nt to the trace 
7b60: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
7b70: 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76  id (*xProfile)(v
7b80: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
7b90: 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69  ,u64);  /* Profi
7ba0: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ling function */
7bb0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c  .  void *pProfil
7bc0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7be0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66  Argument to prof
7bf0: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ile function */.
7c00: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
7c10: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7c20: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
7c30: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
7c40: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74  ck() */   .  int
7c50: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
7c60: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
7c70: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
7c80: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
7c90: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
7ca0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7cb0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
7cc0: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
7cd0: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69  ck() */   .  voi
7ce0: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
7cf0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
7d00: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
7d10: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
7d20: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
7d30: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
7d40: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
7d50: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
7d60: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
7d70: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69  qlite_int64);.#i
7d80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7d90: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
7da0: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
7db0: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
7dc0: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
7dd0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
7de0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
7df0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
7e00: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
7e10: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
7e20: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
7e30: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
7e40: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
7e50: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
7e60: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
7e70: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
7e80: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
7e90: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
7ea0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7eb0: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
7ec0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
7ed0: 73 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sg;             
7ee0: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7ef0: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
7f00: 28 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 29 20  (UTF-8 encoded) 
7f10: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
7f20: 73 67 31 36 3b 20 20 20 20 20 20 20 20 20 20 20  sg16;           
7f30: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
7f40: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
7f50: 28 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 29  (UTF-16 encoded)
7f60: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
7f70: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
7f80: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
7f90: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
7fa0: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
7fb0: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
7fc0: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
7fd0: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
7fe0: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
7ff0: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
8000: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
8010: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
8020: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
8030: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
8040: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
8050: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 6e 74 20  ORIZATION.  int 
8060: 28 2a 78 41 75 74 68 29 28 76 6f 69 64 2a 2c 69  (*xAuth)(void*,i
8070: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
8080: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
8090: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
80a0: 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r*);.           
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80c0: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
80d0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
80e0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
80f0: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
8100: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
8110: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
8120: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
8130: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
8140: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8150: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
8160: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
8170: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
8180: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
8190: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
81a0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
81b0: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
81c0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
81d0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
81e0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  lback */.  int n
81f0: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
8200: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8210: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
8220: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
8230: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
8240: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8250: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
8260: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
8270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8280: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
8290: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
82a0: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
82b0: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
82c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
82d0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
82e0: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
82f0: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
8300: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
8310: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
8320: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
8330: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
8340: 2a 2f 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  */.  int nVTrans
8350: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8360: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
8370: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
8380: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
8390: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
83a0: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
83b0: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
83c0: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
83d0: 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61  ndif.  FuncDefHa
83e0: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
83f0: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
8400: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
8410: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
8420: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8440: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
8450: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
8460: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
8470: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
8480: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
8490: 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75    int busyTimeou
84a0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
84b0: 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20  /* Busy handler 
84c0: 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63  timeout, in msec
84d0: 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74   */.  Db aDbStat
84e0: 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  ic[2];          
84f0: 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70      /* Static sp
8500: 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65  ace for the 2 de
8510: 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a  fault backends *
8520: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
8530: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
8540: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
8550: 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ive savepoints *
8560: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
8570: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
8580: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
8590: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
85a0: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
85b0: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
85d0: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
85e0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
85f0: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 75 38  actions  */.  u8
8600: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
8610: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
8620: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
8630: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
8640: 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 36 34 20  s a TS */.  i64 
8650: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
8660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
8670: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
8680: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
8690: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 6e 74  action. */.  int
86a0: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
86b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
86c0: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
86d0: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
86e0: 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65 66  ree() */..#ifdef
86f0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
8700: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
8710: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
8720: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
8730: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
8740: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
8750: 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f   .  ** mutex, no
8760: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
8770: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
8780: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
8790: 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a  ify.c. .  **.  *
87a0: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
87b0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
87c0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
87d0: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
87e0: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
87f0: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
8800: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
8810: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
8820: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
8830: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
8840: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
8850: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
8860: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
8870: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
8880: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
8890: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
88a0: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
88b0: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
88c0: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
88d0: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
88e0: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
88f0: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
8900: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
8910: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
8920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
8930: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
8940: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
8950: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
8960: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
8970: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8980: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
8990: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
89a0: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
89b0: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
89c0: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
89d0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
89e0: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
89f0: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
8a00: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
8a10: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
8a20: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
8a30: 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  f.};../*.** A ma
8a40: 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20  cro to discover 
8a50: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  the encoding of 
8a60: 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23  a database..*/.#
8a70: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 28  define ENC(db) (
8a80: 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63  (db)->aDb[0].pSc
8a90: 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a  hema->enc)../*.*
8aa0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
8ab0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
8ac0: 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66  3.flags..*/.#def
8ad0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
8ae0: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
8af0: 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0100  /* True to
8b00: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
8b10: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
8b20: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
8b30: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 32 30  anges  0x0000020
8b40: 30 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  0  /* Uncommitte
8b50: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
8b60: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
8b70: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
8b80: 6d 65 73 20 20 20 30 78 30 30 30 30 30 34 30 30  mes   0x00000400
8b90: 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63    /* Show full c
8ba0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53  olumn names on S
8bb0: 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  ELECT */.#define
8bc0: 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c   SQLITE_ShortCol
8bd0: 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 38 30  Names  0x0000080
8be0: 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74  0  /* Show short
8bf0: 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a   columns names *
8c00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8c10: 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20  _CountRows      
8c20: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 43  0x00001000  /* C
8c30: 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65  ount rows change
8c40: 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a  d by INSERT, */.
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44            /*   D
8c80: 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
8c90: 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20   and return */. 
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68           /*   th
8cd0: 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20  e count using a 
8ce0: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65  callback. */.#de
8cf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c  fine SQLITE_Null
8d00: 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30  Callback   0x000
8d10: 30 32 30 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65  02000  /* Invoke
8d20: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e   the callback on
8d30: 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20  ce if the */.   
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d60: 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75         /*   resu
8d70: 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20  lt set is empty 
8d80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8d90: 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20  E_SqlTrace      
8da0: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
8db0: 44 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20  Debug print SQL 
8dc0: 61 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a  as it executes *
8dd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8de0: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20  _VdbeListing    
8df0: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 44  0x00008000  /* D
8e00: 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66  ebug listings of
8e10: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a   VDBE programs *
8e20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8e30: 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20  _WriteSchema    
8e40: 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 4f  0x00010000  /* O
8e50: 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49  K to update SQLI
8e60: 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65  TE_MASTER */.#de
8e70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 52 65  fine SQLITE_NoRe
8e80: 61 64 6c 6f 63 6b 20 20 20 20 20 30 78 30 30 30  adlock     0x000
8e90: 32 30 30 30 30 20 20 2f 2a 20 52 65 61 64 6c 6f  20000  /* Readlo
8ea0: 63 6b 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  cks are omitted 
8eb0: 77 68 65 6e 20 0a 20 20 20 20 20 20 20 20 20 20  when .          
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 2a 2a 20 61 63 63 65 73 73 69 6e 67 20 72 65 61  ** accessing rea
8ef0: 64 2d 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 73  d-only databases
8f00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
8f10: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
8f20: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
8f30: 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20   Do not enforce 
8f40: 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
8f50: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
8f60: 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
8f70: 74 65 64 20 30 78 30 30 38 30 30 30 30 20 20 2f  ted 0x0080000  /
8f80: 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63  * For shared-cac
8f90: 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69  he mode */.#defi
8fa0: 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  ne SQLITE_Legacy
8fb0: 46 69 6c 65 46 6d 74 20 20 30 78 30 30 31 30 30  FileFmt  0x00100
8fc0: 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e  000  /* Create n
8fd0: 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20  ew databases in 
8fe0: 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66  format 1 */.#def
8ff0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
9000: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 32 30  Sync      0x0020
9010: 30 30 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  0000  /* Use ful
9020: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
9030: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
9040: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
9050: 6c 46 53 79 6e 63 20 20 30 78 30 30 34 30 30 30  lFSync  0x004000
9060: 30 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  00  /* Use full 
9070: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
9080: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
9090: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
90a0: 6f 64 65 20 20 20 30 78 30 30 38 30 30 30 30 30  ode   0x00800000
90b0: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
90c0: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
90d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
90e0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 31 30  rseOrder   0x010
90f0: 30 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  00000  /* Revers
9100: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
9110: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
9120: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
9130: 73 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20  s    0x02000000 
9140: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
9150: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
9160: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9170: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
9180: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 45 6e  x04000000  /* En
9190: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
91a0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
91b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
91c0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
91d0: 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 45  0x08000000  /* E
91e0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
91f0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
9200: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
9210: 42 75 69 6c 74 69 6e 20 20 30 78 31 30 30 30 30  Builtin  0x10000
9220: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
9230: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
9240: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
9250: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
9260: 73 69 6f 6e 20 20 30 78 32 30 30 30 30 30 30 30  sion  0x20000000
9270: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
9280: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
9290: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61  efine SQLITE_Ena
92a0: 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 34 30  bleTrigger  0x40
92b0: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20  000000  /* True 
92c0: 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65  to enable trigge
92d0: 72 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  rs */../*.** Bit
92e0: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
92f0: 2e 66 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  .flags field tha
9300: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
9310: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
9320: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
9330: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
9340: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
9350: 65 72 66 61 63 65 2e 0a 2a 2a 20 54 68 65 73 65  erface..** These
9360: 20 6d 75 73 74 20 62 65 20 74 68 65 20 6c 6f 77   must be the low
9370: 2d 6f 72 64 65 72 20 62 69 74 73 20 6f 66 20 74  -order bits of t
9380: 68 65 20 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  he flags field..
9390: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
93a0: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
93b0: 20 30 78 30 31 20 20 20 20 20 20 20 20 2f 2a 20   0x01        /* 
93c0: 44 69 73 61 62 6c 65 20 71 75 65 72 79 20 66 6c  Disable query fl
93d0: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
93e0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
93f0: 6e 43 61 63 68 65 20 20 20 20 30 78 30 32 20 20  nCache    0x02  
9400: 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65        /* Disable
9410: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68   the column cach
9420: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
9430: 49 54 45 5f 49 6e 64 65 78 53 6f 72 74 20 20 20  ITE_IndexSort   
9440: 20 20 20 30 78 30 34 20 20 20 20 20 20 20 20 2f     0x04        /
9450: 2a 20 44 69 73 61 62 6c 65 20 69 6e 64 65 78 65  * Disable indexe
9460: 73 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 2a 2f  s for sorting */
9470: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9480: 49 6e 64 65 78 53 65 61 72 63 68 20 20 20 20 30  IndexSearch    0
9490: 78 30 38 20 20 20 20 20 20 20 20 2f 2a 20 44 69  x08        /* Di
94a0: 73 61 62 6c 65 20 69 6e 64 65 78 65 73 20 66 6f  sable indexes fo
94b0: 72 20 73 65 61 72 63 68 69 6e 67 20 2a 2f 0a 23  r searching */.#
94c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e  define SQLITE_In
94d0: 64 65 78 43 6f 76 65 72 20 20 20 20 20 30 78 31  dexCover     0x1
94e0: 30 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73 61  0        /* Disa
94f0: 62 6c 65 20 69 6e 64 65 78 20 63 6f 76 65 72 69  ble index coveri
9500: 6e 67 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  ng table */.#def
9510: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
9520: 42 79 4f 72 64 65 72 20 20 20 30 78 32 30 20 20  ByOrder   0x20  
9530: 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c 65        /* Disable
9540: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
9550: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
9560: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
9570: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 34 30 20  orOutConst 0x40 
9580: 20 20 20 20 20 20 20 2f 2a 20 44 69 73 61 62 6c         /* Disabl
9590: 65 20 66 61 63 74 6f 72 69 6e 67 20 6f 75 74 20  e factoring out 
95a0: 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 23 64 65  constants */.#de
95b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52  fine SQLITE_IdxR
95c0: 65 61 6c 41 73 49 6e 74 20 20 20 30 78 38 30 20  ealAsInt   0x80 
95d0: 20 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20         /* Store 
95e0: 52 45 41 4c 20 61 73 20 49 4e 54 20 69 6e 20 69  REAL as INT in i
95f0: 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndices */.#defin
9600: 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63  e SQLITE_Distinc
9610: 74 4f 70 74 20 20 20 20 30 78 38 30 20 20 20 20  tOpt    0x80    
9620: 20 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20      /* DISTINCT 
9630: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
9640: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9650: 4f 70 74 4d 61 73 6b 20 20 20 20 20 20 20 20 30  OptMask        0
9660: 78 66 66 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  xff        /* Ma
9670: 73 6b 20 6f 66 20 61 6c 6c 20 64 69 73 61 62 6c  sk of all disabl
9680: 61 62 6c 65 20 6f 70 74 73 20 2a 2f 0a 0a 2f 2a  able opts */../*
9690: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
96a0: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
96b0: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
96c0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
96d0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
96e0: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
96f0: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
9700: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
9710: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
9720: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
9730: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
9740: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
9750: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
9760: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
9770: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
9780: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
9790: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
97a0: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
97b0: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
97c0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
97d0: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
97e0: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
97f0: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
9800: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9810: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
9820: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
9830: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
9840: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
9850: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
9860: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
9870: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
9880: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
9890: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  occurred */../*.
98a0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
98b0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
98c0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
98d0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
98e0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
98f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
9900: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
9910: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
9920: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
9930: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
9940: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
9950: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
9960: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
9970: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
9980: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
9990: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
99a0: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
99b0: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
99c0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
99d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
99e0: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
99f0: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
9a00: 75 38 20 69 50 72 65 66 45 6e 63 3b 20 20 20 20  u8 iPrefEnc;    
9a10: 20 20 20 20 20 2f 2a 20 50 72 65 66 65 72 72 65       /* Preferre
9a20: 64 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  d text encoding 
9a30: 28 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 31 36  (SQLITE_UTF8, 16
9a40: 4c 45 2c 20 31 36 42 45 29 20 2a 2f 0a 20 20 75  LE, 16BE) */.  u
9a50: 38 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  8 flags;        
9a60: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
9a70: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
9a80: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
9a90: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
9aa0: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
9ab0: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
9ac0: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
9ad0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
9ae0: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
9af0: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
9b00: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
9b10: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
9b20: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
9b30: 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f   Regular functio
9b40: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  n */.  void (*xS
9b50: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
9b60: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
9b70: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41  3_value**); /* A
9b80: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f  ggregate step */
9b90: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
9ba0: 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  ize)(sqlite3_con
9bb0: 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20  text*);         
9bc0: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67         /* Aggreg
9bd0: 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  ate finalizer */
9be0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
9bf0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e          /* SQL n
9c00: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
9c10: 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65  ion. */.  FuncDe
9c20: 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f  f *pHash;      /
9c30: 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69  * Next with a di
9c40: 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74  fferent name but
9c50: 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a   the same hash *
9c60: 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  /.  FuncDestruct
9c70: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
9c80: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
9c90: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
9ca0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  or function */.}
9cb0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74  ;../*.** This st
9cc0: 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c  ructure encapsul
9cd0: 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63  ates a user-func
9ce0: 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20  tion destructor 
9cf0: 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20  callback (as.** 
9d00: 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67  configured using
9d10: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
9d20: 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66  _v2()) and a ref
9d30: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20  erence counter. 
9d40: 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66  When.** create_f
9d50: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20  unction_v2() is 
9d60: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
9d70: 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68   a function with
9d80: 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a   a destructor,.*
9d90: 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63  * a single objec
9da0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
9db0: 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e  s allocated. Fun
9dc0: 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66  cDestructor.nRef
9dd0: 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74   is set to .** t
9de0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e  he number of Fun
9df0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65  cDef objects cre
9e00: 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f  ated (either 1 o
9e10: 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  r 3, depending o
9e20: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20  n whether.** or 
9e30: 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65  not the specifie
9e40: 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51  d encoding is SQ
9e50: 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46  LITE_ANY). The F
9e60: 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74  uncDef.pDestruct
9e70: 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20  or.** member of 
9e80: 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20  each of the new 
9e90: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
9ea0: 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  is set to point 
9eb0: 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64  to the allocated
9ec0: 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74  .** FuncDestruct
9ed0: 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61  or..**.** Therea
9ee0: 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f  fter, when one o
9ef0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62  f the FuncDef ob
9f00: 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64  jects is deleted
9f10: 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a  , the reference.
9f20: 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73  ** count on this
9f30: 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65   object is decre
9f40: 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20  mented. When it 
9f50: 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64  reaches 0, the d
9f60: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20  estructor.** is 
9f70: 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20  invoked and the 
9f80: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73  FuncDestructor s
9f90: 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a  tructure freed..
9fa0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9fb0: 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74  structor {.  int
9fc0: 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a   nRef;.  void (*
9fd0: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
9fe0: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  );.  void *pUser
9ff0: 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  Data;.};../*.** 
a000: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
a010: 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67  for FuncDef.flag
a020: 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s.*/.#define SQL
a030: 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20  ITE_FUNC_LIKE   
a040: 20 20 30 78 30 31 20 2f 2a 20 43 61 6e 64 69 64    0x01 /* Candid
a050: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
a060: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
a070: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a080: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
a090: 30 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69  02 /* Case-sensi
a0a0: 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66  tive LIKE-type f
a0b0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
a0c0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
a0d0: 50 48 45 4d 20 20 20 20 30 78 30 34 20 2f 2a 20  PHEM    0x04 /* 
a0e0: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
a0f0: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
a100: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a110: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
a120: 38 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  8 /* sqlite3GetF
a130: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
a140: 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a  ht be called */.
a150: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a160: 55 4e 43 5f 50 52 49 56 41 54 45 20 20 30 78 31  UNC_PRIVATE  0x1
a170: 30 20 2f 2a 20 41 6c 6c 6f 77 65 64 20 66 6f 72  0 /* Allowed for
a180: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e   internal use on
a190: 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ly */.#define SQ
a1a0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
a1b0: 20 20 20 30 78 32 30 20 2f 2a 20 42 75 69 6c 74     0x20 /* Built
a1c0: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
a1d0: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
a1e0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
a1f0: 41 4c 45 53 43 45 20 30 78 34 30 20 2f 2a 20 42  ALESCE 0x40 /* B
a200: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
a210: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 66  () or ifnull() f
a220: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  unction */../*.*
a230: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
a240: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
a250: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
a260: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
a270: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
a280: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
a290: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
a2a0: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
a2b0: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
a2c0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
a2d0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
a2e0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
a2f0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
a300: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
a310: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
a320: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
a330: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
a340: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
a350: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
a360: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
a370: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
a380: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
a390: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
a3a0: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
a3b0: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
a3c0: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
a3d0: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
a3e0: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
a3f0: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a  e function. If .
a400: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
a410: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
a420: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
a430: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
a440: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
a450: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
a460: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
a470: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
a480: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
a490: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
a4a0: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
a4b0: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
a4c0: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
a4d0: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
a4e0: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
a4f0: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
a500: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
a510: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
a520: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
a530: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
a540: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
a550: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
a560: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
a570: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
a580: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
a590: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
a5a0: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
a5b0: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
a5c0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
a5d0: 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  me .**     that 
a5e0: 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
a5f0: 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
a600: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
a610: 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20  all to C .**    
a620: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75   function likeFu
a630: 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72  nc. Argument pAr
a640: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
a650: 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65  void *) and made
a660: 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c  .**     availabl
a670: 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f  e as the functio
a680: 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  n user-data (sql
a690: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
a6a0: 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75  ). The.**     Fu
a6b0: 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69  ncDef.flags vari
a6c0: 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74  able is set to t
a6d0: 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  he value passed 
a6e0: 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20  as the flags.** 
a6f0: 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a      parameter..*
a700: 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  /.#define FUNCTI
a710: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
a720: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
a730: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
a740: 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51  ITE_UTF8, bNC*SQ
a750: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
a760: 4c 4c 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  LL, \.   SQLITE_
a770: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
a780: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
a790: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
a7a0: 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
a7b0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
a7c0: 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
a7d0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
a7e0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 62 4e 43 2a  QLITE_UTF8, bNC*
a7f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
a800: 43 4f 4c 4c 2c 20 5c 0a 20 20 20 70 41 72 67 2c  COLL, \.   pArg,
a810: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
a820: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
a830: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
a840: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
a850: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
a860: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
a870: 20 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29   flags, (void *)
a880: 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63  arg, 0, likeFunc
a890: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
a8a0: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  0, 0}.#define AG
a8b0: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
a8c0: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
a8d0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
a8e0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
a8f0: 54 46 38 2c 20 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8, nc*SQLITE_F
a900: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a  UNC_NEEDCOLL, \.
a910: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
a920: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
a930: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
a940: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
a950: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
a960: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
a970: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
a980: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
a990: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
a9a0: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
a9b0: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
a9c0: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
a9d0: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
a9e0: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
a9f0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
aa00: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
aa10: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
aa20: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
aa30: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
aa40: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
aa50: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa70: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
aa80: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
aa90: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
aaa0: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aac0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
aad0: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
aae0: 69 6f 6e 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ions */.  Savepo
aaf0: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
ab00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ab10: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
ab20: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
ab30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
ab40: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
ab50: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
ab60: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
ab70: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
ab80: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
ab90: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
aba0: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
abb0: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
abc0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
abd0: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
abe0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
abf0: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
ac00: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
ac10: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
ac20: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
ac30: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
ac40: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
ac50: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
ac60: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
ac70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
ac80: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
ac90: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
aca0: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
acb0: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
acc0: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
acd0: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
ace0: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
acf0: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
ad00: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
ad10: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ad30: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
ad40: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
ad50: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
ad80: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
ad90: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
ada0: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
adb0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
adc0: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
add0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
ade0: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
adf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
ae00: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
ae10: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
ae20: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
ae30: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
ae40: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
ae50: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
ae60: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
ae70: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
ae80: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
ae90: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
aea0: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
aeb0: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
aec0: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
aed0: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
aee0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
aef0: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
af00: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
af10: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
af20: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
af30: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
af40: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
af50: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
af60: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
af70: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
af80: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 54 72  Null;      /* Tr
af90: 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
afa0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
afb0: 61 69 6e 74 20 2a 2f 0a 20 20 75 38 20 69 73 50  aint */.  u8 isP
afc0: 72 69 6d 4b 65 79 3b 20 20 20 20 2f 2a 20 54 72  rimKey;    /* Tr
afd0: 75 65 20 69 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue if this colum
afe0: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
aff0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
b000: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
b010: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
b020: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
b030: 76 61 6c 75 65 73 20 2a 2f 0a 23 69 66 6e 64 65  values */.#ifnde
b040: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
b050: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20  RTUALTABLE.  u8 
b060: 69 73 48 69 64 64 65 6e 3b 20 20 20 20 20 2f 2a  isHidden;     /*
b070: 20 54 72 75 65 20 69 66 20 74 68 69 73 20 63 6f   True if this co
b080: 6c 75 6d 6e 20 69 73 20 27 68 69 64 64 65 6e 27  lumn is 'hidden'
b090: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
b0a0: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
b0b0: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
b0c0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
b0d0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
b0e0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
b0f0: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
b100: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
b110: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
b120: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
b130: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
b140: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
b150: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
b160: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
b170: 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 61 79 20  **.** There may 
b180: 74 77 6f 20 73 65 70 61 72 61 74 65 20 69 6d 70  two separate imp
b190: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20  lementations of 
b1a0: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 66 75  the collation fu
b1b0: 6e 63 74 69 6f 6e 2c 20 6f 6e 65 0a 2a 2a 20 74  nction, one.** t
b1c0: 68 61 74 20 70 72 6f 63 65 73 73 65 73 20 74 65  hat processes te
b1d0: 78 74 20 69 6e 20 55 54 46 2d 38 20 65 6e 63 6f  xt in UTF-8 enco
b1e0: 64 69 6e 67 20 28 43 6f 6c 6c 53 65 71 2e 78 43  ding (CollSeq.xC
b1f0: 6d 70 29 20 61 6e 64 20 61 6e 6f 74 68 65 72 20  mp) and another 
b200: 74 68 61 74 0a 2a 2a 20 70 72 6f 63 65 73 73 65  that.** processe
b210: 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 69  s text encoded i
b220: 6e 20 55 54 46 2d 31 36 20 28 43 6f 6c 6c 53 65  n UTF-16 (CollSe
b230: 71 2e 78 43 6d 70 31 36 29 2c 20 75 73 69 6e 67  q.xCmp16), using
b240: 20 74 68 65 20 6d 61 63 68 69 6e 65 0a 2a 2a 20   the machine.** 
b250: 6e 61 74 69 76 65 20 62 79 74 65 20 6f 72 64 65  native byte orde
b260: 72 2e 20 57 68 65 6e 20 61 20 63 6f 6c 6c 61 74  r. When a collat
b270: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20  ion sequence is 
b280: 69 6e 76 6f 6b 65 64 2c 20 53 51 4c 69 74 65 20  invoked, SQLite 
b290: 73 65 6c 65 63 74 73 0a 2a 2a 20 74 68 65 20 76  selects.** the v
b2a0: 65 72 73 69 6f 6e 20 74 68 61 74 20 77 69 6c 6c  ersion that will
b2b0: 20 72 65 71 75 69 72 65 20 74 68 65 20 6c 65 61   require the lea
b2c0: 73 74 20 65 78 70 65 6e 73 69 76 65 20 65 6e 63  st expensive enc
b2d0: 6f 64 69 6e 67 0a 2a 2a 20 74 72 61 6e 73 6c 61  oding.** transla
b2e0: 74 69 6f 6e 73 2c 20 69 66 20 61 6e 79 2e 0a 2a  tions, if any..*
b2f0: 2a 0a 2a 2a 20 54 68 65 20 43 6f 6c 6c 53 65 71  *.** The CollSeq
b300: 2e 70 55 73 65 72 20 6d 65 6d 62 65 72 20 76 61  .pUser member va
b310: 72 69 61 62 6c 65 20 69 73 20 61 6e 20 65 78 74  riable is an ext
b320: 72 61 20 70 61 72 61 6d 65 74 65 72 20 74 68 61  ra parameter tha
b330: 74 20 70 61 73 73 65 64 20 69 6e 0a 2a 2a 20 61  t passed in.** a
b340: 73 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  s the first argu
b350: 6d 65 6e 74 20 74 6f 20 74 68 65 20 55 54 46 2d  ment to the UTF-
b360: 38 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  8 comparison fun
b370: 63 74 69 6f 6e 2c 20 78 43 6d 70 2e 0a 2a 2a 20  ction, xCmp..** 
b380: 43 6f 6c 6c 53 65 71 2e 70 55 73 65 72 31 36 20  CollSeq.pUser16 
b390: 69 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  is the equivalen
b3a0: 74 20 66 6f 72 20 74 68 65 20 55 54 46 2d 31 36  t for the UTF-16
b3b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63   comparison func
b3c0: 74 69 6f 6e 2c 0a 2a 2a 20 78 43 6d 70 31 36 2e  tion,.** xCmp16.
b3d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 43  .**.** If both C
b3e0: 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 61 6e 64 20  ollSeq.xCmp and 
b3f0: 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 31 36 20 61  CollSeq.xCmp16 a
b400: 72 65 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  re NULL, it mean
b410: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
b420: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
b430: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
b440: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
b450: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
b460: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b470: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
b480: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
b490: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
b4a0: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
b4b0: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
b4c0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
b4d0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
b4e0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
b4f0: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
b500: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
b510: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
b520: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
b530: 75 38 20 74 79 70 65 3b 20 20 20 20 20 20 20 20  u8 type;        
b540: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
b550: 74 68 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f  the SQLITE_COLL_
b560: 2e 2e 2e 20 76 61 6c 75 65 73 20 62 65 6c 6f 77  ... values below
b570: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
b580: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
b590: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
b5a0: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
b5b0: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
b5c0: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
b5d0: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
b5e0: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
b5f0: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
b600: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
b610: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
b620: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
b630: 6f 66 20 43 6f 6c 6c 53 65 71 2e 74 79 70 65 3a  of CollSeq.type:
b640: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
b650: 54 45 5f 43 4f 4c 4c 5f 42 49 4e 41 52 59 20 20  TE_COLL_BINARY  
b660: 31 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c  1  /* The defaul
b670: 74 20 6d 65 6d 63 6d 70 28 29 20 63 6f 6c 6c 61  t memcmp() colla
b680: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 2a 2f  ting sequence */
b690: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b6a0: 43 4f 4c 4c 5f 4e 4f 43 41 53 45 20 20 32 20 20  COLL_NOCASE  2  
b6b0: 2f 2a 20 54 68 65 20 62 75 69 6c 74 2d 69 6e 20  /* The built-in 
b6c0: 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69 6e 67  NOCASE collating
b6d0: 20 73 65 71 75 65 6e 63 65 20 2a 2f 0a 23 64 65   sequence */.#de
b6e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c  fine SQLITE_COLL
b6f0: 5f 52 45 56 45 52 53 45 20 33 20 20 2f 2a 20 54  _REVERSE 3  /* T
b700: 68 65 20 62 75 69 6c 74 2d 69 6e 20 52 45 56 45  he built-in REVE
b710: 52 53 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  RSE collating se
b720: 71 75 65 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  quence */.#defin
b730: 65 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 55 53  e SQLITE_COLL_US
b740: 45 52 20 20 20 20 30 20 20 2f 2a 20 41 6e 79 20  ER    0  /* Any 
b750: 6f 74 68 65 72 20 75 73 65 72 2d 64 65 66 69 6e  other user-defin
b760: 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ed collating seq
b770: 75 65 6e 63 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  uence */../*.** 
b780: 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
b790: 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
b7a0: 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
b7b0: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
b7c0: 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
b7d0: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
b7e0: 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
b7f0: 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
b800: 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
b810: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
b820: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75  r */../*.** Colu
b830: 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  mn affinity type
b840: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75  s..**.** These u
b850: 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d  sed to have mnem
b860: 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27  onic name like '
b870: 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  i' for SQLITE_AF
b880: 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a  F_INTEGER and.**
b890: 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   't' for SQLITE_
b8a0: 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77  AFF_TEXT.  But w
b8b0: 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74  e can save a lit
b8c0: 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d  tle space and im
b8d0: 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65  prove.** the spe
b8e0: 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e  ed a little by n
b8f0: 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c  umbering the val
b900: 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c  ues consecutivel
b910: 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  y.  .**.** But r
b920: 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
b930: 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
b940: 20 62 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e   begin with 'a'.
b950: 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
b960: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
b970: 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
b980: 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
b990: 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
b9a0: 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
b9b0: 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
b9c0: 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
b9d0: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
b9e0: 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
b9f0: 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
ba00: 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
ba10: 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
ba20: 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
ba30: 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
ba40: 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  gle comparison..
ba50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ba60: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
ba70: 61 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  a'.#define SQLIT
ba80: 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27  E_AFF_NONE     '
ba90: 62 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  b'.#define SQLIT
baa0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
bab0: 63 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  c'.#define SQLIT
bac0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
bad0: 64 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  d'.#define SQLIT
bae0: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
baf0: 65 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  e'..#define sqli
bb00: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
bb10: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
bb20: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
bb30: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
bb40: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
bb50: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
bb60: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
bb70: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
bb80: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
bb90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bba0: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36  AFF_MASK     0x6
bbb0: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
bbc0: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
bbd0: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
bbe0: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
bbf0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
bc00: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
bc10: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  y..*/.#define SQ
bc20: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
bc30: 20 20 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73    0x08  /* jumps
bc40: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
bc50: 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
bc60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
bc70: 52 45 50 32 20 20 20 20 20 20 30 78 31 30 20 20  REP2      0x10  
bc80: 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
bc90: 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
bca0: 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
bcb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
bcc0: 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
bcd0: 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
bce0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
bcf0: 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
bd00: 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
bd10: 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
bd20: 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
bd30: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
bd40: 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ma. .**.** If th
bd50: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
bd60: 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
bd70: 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
bd80: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
bd90: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
bda0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
bdb0: 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
bdc0: 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
bdd0: 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
bde0: 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
bdf0: 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
be00: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
be10: 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
be20: 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
be30: 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
be40: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
be50: 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
be60: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a   virtual table .
be70: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
be80: 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
be90: 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
bea0: 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
beb0: 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  en .** database 
bec0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65  connections, eve
bed0: 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20  n when the rest 
bee0: 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  of the in-memory
bef0: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63   database .** sc
bf00: 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
bf10: 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
bf20: 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
bf30: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
bf40: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
bf50: 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
bf60: 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
bf70: 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
bf80: 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
bf90: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
bfa0: 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
bfb0: 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
bfc0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
bfd0: 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
bfe0: 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
bff0: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
c000: 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
c010: 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20  real tables .** 
c020: 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
c030: 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
c040: 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
c050: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20   of the callers 
c060: 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
c070: 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
c080: 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
c090: 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
c0a0: 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63  abase .** connec
c0b0: 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65  tion as that use
c0c0: 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c  d to execute SQL
c0d0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74   operations on t
c0e0: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
c0f0: 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62  ..**.** All VTab
c100: 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  le objects that 
c110: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20  correspond to a 
c120: 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
c130: 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61  a shared.** data
c140: 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20  base schema are 
c150: 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64  initially stored
c160: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73   in a linked-lis
c170: 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a  t pointed to by.
c180: 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  ** the Table.pVT
c190: 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69  able member vari
c1a0: 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72  able of the corr
c1b0: 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20  esponding Table 
c1c0: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20  object..** When 
c1d0: 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  an sqlite3_prepa
c1e0: 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69  re() operation i
c1f0: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63  s required to ac
c200: 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
c210: 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65  .** table, it se
c220: 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20  arches the list 
c230: 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74  for the VTable t
c240: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
c250: 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
c260: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f  se connection do
c270: 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e  ing the preparin
c280: 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74  g so as to use t
c290: 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71  he correct.** sq
c2a0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
c2b0: 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c  le in the compil
c2c0: 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  ed query..**.** 
c2d0: 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  When an in-memor
c2e0: 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69  y Table object i
c2f0: 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65  s deleted (for e
c300: 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a  xample when the.
c310: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69  ** schema is bei
c320: 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20  ng reloaded for 
c330: 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68  some reason), th
c340: 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  e VTable objects
c350: 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c   are not .** del
c360: 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
c370: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
c380: 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
c390: 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69  onnect()ed .** i
c3a0: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
c3b0: 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
c3c0: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
c3d0: 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
c3e0: 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
c3f0: 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
c400: 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
c410: 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
c420: 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
c430: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
c440: 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
c450: 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
c460: 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
c470: 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  d .** next time 
c480: 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
c490: 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
c4a0: 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
c4b0: 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
c4c0: 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
c4d0: 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
c4e0: 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
c4f0: 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
c500: 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
c510: 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
c520: 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
c530: 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
c540: 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
c550: 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
c560: 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
c570: 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
c580: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
c590: 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
c5a0: 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
c5b0: 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
c5c0: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
c5d0: 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
c5e0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
c5f0: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
c600: 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
c610: 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61   .** sqlite3DbMa
c620: 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68  lloc(), using th
c630: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
c640: 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54  dle stored in VT
c650: 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74  able.db as .** t
c660: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
c670: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
c680: 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
c690: 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
c6a0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
c6b0: 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
c6c0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
c6d0: 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
c6e0: 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
c6f0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
c700: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
c710: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
c720: 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
c730: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
c740: 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
c750: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
c780: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
c790: 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
c7a0: 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
c7b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c7c0: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
c7d0: 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
c7e0: 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
c7f0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
c800: 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
c810: 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
c820: 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
c830: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
c840: 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
c850: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
c860: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
c870: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70  SQL table is rep
c880: 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
c890: 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ry by an instanc
c8a0: 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  e of the.** foll
c8b0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
c8c0: 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61  .**.** Table.zNa
c8d0: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
c8e0: 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68  f the table.  Th
c8f0: 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72  e case of the or
c900: 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45  iginal.** CREATE
c910: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
c920: 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20   is stored, but 
c930: 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e  case is not sign
c940: 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63  ificant for.** c
c950: 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a  omparisons..**.*
c960: 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20  * Table.nCol is 
c970: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
c980: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
c990: 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c  ble.  Table.aCol
c9a0: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
c9b0: 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20   to an array of 
c9c0: 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65  Column structure
c9d0: 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  s, one for each 
c9e0: 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  column..**.** If
c9f0: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
ca00: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
ca10: 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c  Y KEY, then Tabl
ca20: 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69  e.iPKey is the i
ca30: 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63  ndex of.** the c
ca40: 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68  olumn that is th
ca50: 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77  at key.   Otherw
ca60: 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20  ise Table.iPKey 
ca70: 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f  is negative.  No
ca80: 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
ca90: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50  atatype of the P
caa0: 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20  RIMARY KEY must 
cab0: 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74  be INTEGER for t
cac0: 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20  his field to.** 
cad0: 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45  be set.  An INTE
cae0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
caf0: 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72  is used as the r
cb00: 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f  owid for each ro
cb10: 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  w of.** the tabl
cb20: 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68  e.  If a table h
cb30: 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52  as no INTEGER PR
cb40: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
cb50: 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a  a random rowid.*
cb60: 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66  * is generated f
cb70: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
cb80: 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61  he table.  TF_Ha
cb90: 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73  sPrimaryKey is s
cba0: 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62  et if.** the tab
cbb0: 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41  le has any PRIMA
cbc0: 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20  RY KEY, INTEGER 
cbd0: 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a  or otherwise..**
cbe0: 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69  .** Table.tnum i
cbf0: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
cc00: 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42  r for the root B
cc10: 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65  Tree page of the
cc20: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a   table in the.**
cc30: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
cc40: 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73   If Table.iDb is
cc50: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
cc60: 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
cc70: 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73   backend.** in s
cc80: 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20  qlite.aDb[].  0 
cc90: 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20  is for the main 
cca0: 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20 69  database and 1 i
ccb0: 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74  s for the file t
ccc0: 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d  hat.** holds tem
ccd0: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
cce0: 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54  d indices.  If T
ccf0: 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73  F_Ephemeral is s
cd00: 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74  et.** then the t
cd10: 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69  able is stored i
cd20: 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73  n a file that is
cd30: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
cd40: 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74  eleted.** when t
cd50: 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 74  he VDBE cursor t
cd60: 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  o the table is c
cd70: 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20  losed.  In this 
cd80: 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20  case Table.tnum 
cd90: 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45 20  .** refers VDBE 
cda0: 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68  cursor number th
cdb0: 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62  at holds the tab
cdc0: 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20  le open, not to 
cdd0: 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  the root.** page
cde0: 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69   number.  Transi
cdf0: 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75  ent tables are u
ce00: 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
ce10: 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20  results of a.** 
ce20: 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20 61  sub-query that a
ce30: 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f  ppears instead o
ce40: 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e  f a real table n
ce50: 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ame in the FROM 
ce60: 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20  clause .** of a 
ce70: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
ce80: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
ce90: 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
cea0: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
ceb0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
cec0: 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 69 6e 74  or view */.  int
ced0: 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
cee0: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
cef0: 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
cf00: 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72 69  PKey] as the pri
cf10: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 6e  mary key */.  in
cf20: 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
cf30: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
cf40: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
cf50: 74 61 62 6c 65 20 2a 2f 0a 20 20 43 6f 6c 75 6d  table */.  Colum
cf60: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
cf70: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
cf80: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
cf90: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
cfa0: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
cfb0: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
cfc0: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
cfd0: 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
cfe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
cff0: 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f  ot BTree node fo
d000: 72 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65  r this table (se
d010: 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f  e note above) */
d020: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45  .  tRowcnt nRowE
d030: 73 74 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  st;     /* Estim
d040: 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
d050: 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
d060: 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
d070: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
d080: 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
d090: 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
d0a0: 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
d0b0: 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
d0c0: 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20   u16 nRef;      
d0d0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d0e0: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
d0f0: 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75  his Table */.  u
d100: 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  8 tabFlags;     
d110: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
d120: 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
d130: 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
d140: 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
d150: 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
d160: 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
d170: 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 20 20  t on iPKey */.  
d180: 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20  FKey *pFKey;    
d190: 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c       /* Linked l
d1a0: 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69  ist of all forei
d1b0: 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20  gn keys in this 
d1c0: 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  table */.  char 
d1d0: 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
d1e0: 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
d1f0: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
d200: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
d210: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
d220: 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78  _OMIT_CHECK.  Ex
d230: 70 72 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 20  pr *pCheck;     
d240: 20 20 20 2f 2a 20 54 68 65 20 41 4e 44 20 6f 66     /* The AND of
d250: 20 61 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   all CHECK const
d260: 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66  raints */.#endif
d270: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d280: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
d290: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
d2a0: 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
d2b0: 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
d2c0: 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
d2d0: 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
d2e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
d2f0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
d300: 41 42 4c 45 0a 20 20 56 54 61 62 6c 65 20 2a 70  ABLE.  VTable *p
d310: 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
d320: 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
d330: 6a 65 63 74 73 2e 20 2a 2f 0a 20 20 69 6e 74 20  jects. */.  int 
d340: 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
d350: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
d360: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
d370: 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
d380: 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
d390: 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d  /* Text of all m
d3a0: 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20  odule args. [0] 
d3b0: 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a  is module name *
d3c0: 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
d3d0: 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
d3e0: 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
d3f0: 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
d400: 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
d410: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
d420: 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
d430: 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
d440: 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
d450: 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
d460: 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
d470: 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
d480: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
d490: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
d4a0: 72 20 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e  r Tabe.tabFlags.
d4b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
d4c0: 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
d4d0: 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
d4e0: 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
d4f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
d500: 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
d510: 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
d520: 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
d530: 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
d540: 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
d550: 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
d560: 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
d570: 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
d580: 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
d590: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
d5a0: 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
d5b0: 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
d5c0: 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
d5d0: 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
d5e0: 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
d5f0: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
d600: 6e 65 20 54 46 5f 4e 65 65 64 4d 65 74 61 64 61  ne TF_NeedMetada
d610: 74 61 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  ta    0x20    /*
d620: 20 61 43 6f 6c 5b 5d 2e 7a 54 79 70 65 20 61 6e   aCol[].zType an
d630: 64 20 61 43 6f 6c 5b 5d 2e 70 43 6f 6c 6c 20 6d  d aCol[].pColl m
d640: 69 73 73 69 6e 67 20 2a 2f 0a 0a 0a 0a 2f 2a 0a  issing */..../*.
d650: 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
d660: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
d670: 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
d680: 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
d690: 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
d6a0: 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
d6b0: 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
d6c0: 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
d6d0: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
d6e0: 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
d6f0: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
d700: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
d710: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
d720: 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
d730: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
d740: 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
d750: 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
d760: 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
d770: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
d780: 58 29 2d 3e 69 73 48 69 64 64 65 6e 29 0a 23 65  X)->isHidden).#e
d790: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
d7a0: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
d7b0: 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  0.#  define IsHi
d7c0: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
d7d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
d7e0: 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
d7f0: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
d800: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
d810: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
d820: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
d830: 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
d840: 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
d850: 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
d860: 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
d870: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
d880: 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
d890: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
d8a0: 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
d8b0: 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
d8c0: 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
d8d0: 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
d8e0: 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
d8f0: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
d900: 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
d910: 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
d920: 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
d930: 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
d940: 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
d950: 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
d960: 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
d970: 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
d980: 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
d990: 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
d9a0: 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
d9b0: 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
d9c0: 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
d9d0: 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
d9e0: 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a 20 45 61   "ex2"..**.** Ea
d9f0: 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  ch REFERENCES cl
da00: 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61  ause generates a
da10: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
da20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
da30: 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69  cture.** which i
da40: 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
da50: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54  e from-table.  T
da60: 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64  he to-table need
da70: 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a   not exist when.
da80: 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ** the from-tabl
da90: 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54  e is created.  T
daa0: 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  he existence of 
dab0: 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
dac0: 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2f 0a  not checked..*/.
dad0: 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
dae0: 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
daf0: 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
db00: 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
db10: 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
db20: 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
db30: 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
db40: 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67 6e 20  /* Next foreign 
db50: 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  key in pFrom */.
db60: 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
db70: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
db80: 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
db90: 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
dba0: 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
dbb0: 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
dbc0: 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67 6e   /* Next foreign
dbd0: 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20 6e 61   key on table na
dbe0: 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 46 4b 65  med zTo */.  FKe
dbf0: 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f  y *pPrevTo;    /
dc00: 2a 20 50 72 65 76 69 6f 75 73 20 66 6f 72 65 69  * Previous forei
dc10: 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20  gn key on table 
dc20: 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 69  named zTo */.  i
dc30: 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
dc40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
dc50: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65  lumns in this ke
dc60: 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d  y */.  /* EV: R-
dc70: 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20  30323-21917 */. 
dc80: 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20   u8 isDeferred; 
dc90: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
dca0: 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e  nstraint checkin
dcb0: 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69  g is deferred ti
dcc0: 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75  ll COMMIT */.  u
dcd0: 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20  8 aAction[2];   
dce0: 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
dcf0: 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
dd00: 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
dd10: 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
dd20: 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
dd30: 32 5d 3b 20 20 2f 2a 20 54 72 69 67 67 65 72 73  2];  /* Triggers
dd40: 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61   for aAction[] a
dd50: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
dd60: 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 2f 2a  ct sColMap {  /*
dd70: 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75   Mapping of colu
dd80: 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20  mns in pFrom to 
dd90: 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a  columns in zTo *
dda0: 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b  /.    int iFrom;
ddb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
ddc0: 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
ddd0: 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
dde0: 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *zCol;        /
ddf0: 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
de00: 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 30 20 75   in zTo.  If 0 u
de10: 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
de20: 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
de30: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
de40: 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e  ry for each of n
de50: 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20 2a 2f 0a  Col column s */.
de60: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65  };../*.** SQLite
de70: 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64   supports many d
de80: 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f  ifferent ways to
de90: 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74   resolve a const
dea0: 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
deb0: 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
dec0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
ded0: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
dee0: 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
def0: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
df00: 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
df10: 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
df20: 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
df30: 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
df40: 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
df50: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
df60: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
df70: 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
df80: 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
df90: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
dfa0: 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
dfb0: 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
dfc0: 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
dfd0: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
dfe0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
dff0: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
e000: 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
e010: 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
e020: 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
e030: 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
e040: 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
e050: 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
e060: 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
e070: 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
e080: 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
e090: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
e0a0: 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
e0b0: 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
e0c0: 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
e0d0: 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
e0e0: 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
e0f0: 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
e100: 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
e110: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
e120: 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
e130: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
e140: 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
e150: 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
e160: 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
e170: 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
e180: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
e190: 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
e1a0: 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
e1b0: 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
e1c0: 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
e1d0: 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
e1e0: 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
e1f0: 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
e200: 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
e210: 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
e220: 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
e230: 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
e240: 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
e250: 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
e260: 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
e270: 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
e280: 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
e290: 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
e2a0: 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
e2b0: 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
e2c0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
e2d0: 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
e2e0: 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
e2f0: 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
e300: 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
e310: 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
e320: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
e330: 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
e340: 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
e350: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
e360: 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
e370: 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  * .** The follow
e380: 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
e390: 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
e3a0: 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
e3b0: 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
e3c0: 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
e3d0: 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
e3e0: 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
e3f0: 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
e400: 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
e410: 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
e420: 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
e430: 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
e440: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
e450: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
e460: 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
e470: 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
e480: 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
e490: 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
e4a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
e4b0: 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
e4c0: 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
e4d0: 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
e4e0: 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
e4f0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
e500: 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
e510: 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
e520: 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
e530: 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
e540: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
e550: 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
e560: 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
e570: 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
e580: 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
e590: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
e5a0: 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
e5b0: 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
e5c0: 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
e5d0: 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
e5e0: 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
e5f0: 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
e600: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
e610: 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
e620: 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
e630: 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
e640: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
e650: 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
e660: 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
e670: 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
e680: 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
e690: 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
e6a0: 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 39 39  e OE_Default  99
e6b0: 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
e6c0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
e6d0: 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
e6e0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
e6f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
e700: 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
e710: 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
e720: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
e730: 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
e740: 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
e750: 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20   to control the 
e760: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
e770: 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
e780: 6b 65 79 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  keys..*/.struct 
e790: 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69  KeyInfo {.  sqli
e7a0: 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
e7b0: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
e7c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
e7d0: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
e7e0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
e7f0: 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
e800: 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
e810: 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46  lues */.  u16 nF
e820: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
e830: 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
e840: 65 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d 20 2a 2f  es in aColl[] */
e850: 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
e860: 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
e870: 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
e880: 6c 75 6d 6e 2e 20 20 4d 61 79 20 62 65 20 4e 55  lumn.  May be NU
e890: 4c 4c 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  LL */.  CollSeq 
e8a0: 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
e8b0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
e8c0: 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
e8d0: 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
e8e0: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
e8f0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e900: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
e910: 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
e920: 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67   about a.** sing
e930: 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20  le index record 
e940: 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
e950: 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
e960: 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
e970: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  .** values..**.*
e980: 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e  * A record is an
e990: 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e   object that con
e9a0: 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
e9b0: 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61  e fields of data
e9c0: 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65  ..** Records are
e9d0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
e9e0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
e9f0: 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f  table row and to
ea00: 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65   store.** the ke
ea10: 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20  y of an index.  
ea20: 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20  A blob encoding 
ea30: 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63  of a record is c
ea40: 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
ea50: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f   OP_MakeRecord o
ea60: 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42  pcode of the VDB
ea70: 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65  E and is disasse
ea80: 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  mbled by the.** 
ea90: 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
eaa0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
eab0: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72  ucture holds a r
eac0: 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
ead0: 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73 61  lready been disa
eae0: 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f  ssembled.** into
eaf0: 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74   its constituent
eb00: 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74 72 75   fields..*/.stru
eb10: 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ct UnpackedRecor
eb20: 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  d {.  KeyInfo *p
eb30: 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c  KeyInfo;  /* Col
eb40: 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d  lation and sort-
eb50: 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f  order informatio
eb60: 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  n */.  u16 nFiel
eb70: 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
eb80: 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
eb90: 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
eba0: 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u16 flags;      
ebb0: 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 73      /* Boolean s
ebc0: 65 74 74 69 6e 67 73 2e 20 20 55 4e 50 41 43 4b  ettings.  UNPACK
ebd0: 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a 2f 0a  ED_... below */.
ebe0: 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20    i64 rowid;    
ebf0: 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
ec00: 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
ec10: 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20 4d 65 6d  _SEARCH */.  Mem
ec20: 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
ec30: 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b   /* Values */.};
ec40: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
ec50: 76 61 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b  values of Unpack
ec60: 65 64 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a  edRecord.flags.*
ec70: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
ec80: 45 44 5f 4e 45 45 44 5f 46 52 45 45 20 20 20 20  ED_NEED_FREE    
ec90: 20 30 78 30 30 30 31 20 20 2f 2a 20 4d 65 6d 6f   0x0001  /* Memo
eca0: 72 79 20 69 73 20 66 72 6f 6d 20 73 71 6c 69 74  ry is from sqlit
ecb0: 65 33 4d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64  e3Malloc() */.#d
ecc0: 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 4e  efine UNPACKED_N
ecd0: 45 45 44 5f 44 45 53 54 52 4f 59 20 20 30 78 30  EED_DESTROY  0x0
ece0: 30 30 32 20 20 2f 2a 20 61 70 4d 65 6d 5b 5d 73  002  /* apMem[]s
ecf0: 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 64   should all be d
ed00: 65 73 74 72 6f 79 65 64 20 2a 2f 0a 23 64 65 66  estroyed */.#def
ed10: 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e  ine UNPACKED_IGN
ed20: 4f 52 45 5f 52 4f 57 49 44 20 20 30 78 30 30 30  ORE_ROWID  0x000
ed30: 34 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 72 61  4  /* Ignore tra
ed40: 69 6c 69 6e 67 20 72 6f 77 69 64 20 6f 6e 20 6b  iling rowid on k
ed50: 65 79 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ey1 */.#define U
ed60: 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
ed70: 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a        0x0008  /*
ed80: 20 4d 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61   Make this key a
ed90: 6e 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72  n epsilon larger
eda0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41   */.#define UNPA
edb0: 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
edc0: 48 20 20 30 78 30 30 31 30 20 20 2f 2a 20 41 20  H  0x0010  /* A 
edd0: 70 72 65 66 69 78 20 6d 61 74 63 68 20 69 73 20  prefix match is 
ede0: 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f  considered OK */
edf0: 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45  .#define UNPACKE
ee00: 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48 20  D_PREFIX_SEARCH 
ee10: 30 78 30 30 32 30 20 20 2f 2a 20 41 20 70 72 65  0x0020  /* A pre
ee20: 66 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e  fix match is con
ee30: 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 0a 2f  sidered OK */../
ee40: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
ee50: 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
ee60: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
ee70: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
ee80: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
ee90: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
eea0: 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
eeb0: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
eec0: 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
eed0: 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
eee0: 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
eef0: 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
ef00: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
ef10: 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
ef20: 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
ef30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
ef40: 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
ef50: 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
ef60: 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
ef70: 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
ef80: 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
ef90: 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
efa0: 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
efb0: 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
efc0: 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
efd0: 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
efe0: 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
eff0: 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
f000: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
f010: 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
f020: 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
f030: 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
f040: 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
f050: 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
f060: 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
f070: 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
f080: 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
f090: 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
f0a0: 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
f0b0: 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
f0c0: 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
f0d0: 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
f0e0: 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
f0f0: 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
f100: 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
f110: 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
f120: 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
f130: 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
f140: 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
f150: 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
f160: 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
f170: 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
f180: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
f190: 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
f1a0: 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
f1b0: 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
f1c0: 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
f1d0: 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
f1e0: 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
f1f0: 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
f200: 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
f210: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
f220: 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
f230: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
f240: 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
f250: 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
f260: 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
f270: 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
f280: 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
f290: 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
f2a0: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
f2b0: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
f2c0: 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
f2d0: 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
f2e0: 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
f2f0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
f300: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
f310: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f320: 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
f330: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
f340: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
f350: 6c 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  le used by this 
f360: 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a  index */.  int *
f370: 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 2f 2a 20 57  aiColumn;   /* W
f380: 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
f390: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
f3a0: 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
f3b0: 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
f3c0: 6f 77 45 73 74 3b 20 2f 2a 20 52 65 73 75 6c 74  owEst; /* Result
f3d0: 20 6f 66 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74   of ANALYZE: Est
f3e0: 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
f3f0: 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
f400: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
f410: 65 3b 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20  e;   /* The SQL 
f420: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
f430: 78 65 64 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  xed */.  int tnu
f440: 6d 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67  m;        /* Pag
f450: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f  e containing roo
f460: 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  t of this index 
f470: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
f480: 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72   */.  u8 onError
f490: 3b 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ;      /* OE_Abo
f4a0: 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f  rt, OE_Ignore, O
f4b0: 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45  E_Replace, or OE
f4c0: 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 38 20 61 75  _None */.  u8 au
f4d0: 74 6f 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 54  toIndex;    /* T
f4e0: 72 75 65 20 69 66 20 69 73 20 61 75 74 6f 6d 61  rue if is automa
f4f0: 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
f500: 28 65 78 3a 20 62 79 20 55 4e 49 51 55 45 29 20  (ex: by UNIQUE) 
f510: 2a 2f 0a 20 20 75 38 20 62 55 6e 6f 72 64 65 72  */.  u8 bUnorder
f520: 65 64 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69  ed;   /* Use thi
f530: 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f  s index for == o
f540: 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c  r IN queries onl
f550: 79 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  y */.  char *zCo
f560: 6c 41 66 66 3b 20 20 20 2f 2a 20 53 74 72 69 6e  lAff;   /* Strin
f570: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
f580: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
f590: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
f5a0: 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20  x *pNext;    /* 
f5b0: 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
f5c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f5d0: 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
f5e0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
f5f0: 6d 61 3b 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f  ma; /* Schema co
f600: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
f610: 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
f620: 72 74 4f 72 64 65 72 3b 20 20 2f 2a 20 41 72 72  rtOrder;  /* Arr
f630: 61 79 20 6f 66 20 73 69 7a 65 20 49 6e 64 65 78  ay of size Index
f640: 2e 6e 43 6f 6c 75 6d 6e 2e 20 54 72 75 65 3d 3d  .nColumn. True==
f650: 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43  DESC, False==ASC
f660: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43   */.  char **azC
f670: 6f 6c 6c 3b 20 20 20 2f 2a 20 41 72 72 61 79 20  oll;   /* Array 
f680: 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
f690: 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
f6a0: 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66 20  index */.#ifdef 
f6b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
f6c0: 41 54 33 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT3.  int nSampl
f6d0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
f6e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
f6f0: 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
f700: 5d 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 61  ] */.  tRowcnt a
f710: 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 20 20  vgEq;           
f720: 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
f730: 61 6c 75 65 20 66 6f 72 20 6b 65 79 20 76 61 6c  alue for key val
f740: 75 65 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  ues not in aSamp
f750: 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
f760: 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
f770: 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
f780: 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
f790: 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
f7a0: 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
f7b0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
f7c0: 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
f7d0: 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
f7e0: 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75   in memory .** u
f7f0: 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
f800: 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
f810: 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
f820: 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
f830: 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
f840: 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
f850: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
f860: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
f870: 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
f880: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
f890: 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
f8a0: 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65  * Value if eType
f8b0: 20 69 73 20 53 51 4c 49 54 45 5f 54 45 58 54 20   is SQLITE_TEXT 
f8c0: 6f 72 20 53 51 4c 49 54 45 5f 42 4c 4f 42 20 2a  or SQLITE_BLOB *
f8d0: 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 3b 20  /.    double r; 
f8e0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 69        /* Value i
f8f0: 66 20 65 54 79 70 65 20 69 73 20 53 51 4c 49 54  f eType is SQLIT
f900: 45 5f 46 4c 4f 41 54 20 2a 2f 0a 20 20 20 20 69  E_FLOAT */.    i
f910: 36 34 20 69 3b 20 20 20 20 20 20 20 20 20 20 2f  64 i;          /
f920: 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79 70 65  * Value if eType
f930: 20 69 73 20 53 51 4c 49 54 45 5f 49 4e 54 45 47   is SQLITE_INTEG
f940: 45 52 20 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 75  ER */.  } u;.  u
f950: 38 20 65 54 79 70 65 3b 20 20 20 20 20 20 20 20  8 eType;        
f960: 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c   /* SQLITE_NULL,
f970: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20   SQLITE_INTEGER 
f980: 2e 2e 2e 20 65 74 63 2e 20 2a 2f 0a 20 20 69 6e  ... etc. */.  in
f990: 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  t nByte;        
f9a0: 2f 2a 20 53 69 7a 65 20 69 6e 20 62 79 74 65 20  /* Size in byte 
f9b0: 6f 66 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2e  of text or blob.
f9c0: 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 45   */.  tRowcnt nE
f9d0: 71 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 2e 20  q;      /* Est. 
f9e0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
f9f0: 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75  here the key equ
fa00: 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20  als this sample 
fa10: 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 4c 74  */.  tRowcnt nLt
fa20: 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  ;      /* Est. n
fa30: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
fa40: 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20  ere key is less 
fa50: 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
fa60: 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 44   */.  tRowcnt nD
fa70: 4c 74 3b 20 20 20 20 20 2f 2a 20 45 73 74 2e 20  Lt;     /* Est. 
fa80: 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e  number of distin
fa90: 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61  ct keys less tha
faa0: 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
fab0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
fac0: 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74  token coming out
fad0: 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73   of the lexer is
fae0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
faf0: 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ** this structur
fb00: 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61  e.  Tokens are a
fb10: 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74  lso used as part
fb20: 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
fb30: 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66  n..**.** Note if
fb40: 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e   Token.z==0 then
fb50: 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54   Token.dyn and T
fb60: 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66  oken.n are undef
fb70: 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20  ined and.** may 
fb80: 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76  contain random v
fb90: 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d  alues.  Do not m
fba0: 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69  ake any assumpti
fbb0: 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e  ons about Token.
fbc0: 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e  dyn.** and Token
fbd0: 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d  .n when Token.z=
fbe0: 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f  =0..*/.struct To
fbf0: 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ken {.  const ch
fc00: 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65  ar *z;     /* Te
fc10: 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e  xt of the token.
fc20: 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69    Not NULL-termi
fc30: 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69  nated! */.  unsi
fc40: 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f  gned int n;    /
fc50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  * Number of char
fc60: 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74  acters in this t
fc70: 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  oken */.};../*.*
fc80: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
fc90: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
fca0: 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
fcb0: 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
fcc0: 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
fcd0: 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61  for a SELECT tha
fce0: 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
fcf0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
fd00: 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70  **.** If Expr.op
fd10: 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  ==TK_AGG_COLUMN 
fd20: 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  or TK_AGG_FUNCTI
fd30: 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67  ON then Expr.pAg
fd40: 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f  gInfo is a.** po
fd50: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
fd60: 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78  ructure.  The Ex
fd70: 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64  pr.iColumn field
fd80: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e   is the index in
fd90: 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c  .** AggInfo.aCol
fda0: 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46  [] or AggInfo.aF
fdb0: 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61  unc[] of informa
fdc0: 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67  tion needed to g
fdd0: 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20  enerate.** code 
fde0: 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a  for that node..*
fdf0: 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72  *.** AggInfo.pGr
fe00: 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66  oupBy and AggInf
fe10: 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f  o.aFunc.pExpr po
fe20: 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69  int to fields wi
fe30: 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67  thin the.** orig
fe40: 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75  inal Select stru
fe50: 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72  cture that descr
fe60: 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20  ibes the SELECT 
fe70: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73  statement.  Thes
fe80: 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e  e.** fields do n
fe90: 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72  ot need to be fr
fea0: 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63  eed when dealloc
feb0: 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66  ating the AggInf
fec0: 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  o structure..*/.
fed0: 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b  struct AggInfo {
fee0: 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65  .  u8 directMode
fef0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69  ;          /* Di
ff00: 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d  rect rendering m
ff10: 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64  ode means take d
ff20: 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20  ata directly.   
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff40: 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73         ** from s
ff50: 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74  ource tables rat
ff60: 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63  her than from ac
ff70: 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20  cumulators */.  
ff80: 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78  u8 useSortingIdx
ff90: 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69  ;       /* In di
ffa0: 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72  rect mode, refer
ffb0: 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67  ence the sorting
ffc0: 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20   index rather.  
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffe0: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20          ** than 
fff0: 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
10000 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
10010 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  gIdx;         /*
10020 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
10030 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  f the sorting in
10040 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  dex */.  int sor
10050 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20  tingIdxPTab;    
10060 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
10070 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c  r of pseudo-tabl
10080 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
10090 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
100a0 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
100b0 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  lause */.  int n
100c0 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
100d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
100e0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
100f0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
10100 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
10110 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72  _col {    /* For
10120 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65   each column use
10130 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c  d in source tabl
10140 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  es */.    Table 
10150 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
10160 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62     /* Source tab
10170 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54  le */.    int iT
10180 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
10190 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
101a0 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ber of the sourc
101b0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
101c0 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
101d0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d          /* Colum
101e0 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20  n number within 
101f0 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
10200 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72   */.    int iSor
10210 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  terColumn;      
10220 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
10230 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  r in the sorting
10240 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e   index */.    in
10250 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
10260 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
10270 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
10280 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
10290 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  or */.    Expr *
102a0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
102b0 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e     /* The origin
102c0 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  al expression */
102d0 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e  .  } *aCol;.  in
102e0 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t nColumn;      
102f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10300 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20  of used entries 
10310 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  in aCol[] */.  i
10320 6e 74 20 6e 43 6f 6c 75 6d 6e 41 6c 6c 6f 63 3b  nt nColumnAlloc;
10330 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10340 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
10350 74 65 64 20 66 6f 72 20 61 43 6f 6c 5b 5d 20 2a  ted for aCol[] *
10360 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
10370 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
10380 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
10390 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
103a0 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
103b0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
103c0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
103d0 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
103e0 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
103f0 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
10400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10410 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
10420 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10430 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
10440 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
10450 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
10460 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
10470 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
10480 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10490 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
104a0 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
104b0 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
104c0 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
104d0 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
104e0 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
104f0 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
10500 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
10510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
10520 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
10530 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
10540 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
10550 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
10560 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
10570 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
10580 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
10590 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
105a0 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
105b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
105c0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
105d0 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20   in aFunc[] */. 
105e0 20 69 6e 74 20 6e 46 75 6e 63 41 6c 6c 6f 63 3b   int nFuncAlloc;
105f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10600 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f  er of slots allo
10610 63 61 74 65 64 20 66 6f 72 20 61 46 75 6e 63 5b  cated for aFunc[
10620 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
10630 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
10640 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
10650 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
10660 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
10670 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
10680 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
10690 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
106a0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
106b0 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
106c0 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
106d0 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
106e0 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
106f0 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
10700 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
10710 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
10720 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
10730 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
10740 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
10750 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
10760 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10770 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
10780 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
10790 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
107a0 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
107b0 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
107c0 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
107d0 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
107e0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
107f0 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
10800 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
10810 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
10820 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
10830 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
10840 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
10850 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
10860 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
10870 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
10880 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
10890 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
108a0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
108b0 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
108c0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
108d0 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
108e0 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
108f0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
10900 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
10910 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
10920 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
10930 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
10940 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
10950 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
10960 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
10970 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
10980 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
10990 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
109a0 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
109b0 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
109c0 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
109d0 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
109e0 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
109f0 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
10a00 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
10a10 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
10a20 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
10a30 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10a40 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
10a50 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
10a60 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
10a70 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
10a80 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
10a90 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
10aa0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
10ab0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
10ac0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
10ad0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
10ae0 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
10af0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10b00 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
10b10 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
10b20 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
10b30 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
10b40 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
10b50 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
10b60 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
10b70 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
10b80 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
10b90 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
10ba0 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
10bb0 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
10bc0 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
10bd0 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
10be0 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
10bf0 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
10c00 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
10c10 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
10c20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
10c30 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
10c40 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
10c50 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
10c60 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
10c70 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
10c80 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
10c90 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
10ca0 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
10cb0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
10cc0 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
10cd0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
10ce0 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
10cf0 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
10d00 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
10d10 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
10d20 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
10d30 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
10d40 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
10d50 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
10d60 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
10d70 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
10d80 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
10d90 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
10da0 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
10db0 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
10dc0 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
10dd0 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
10de0 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
10df0 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
10e00 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
10e10 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
10e20 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
10e30 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
10e40 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
10e50 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
10e60 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
10e70 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
10e80 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
10e90 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
10ea0 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
10eb0 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
10ec0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
10ed0 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
10ee0 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
10ef0 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
10f00 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
10f10 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
10f20 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
10f30 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
10f40 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
10f50 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
10f60 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
10f70 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
10f80 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
10f90 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
10fa0 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
10fb0 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
10fc0 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
10fd0 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
10fe0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
10ff0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
11000 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
11010 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
11020 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
11030 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
11040 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
11050 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
11060 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
11070 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
11080 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
11090 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
110a0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
110b0 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
110c0 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
110d0 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
110e0 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
110f0 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
11100 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
11110 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
11120 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
11130 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
11140 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
11150 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
11160 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
11170 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
11180 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
11190 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
111a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
111b0 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
111c0 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
111d0 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
111e0 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
111f0 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
11200 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
11210 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
11220 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
11230 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
11240 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
11250 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
11260 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
11270 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
11280 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
11290 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
112a0 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
112b0 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
112c0 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
112d0 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
112e0 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
112f0 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
11300 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
11310 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
11320 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
11330 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
11340 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
11350 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
11360 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
11370 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
11380 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
11390 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
113a0 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
113b0 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
113c0 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
113d0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
113e0 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
113f0 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
11400 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
11410 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
11420 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
11430 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
11440 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
11450 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
11460 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
11470 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
11480 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
11490 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
114a0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
114b0 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
114c0 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
114d0 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
114e0 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
114f0 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
11500 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
11510 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
11520 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
11530 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
11540 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
11550 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11570 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
11580 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
11590 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
115a0 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
115b0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
115c0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
115d0 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
115e0 75 6d 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  umn */.  u16 fla
115f0 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
11600 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
11610 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
11620 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
11630 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
11640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
11650 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
11660 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
11670 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
11680 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
11690 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
116a0 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
116b0 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
116c0 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
116d0 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
116e0 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
116f0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
11700 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
11710 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
11720 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
11730 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
11740 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
11750 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
11760 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
11770 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
11780 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
11790 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
117a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
117e0 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
117f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
11800 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
11810 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
11820 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
11830 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
11840 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
11850 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 46 75  pList;     /* Fu
11860 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  nction arguments
11870 20 6f 72 20 69 6e 20 22 3c 65 78 70 72 3e 20 49   or in "<expr> I
11880 4e 20 28 3c 65 78 70 72 2d 6c 69 73 74 29 22 20  N (<expr-list)" 
11890 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
118a0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 55  Select;     /* U
118b0 73 65 64 20 66 6f 72 20 73 75 62 2d 73 65 6c 65  sed for sub-sele
118c0 63 74 73 20 61 6e 64 20 22 3c 65 78 70 72 3e 20  cts and "<expr> 
118d0 49 4e 20 28 3c 73 65 6c 65 63 74 3e 29 22 20 2a  IN (<select>)" *
118e0 2f 0a 20 20 7d 20 78 3b 0a 20 20 43 6f 6c 6c 53  /.  } x;.  CollS
118f0 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 20 20  eq *pColl;      
11900 20 20 2f 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69    /* The collati
11910 6f 6e 20 74 79 70 65 20 6f 66 20 74 68 65 20 63  on type of the c
11920 6f 6c 75 6d 6e 20 6f 72 20 30 20 2a 2f 0a 0a 20  olumn or 0 */.. 
11930 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
11940 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
11950 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
11960 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
11970 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
11980 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
11990 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
119a0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
119b0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
119c0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
119d0 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
119e0 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
119f0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
11a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
11a40 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
11a50 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
11a60 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62  UMN: cursor numb
11a70 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64  er of table hold
11a80 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  ing column.     
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54      ** TK_REGIST
11ab0 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  ER: register num
11ac0 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  ber.            
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
11ae0 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e  TK_TRIGGER: 1 ->
11af0 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a   new, 0 -> old *
11b00 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
11b10 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
11b20 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
11b30 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
11b40 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
11b60 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
11b70 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
11b80 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f  always >= 1). */
11b90 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
11ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
11bb0 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
11bc0 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
11bd0 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
11be0 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
11bf0 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
11c00 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
11c10 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
11c20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61  join */.  u8 fla
11c30 67 73 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  gs2;            
11c40 20 2f 2a 20 53 65 63 6f 6e 64 20 73 65 74 20 6f   /* Second set o
11c50 66 20 66 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e  f flags.  EP2_..
11c60 2e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20  . */.  u8 op2;  
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11c80 20 49 66 20 61 20 54 4b 5f 52 45 47 49 53 54 45   If a TK_REGISTE
11c90 52 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  R, the original 
11ca0 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70  value of Expr.op
11cb0 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
11cc0 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
11cd0 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
11ce0 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
11cf0 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54  _FUNCTION */.  T
11d00 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
11d10 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66        /* Table f
11d20 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70  or TK_COLUMN exp
11d30 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 23 69 66  ressions. */.#if
11d40 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
11d50 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
11d60 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
11d70 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
11d80 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
11d90 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
11da0 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
11db0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
11dc0 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
11dd0 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
11de0 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
11df0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
11e00 6f 6d 4a 6f 69 6e 20 20 20 30 78 30 30 30 31 20  omJoin   0x0001 
11e10 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69   /* Originated i
11e20 6e 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  n ON or USING cl
11e30 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
11e40 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
11e50 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20          0x0002  
11e60 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
11e70 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
11e80 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
11e90 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
11ea0 65 64 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20  ed   0x0004  /* 
11eb0 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
11ec0 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
11ed0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
11ee0 45 72 72 6f 72 20 20 20 20 20 20 30 78 30 30 30  Error      0x000
11ef0 38 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  8  /* Expression
11f00 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
11f10 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
11f20 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
11f30 6e 63 74 20 20 20 30 78 30 30 31 30 20 20 2f 2a  nct   0x0010  /*
11f40 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
11f50 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
11f60 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
11f70 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
11f80 74 20 20 30 78 30 30 32 30 20 20 2f 2a 20 70 53  t  0x0020  /* pS
11f90 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
11fa0 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
11fb0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
11fc0 44 62 6c 51 75 6f 74 65 64 20 20 30 78 30 30 34  DblQuoted  0x004
11fd0 30 20 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  0  /* token.z wa
11fe0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
11ff0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
12000 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 20 30   EP_InfixFunc  0
12010 78 30 30 38 30 20 20 2f 2a 20 54 72 75 65 20 66  x0080  /* True f
12020 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
12030 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
12040 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
12050 20 45 50 5f 45 78 70 43 6f 6c 6c 61 74 65 20 30   EP_ExpCollate 0
12060 78 30 31 30 30 20 20 2f 2a 20 43 6f 6c 6c 61 74  x0100  /* Collat
12070 69 6e 67 20 73 65 71 75 65 6e 63 65 20 73 70 65  ing sequence spe
12080 63 69 66 69 65 64 20 65 78 70 6c 69 63 69 74 6c  cified explicitl
12090 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
120a0 46 69 78 65 64 44 65 73 74 20 20 30 78 30 32 30  FixedDest  0x020
120b0 30 20 20 2f 2a 20 52 65 73 75 6c 74 20 6e 65 65  0  /* Result nee
120c0 64 65 64 20 69 6e 20 61 20 73 70 65 63 69 66 69  ded in a specifi
120d0 63 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 23 64  c register */.#d
120e0 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75  efine EP_IntValu
120f0 65 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 49  e   0x0400  /* I
12100 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e  nteger value con
12110 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c  tained in u.iVal
12120 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
12130 5f 78 49 73 53 65 6c 65 63 74 20 20 30 78 30 38  _xIsSelect  0x08
12140 30 30 20 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74  00  /* x.pSelect
12150 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72   is valid (other
12160 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29  wise x.pList is)
12170 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 45 50 5f   */..#define EP_
12180 52 65 64 75 63 65 64 20 20 20 20 30 78 31 30 30  Reduced    0x100
12190 30 20 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  0  /* Expr struc
121a0 74 20 69 73 20 45 58 50 52 5f 52 45 44 55 43 45  t is EXPR_REDUCE
121b0 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
121c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
121d0 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 32 30 30 30  okenOnly  0x2000
121e0 20 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74    /* Expr struct
121f0 20 69 73 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e   is EXPR_TOKENON
12200 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
12210 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
12220 53 74 61 74 69 63 20 20 20 20 20 30 78 34 30 30  Static     0x400
12230 30 20 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  0  /* Held in me
12240 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
12250 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
12260 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
12270 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
12280 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
12290 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
122a0 67 73 32 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  gs2 field..*/.#d
122b0 65 66 69 6e 65 20 45 50 32 5f 4d 61 6c 6c 6f 63  efine EP2_Malloc
122c0 65 64 54 6f 6b 65 6e 20 20 30 78 30 30 30 31 20  edToken  0x0001 
122d0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
122e0 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
122f0 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
12300 6e 65 20 45 50 32 5f 49 72 72 65 64 75 63 69 62  ne EP2_Irreducib
12310 6c 65 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  le    0x0002  /*
12320 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
12330 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
12340 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 70   */../*.** The p
12350 73 65 75 64 6f 2d 72 6f 75 74 69 6e 65 20 73 71  seudo-routine sq
12360 6c 69 74 65 33 45 78 70 72 53 65 74 49 72 72 65  lite3ExprSetIrre
12370 64 75 63 69 62 6c 65 20 73 65 74 73 20 74 68 65  ducible sets the
12380 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c 65   EP2_Irreducible
12390 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 61 6e 20 65  .** flag on an e
123a0 78 70 72 65 73 73 69 6f 6e 20 73 74 72 75 63 74  xpression struct
123b0 75 72 65 2e 20 20 54 68 69 73 20 66 6c 61 67 20  ure.  This flag 
123c0 69 73 20 75 73 65 64 20 66 6f 72 20 56 56 26 41  is used for VV&A
123d0 20 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a 2a 20 72   only.  The.** r
123e0 6f 75 74 69 6e 65 20 69 73 20 69 6d 70 6c 65 6d  outine is implem
123f0 65 6e 74 65 64 20 61 73 20 61 20 6d 61 63 72 6f  ented as a macro
12400 20 74 68 61 74 20 6f 6e 6c 79 20 77 6f 72 6b 73   that only works
12410 20 77 68 65 6e 20 69 6e 20 64 65 62 75 67 67 69   when in debuggi
12420 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73 6f 20 61  ng mode,.** so a
12430 73 20 6e 6f 74 20 74 6f 20 62 75 72 64 65 6e 20  s not to burden 
12440 70 72 6f 64 75 63 74 69 6f 6e 20 63 6f 64 65 2e  production code.
12450 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
12460 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65  E_DEBUG.# define
12470 20 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69   ExprSetIrreduci
12480 62 6c 65 28 58 29 20 20 28 58 29 2d 3e 66 6c 61  ble(X)  (X)->fla
12490 67 73 32 20 7c 3d 20 45 50 32 5f 49 72 72 65 64  gs2 |= EP2_Irred
124a0 75 63 69 62 6c 65 0a 23 65 6c 73 65 0a 23 20 64  ucible.#else.# d
124b0 65 66 69 6e 65 20 45 78 70 72 53 65 74 49 72 72  efine ExprSetIrr
124c0 65 64 75 63 69 62 6c 65 28 58 29 0a 23 65 6e 64  educible(X).#end
124d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  if../*.** These 
124e0 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
124f0 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
12500 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
12510 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66  n the .** Expr.f
12520 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
12530 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
12540 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
12550 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
12560 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
12570 45 78 70 72 48 61 73 41 6e 79 50 72 6f 70 65 72  ExprHasAnyProper
12580 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
12590 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
125a0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
125b0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
125c0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
125d0 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
125e0 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
125f0 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
12600 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  )../*.** Macros 
12610 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
12620 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
12630 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
12640 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73  ormal Expr .** s
12650 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73  truct, an Expr s
12660 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
12670 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73  P_Reduced flag s
12680 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73  et in Expr.flags
12690 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72   .** and an Expr
126a0 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
126b0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
126c0 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
126d0 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
126e0 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
126f0 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
12700 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
12710 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
12720 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
12730 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
12740 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
12750 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
12760 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
12770 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
12780 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
12790 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
127a0 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
127b0 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
127c0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
127d0 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
127e0 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
127f0 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76  comment .** abov
12800 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
12810 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
12820 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
12830 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
12840 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
12850 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
12860 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
12870 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
12880 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
12890 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
128a0 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
128b0 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
128c0 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
128d0 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
128e0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
128f0 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
12900 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
12910 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
12920 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
12930 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
12940 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
12950 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
12960 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
12970 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
12980 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
12990 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
129a0 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
129b0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
129c0 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
129d0 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
129e0 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
129f0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
12a00 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
12a10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
12a20 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
12a30 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  ist */.  int nAl
12a40 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
12a50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
12a60 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ries allocated b
12a70 65 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 69 45  elow */.  int iE
12a80 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20  Cursor;         
12a90 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72 20   /* VDBE Cursor 
12aa0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12ab0 74 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a 2f  this ExprList */
12ac0 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
12ad0 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 45 78  st_item {.    Ex
12ae0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
12af0 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74       /* The list
12b00 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
12b10 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
12b20 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  me;           /*
12b30 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
12b40 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
12b50 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
12b60 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
12b70 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
12b80 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
12b90 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
12ba0 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
12bb0 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
12bc0 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
12bd0 20 2a 2f 0a 20 20 20 20 75 38 20 64 6f 6e 65 3b   */.    u8 done;
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12bf0 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
12c00 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
12c10 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
12c20 20 2a 2f 0a 20 20 20 20 75 31 36 20 69 43 6f 6c   */.    u16 iCol
12c30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
12c40 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
12c50 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
12c60 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
12c70 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
12c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
12c90 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
12ca0 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
12cb0 20 2a 2f 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   */.  } *a;     
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12cd0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
12ce0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  ch expression */
12cf0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
12d00 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
12d10 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
12d20 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74   by the parser t
12d30 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a  o record both.**
12d40 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
12d50 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f  for an expressio
12d60 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f  n and the span o
12d70 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72  f input text for
12d80 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f   an.** expressio
12d90 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  n..*/.struct Exp
12da0 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a  rSpan {.  Expr *
12db0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
12dc0 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f  /* The expressio
12dd0 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a  n parse tree */.
12de0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
12df0 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74  tart;   /* First
12e00 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e   character of in
12e10 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f  put text */.  co
12e20 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20  nst char *zEnd; 
12e30 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61      /* One chara
12e40 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e  cter past the en
12e50 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  d of input text 
12e60 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
12e70 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
12e80 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68   structure can h
12e90 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73  old a simple lis
12ea0 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  t of identifiers
12eb0 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65  ,.** such as the
12ec0 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e   list "a,b,c" in
12ed0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
12ee0 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a  tatements:.**.**
12ef0 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
12f00 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45  O t(a,b,c) VALUE
12f10 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43  S ...;.**      C
12f20 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20  REATE INDEX idx 
12f30 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20  ON t(a,b,c);.** 
12f40 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
12f50 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20  GER trig BEFORE 
12f60 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c  UPDATE ON t(a,b,
12f70 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68  c) ...;.**.** Th
12f80 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66  e IdList.a.idx f
12f90 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65  ield is used whe
12fa0 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70  n the IdList rep
12fb0 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74  resents the list
12fc0 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61   of.** column na
12fd0 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c  mes after a tabl
12fe0 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53  e name in an INS
12ff0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ERT statement.  
13000 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  In the statement
13010 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52  .**.**     INSER
13020 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
13030 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22  ....**.** If "a"
13040 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c   is the k-th col
13050 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22  umn of table "t"
13060 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b  , then IdList.a[
13070 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74  0].idx==k..*/.st
13080 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20  ruct IdList {.  
13090 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74  struct IdList_it
130a0 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  em {.    char *z
130b0 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
130c0 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69  me of the identi
130d0 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  fier */.    int 
130e0 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  idx;          /*
130f0 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54   Index in some T
13100 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61  able.aCol[] of a
13110 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e   column named zN
13120 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20  ame */.  } *a;. 
13130 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20   int nId;       
13140 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69    /* Number of i
13150 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68  dentifiers on th
13160 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20  e list */.  int 
13170 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
13180 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
13190 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
131a0 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  a[] below */.};.
131b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
131c0 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
131d0 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
131e0 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
131f0 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
13200 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
13210 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
13220 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
13230 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
13240 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
13250 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
13260 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
13270 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
13280 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
13290 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
132a0 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
132b0 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75  86..*/.typedef u
132c0 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a  64 Bitmask;../*.
132d0 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
132e0 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
132f0 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
13300 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
13310 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
13320 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
13330 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
13340 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
13350 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
13360 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
13370 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
13380 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
13390 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
133a0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
133b0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
133c0 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
133d0 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
133e0 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
133f0 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
13400 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
13410 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
13420 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
13430 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
13440 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
13450 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
13460 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
13470 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
13480 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
13490 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
134a0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
134b0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
134c0 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
134d0 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
134e0 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
134f0 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
13500 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
13510 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
13520 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
13530 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
13540 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
13550 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
13560 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
13570 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
13580 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
13590 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
135a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
135b0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
135c0 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
135d0 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
135e0 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
135f0 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
13600 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
13610 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
13620 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
13630 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
13640 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
13650 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
13660 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
13670 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
13680 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
13690 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
136a0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
136b0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
136c0 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
136d0 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
136e0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
136f0 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
13700 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
13710 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
13720 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
13730 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 31 36 20  SrcList {.  i16 
13740 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
13750 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
13760 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
13770 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
13780 65 20 2a 2f 0a 20 20 69 31 36 20 6e 41 6c 6c 6f  e */.  i16 nAllo
13790 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
137a0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
137b0 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
137c0 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
137d0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
137e0 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
137f0 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
13800 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
13810 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
13820 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
13830 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
13840 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
13850 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
13860 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
13870 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
13880 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
13890 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
138a0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
138b0 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
138c0 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
138d0 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
138e0 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
138f0 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
13900 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
13910 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
13920 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
13930 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
13940 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
13950 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
13960 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
13970 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
13980 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
13990 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
139a0 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
139b0 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
139c0 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20     u8 jointype; 
139d0 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20       /* Type of 
139e0 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69  join between thi
139f0 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70  s able and the p
13a00 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75  revious */.    u
13a10 38 20 6e 6f 74 49 6e 64 65 78 65 64 3b 20 20 20  8 notIndexed;   
13a20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
13a30 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58  e is a NOT INDEX
13a40 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ED clause */.   
13a50 20 75 38 20 69 73 43 6f 72 72 65 6c 61 74 65 64   u8 isCorrelated
13a60 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75  ;  /* True if su
13a70 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65  b-query is corre
13a80 6c 61 74 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66  lated */.#ifndef
13a90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
13aa0 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
13ab0 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
13ac0 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
13ad0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
13ae0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
13af0 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
13b00 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
13b10 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13b20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
13b30 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
13b40 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
13b50 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
13b60 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
13b70 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
13b80 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
13b90 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
13ba0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
13bb0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
13bc0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
13bd0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
13be0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
13bf0 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
13c00 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
13c10 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
13c20 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
13c30 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
13c40 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
13c50 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
13c60 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
13c70 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
13c80 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
13c90 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
13ca0 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
13cb0 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
13cc0 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
13cd0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
13ce0 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
13cf0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
13d00 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
13d10 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
13d20 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
13d30 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
13d40 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
13d50 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
13d60 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
13d70 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
13d80 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
13d90 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
13da0 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
13db0 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
13dc0 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
13dd0 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
13de0 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
13df0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
13e00 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
13e10 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
13e20 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
13e30 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
13e40 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
13e50 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
13e60 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
13e70 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
13e80 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
13e90 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
13ea0 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
13eb0 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
13ec0 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
13ed0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 57 68 65 72 65  .../*.** A Where
13ee0 50 6c 61 6e 20 6f 62 6a 65 63 74 20 68 6f 6c 64  Plan object hold
13ef0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  s information th
13f00 61 74 20 64 65 73 63 72 69 62 65 73 20 61 20 6c  at describes a l
13f10 6f 6f 6b 75 70 0a 2a 2a 20 73 74 72 61 74 65 67  ookup.** strateg
13f20 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 62  y..**.** This ob
13f30 6a 65 63 74 20 69 73 20 69 6e 74 65 6e 64 65 64  ject is intended
13f40 20 74 6f 20 62 65 20 6f 70 61 71 75 65 20 6f 75   to be opaque ou
13f50 74 73 69 64 65 20 6f 66 20 74 68 65 20 77 68 65  tside of the whe
13f60 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a 20  re.c module..** 
13f70 49 74 20 69 73 20 69 6e 63 6c 75 64 65 64 20 68  It is included h
13f80 65 72 65 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74  ere only so that
13f90 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 72 20 77   that compiler w
13fa0 69 6c 6c 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ill know how big
13fb0 20 69 74 0a 2a 2a 20 69 73 2e 20 20 4e 6f 6e 65   it.** is.  None
13fc0 20 6f 66 20 74 68 65 20 66 69 65 6c 64 73 20 69   of the fields i
13fd0 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 68  n this object sh
13fe0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 6f 75 74  ould be used out
13ff0 73 69 64 65 20 6f 66 0a 2a 2a 20 74 68 65 20 77  side of.** the w
14000 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 2e 0a 2a  here.c module..*
14010 2a 0a 2a 2a 20 57 69 74 68 69 6e 20 74 68 65 20  *.** Within the 
14020 75 6e 69 6f 6e 2c 20 70 49 64 78 20 69 73 20 6f  union, pIdx is o
14030 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 20 77 73  nly used when ws
14040 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 44 45  Flags&WHERE_INDE
14050 58 45 44 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20  XED is true..** 
14060 70 54 65 72 6d 20 69 73 20 6f 6e 6c 79 20 75 73  pTerm is only us
14070 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26  ed when wsFlags&
14080 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20 69  WHERE_MULTI_OR i
14090 73 20 74 72 75 65 2e 20 20 41 6e 64 20 70 56 74  s true.  And pVt
140a0 61 62 49 64 78 0a 2a 2a 20 69 73 20 6f 6e 6c 79  abIdx.** is only
140b0 20 75 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61   used when wsFla
140c0 67 73 26 57 48 45 52 45 5f 56 49 52 54 55 41 4c  gs&WHERE_VIRTUAL
140d0 54 41 42 4c 45 20 69 73 20 74 72 75 65 2e 20 20  TABLE is true.  
140e0 49 74 20 69 73 20 6e 65 76 65 72 20 74 68 65 0a  It is never the.
140f0 2a 2a 20 63 61 73 65 20 74 68 61 74 20 6d 6f 72  ** case that mor
14100 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66 20 74 68  e than one of th
14110 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20 69  ese conditions i
14120 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 72 75 63  s true..*/.struc
14130 74 20 57 68 65 72 65 50 6c 61 6e 20 7b 0a 20 20  t WherePlan {.  
14140 75 33 32 20 77 73 46 6c 61 67 73 3b 20 20 20 20  u32 wsFlags;    
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14160 2a 20 57 48 45 52 45 5f 2a 20 66 6c 61 67 73 20  * WHERE_* flags 
14170 74 68 61 74 20 64 65 73 63 72 69 62 65 20 74 68  that describe th
14180 65 20 73 74 72 61 74 65 67 79 20 2a 2f 0a 20 20  e strategy */.  
14190 75 33 32 20 6e 45 71 3b 20 20 20 20 20 20 20 20  u32 nEq;        
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
141b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 3d 3d 20 63  * Number of == c
141c0 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
141d0 64 6f 75 62 6c 65 20 6e 52 6f 77 3b 20 20 20 20  double nRow;    
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
141f0 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
14200 65 72 20 6f 66 20 72 6f 77 73 20 28 66 6f 72 20  er of rows (for 
14210 45 51 50 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  EQP) */.  union 
14220 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
14230 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
14240 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 77 68       /* Index wh
14250 65 6e 20 57 48 45 52 45 5f 49 4e 44 45 58 45 44  en WHERE_INDEXED
14260 20 69 73 20 74 72 75 65 20 2a 2f 0a 20 20 20 20   is true */.    
14270 73 74 72 75 63 74 20 57 68 65 72 65 54 65 72 6d  struct WhereTerm
14280 20 2a 70 54 65 72 6d 3b 20 20 20 20 20 20 20 2f   *pTerm;       /
14290 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74  * WHERE clause t
142a0 65 72 6d 20 66 6f 72 20 4f 52 2d 73 65 61 72 63  erm for OR-searc
142b0 68 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  h */.    sqlite3
142c0 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 56 74  _index_info *pVt
142d0 61 62 49 64 78 3b 20 20 2f 2a 20 56 69 72 74 75  abIdx;  /* Virtu
142e0 61 6c 20 74 61 62 6c 65 20 69 6e 64 65 78 20 74  al table index t
142f0 6f 20 75 73 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a  o use */.  } u;.
14300 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61  };../*.** For ea
14310 63 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69  ch nested loop i
14320 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  n a WHERE clause
14330 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
14340 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a   the WhereInfo.*
14350 2a 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * structure cont
14360 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e  ains a single in
14370 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
14380 74 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20  tructure.  This 
14390 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
143a0 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70  intended to be p
143b0 72 69 76 61 74 65 20 74 68 65 20 74 68 65 20 77  rivate the the w
143c0 68 65 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e  here.c module an
143d0 64 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  d should not be.
143e0 2a 2a 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64  ** access or mod
143f0 69 66 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d  ified by other m
14400 6f 64 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  odules..**.** Th
14410 65 20 70 49 64 78 49 6e 66 6f 20 66 69 65 6c 64  e pIdxInfo field
14420 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70   is used to help
14430 20 70 69 63 6b 20 74 68 65 20 62 65 73 74 20 69   pick the best i
14440 6e 64 65 78 20 6f 6e 20 61 0a 2a 2a 20 76 69 72  ndex on a.** vir
14450 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
14460 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65   pIdxInfo pointe
14470 72 20 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78  r contains index
14480 69 6e 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ing.** informati
14490 6f 6e 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20  on for the i-th 
144a0 74 61 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f  table in the FRO
144b0 4d 20 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20  M clause before 
144c0 72 65 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41  reordering..** A
144d0 6c 6c 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20  ll the pIdxInfo 
144e0 70 6f 69 6e 74 65 72 73 20 61 72 65 20 66 72 65  pointers are fre
144f0 65 64 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46  ed by whereInfoF
14500 72 65 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63  ree() in where.c
14510 2e 0a 2a 2a 20 41 6c 6c 20 6f 74 68 65 72 20 69  ..** All other i
14520 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68  nformation in th
14530 65 20 69 2d 74 68 20 57 68 65 72 65 4c 65 76 65  e i-th WhereLeve
14540 6c 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65  l object for the
14550 20 69 2d 74 68 20 74 61 62 6c 65 0a 2a 2a 20 61   i-th table.** a
14560 66 74 65 72 20 46 52 4f 4d 20 63 6c 61 75 73 65  fter FROM clause
14570 20 6f 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74   ordering..*/.st
14580 72 75 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20  ruct WhereLevel 
14590 7b 0a 20 20 57 68 65 72 65 50 6c 61 6e 20 70 6c  {.  WherePlan pl
145a0 61 6e 3b 20 20 20 20 20 20 20 2f 2a 20 71 75 65  an;       /* que
145b0 72 79 20 70 6c 61 6e 20 66 6f 72 20 74 68 69 73  ry plan for this
145c0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
145d0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
145e0 20 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e 3b 20   int iLeftJoin; 
145f0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
14600 20 63 65 6c 6c 20 75 73 65 64 20 74 6f 20 69 6d   cell used to im
14610 70 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f 55 54  plement LEFT OUT
14620 45 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69 6e 74  ER JOIN */.  int
14630 20 69 54 61 62 43 75 72 3b 20 20 20 20 20 20 20   iTabCur;       
14640 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
14650 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61 63  ursor used to ac
14660 63 65 73 73 20 74 68 65 20 74 61 62 6c 65 20 2a  cess the table *
14670 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72 3b  /.  int iIdxCur;
14680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14690 20 56 44 42 45 20 63 75 72 73 6f 72 20 75 73 65   VDBE cursor use
146a0 64 20 74 6f 20 61 63 63 65 73 73 20 70 49 64 78  d to access pIdx
146b0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 42 72   */.  int addrBr
146c0 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a  k;          /* J
146d0 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65 61  ump here to brea
146e0 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f  k out of the loo
146f0 70 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 4e  p */.  int addrN
14700 78 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  xt;          /* 
14710 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 73 74 61  Jump here to sta
14720 72 74 20 74 68 65 20 6e 65 78 74 20 49 4e 20 63  rt the next IN c
14730 6f 6d 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20 20  ombination */.  
14740 69 6e 74 20 61 64 64 72 43 6f 6e 74 3b 20 20 20  int addrCont;   
14750 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
14760 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 77  re to continue w
14770 69 74 68 20 74 68 65 20 6e 65 78 74 20 6c 6f 6f  ith the next loo
14780 70 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e 74  p cycle */.  int
14790 20 61 64 64 72 46 69 72 73 74 3b 20 20 20 20 20   addrFirst;     
147a0 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 73 74     /* First inst
147b0 72 75 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65 72  ruction of inter
147c0 69 6f 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  ior of the loop 
147d0 2a 2f 0a 20 20 75 38 20 69 46 72 6f 6d 3b 20 20  */.  u8 iFrom;  
147e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
147f0 69 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ich entry in the
14800 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
14810 20 20 75 38 20 6f 70 2c 20 70 35 3b 20 20 20 20    u8 op, p5;    
14820 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64          /* Opcod
14830 65 20 61 6e 64 20 50 35 20 6f 66 20 74 68 65 20  e and P5 of the 
14840 6f 70 63 6f 64 65 20 74 68 61 74 20 65 6e 64 73  opcode that ends
14850 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69   the loop */.  i
14860 6e 74 20 70 31 2c 20 70 32 3b 20 20 20 20 20 20  nt p1, p2;      
14870 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73       /* Operands
14880 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 75   of the opcode u
14890 73 65 64 20 74 6f 20 65 6e 64 73 20 74 68 65 20  sed to ends the 
148a0 6c 6f 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  loop */.  union 
148b0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
148c0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  /* Information t
148d0 68 61 74 20 64 65 70 65 6e 64 73 20 6f 6e 20 70  hat depends on p
148e0 6c 61 6e 2e 77 73 46 6c 61 67 73 20 2a 2f 0a 20  lan.wsFlags */. 
148f0 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
14900 20 20 69 6e 74 20 6e 49 6e 3b 20 20 20 20 20 20    int nIn;      
14910 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14920 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
14930 61 49 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20 20 20  aInLoop[] */.   
14940 20 20 20 73 74 72 75 63 74 20 49 6e 4c 6f 6f 70     struct InLoop
14950 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69   {.        int i
14960 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
14970 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
14980 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 69  rsor used by thi
14990 73 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f  s IN operator */
149a0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61 64 64  .        int add
149b0 72 49 6e 54 6f 70 3b 20 20 20 20 20 20 20 20 20  rInTop;         
149c0 2f 2a 20 54 6f 70 20 6f 66 20 74 68 65 20 49 4e  /* Top of the IN
149d0 20 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 20 20 7d   loop */.      }
149e0 20 2a 61 49 6e 4c 6f 6f 70 3b 20 20 20 20 20 20   *aInLoop;      
149f0 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
14a00 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e  ion about each n
14a10 65 73 74 65 64 20 49 4e 20 6f 70 65 72 61 74 6f  ested IN operato
14a20 72 20 2a 2f 0a 20 20 20 20 7d 20 69 6e 3b 20 20  r */.    } in;  
14a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14a40 2a 20 55 73 65 64 20 77 68 65 6e 20 70 6c 61 6e  * Used when plan
14a50 2e 77 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49  .wsFlags&WHERE_I
14a60 4e 5f 41 42 4c 45 20 2a 2f 0a 20 20 7d 20 75 3b  N_ABLE */.  } u;
14a70 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  ..  /* The follo
14a80 77 69 6e 67 20 66 69 65 6c 64 20 69 73 20 72 65  wing field is re
14a90 61 6c 6c 79 20 6e 6f 74 20 70 61 72 74 20 6f 66  ally not part of
14aa0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 65 76   the current lev
14ab0 65 6c 2e 20 20 42 75 74 0a 20 20 2a 2a 20 77 65  el.  But.  ** we
14ac0 20 6e 65 65 64 20 61 20 70 6c 61 63 65 20 74 6f   need a place to
14ad0 20 63 61 63 68 65 20 76 69 72 74 75 61 6c 20 74   cache virtual t
14ae0 61 62 6c 65 20 69 6e 64 65 78 20 69 6e 66 6f 72  able index infor
14af0 6d 61 74 69 6f 6e 20 66 6f 72 20 65 61 63 68 0a  mation for each.
14b00 20 20 2a 2a 20 76 69 72 74 75 61 6c 20 74 61 62    ** virtual tab
14b10 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  le in the FROM c
14b20 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 57 68  lause and the Wh
14b30 65 72 65 4c 65 76 65 6c 20 73 74 72 75 63 74 75  ereLevel structu
14b40 72 65 20 69 73 0a 20 20 2a 2a 20 61 20 63 6f 6e  re is.  ** a con
14b50 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 20 73 69  venient place si
14b60 6e 63 65 20 74 68 65 72 65 20 69 73 20 6f 6e 65  nce there is one
14b70 20 57 68 65 72 65 4c 65 76 65 6c 20 66 6f 72 20   WhereLevel for 
14b80 65 61 63 68 20 46 52 4f 4d 20 63 6c 61 75 73 65  each FROM clause
14b90 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 20  .  ** element.. 
14ba0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
14bb0 64 65 78 5f 69 6e 66 6f 20 2a 70 49 64 78 49 6e  dex_info *pIdxIn
14bc0 66 6f 3b 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e  fo;  /* Index in
14bd0 66 6f 20 66 6f 72 20 6e 2d 74 68 20 73 6f 75 72  fo for n-th sour
14be0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  ce table */.};..
14bf0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72  /*.** Flags appr
14c00 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
14c10 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d  wctrlFlags param
14c20 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57  eter of sqlite3W
14c30 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61  hereBegin().** a
14c40 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f  nd the WhereInfo
14c50 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62  .wctrlFlags memb
14c60 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  er..*/.#define W
14c70 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52  HERE_ORDERBY_NOR
14c80 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20  MAL   0x0000 /* 
14c90 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65  No-op */.#define
14ca0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
14cb0 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f  IN      0x0001 /
14cc0 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
14cd0 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20  ssing for min() 
14ce0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
14cf0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41  WHERE_ORDERBY_MA
14d00 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a  X      0x0002 /*
14d10 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
14d20 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66  sing for max() f
14d30 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
14d40 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53  HERE_ONEPASS_DES
14d50 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20  IRED  0x0004 /* 
14d60 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70  Want to do one-p
14d70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54  ass UPDATE/DELET
14d80 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  E */.#define WHE
14d90 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b  RE_DUPLICATES_OK
14da0 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b      0x0008 /* Ok
14db0 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77   to return a row
14dc0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20   more than once 
14dd0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14de0 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45  _OMIT_OPEN_CLOSE
14df0 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c    0x0010 /* Tabl
14e00 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  e cursors are al
14e10 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64  ready open */.#d
14e20 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43  efine WHERE_FORC
14e30 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30  E_TABLE      0x0
14e40 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73  020 /* Do not us
14e50 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20  e an index-only 
14e60 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e  search */.#defin
14e70 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45  e WHERE_ONETABLE
14e80 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20  _ONLY    0x0040 
14e90 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65  /* Only code the
14ea0 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54   1st table in pT
14eb0 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e  abList */.#defin
14ec0 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59  e WHERE_AND_ONLY
14ed0 20 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20           0x0080 
14ee0 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64  /* Don't use ind
14ef0 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d  ices for OR term
14f00 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  s */../*.** The 
14f10 57 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f  WHERE clause pro
14f20 63 65 73 73 69 6e 67 20 72 6f 75 74 69 6e 65 20  cessing routine 
14f30 68 61 73 20 74 77 6f 20 68 61 6c 76 65 73 2e 20  has two halves. 
14f40 20 54 68 65 0a 2a 2a 20 66 69 72 73 74 20 70 61   The.** first pa
14f50 72 74 20 64 6f 65 73 20 74 68 65 20 73 74 61 72  rt does the star
14f60 74 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c  t of the WHERE l
14f70 6f 6f 70 20 61 6e 64 20 74 68 65 20 73 65 63 6f  oop and the seco
14f80 6e 64 0a 2a 2a 20 68 61 6c 66 20 64 6f 65 73 20  nd.** half does 
14f90 74 68 65 20 74 61 69 6c 20 6f 66 20 74 68 65 20  the tail of the 
14fa0 57 48 45 52 45 20 6c 6f 6f 70 2e 20 20 41 6e 20  WHERE loop.  An 
14fb0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
14fc0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
14fd0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
14fe0 20 66 69 72 73 74 20 68 61 6c 66 20 61 6e 64 20   first half and 
14ff0 70 61 73 73 65 64 0a 2a 2a 20 69 6e 74 6f 20 74  passed.** into t
15000 68 65 20 73 65 63 6f 6e 64 20 68 61 6c 66 20 74  he second half t
15010 6f 20 67 69 76 65 20 73 6f 6d 65 20 63 6f 6e 74  o give some cont
15020 69 6e 75 69 74 79 2e 0a 2a 2f 0a 73 74 72 75 63  inuity..*/.struc
15030 74 20 57 68 65 72 65 49 6e 66 6f 20 7b 0a 20 20  t WhereInfo {.  
15040 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
15050 20 20 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20       /* Parsing 
15060 61 6e 64 20 63 6f 64 65 20 67 65 6e 65 72 61 74  and code generat
15070 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
15080 20 75 31 36 20 77 63 74 72 6c 46 6c 61 67 73 3b   u16 wctrlFlags;
15090 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 6f        /* Flags o
150a0 72 69 67 69 6e 61 6c 6c 79 20 70 61 73 73 65 64  riginally passed
150b0 20 74 6f 20 73 71 6c 69 74 65 33 57 68 65 72 65   to sqlite3Where
150c0 42 65 67 69 6e 28 29 20 2a 2f 0a 20 20 75 38 20  Begin() */.  u8 
150d0 6f 6b 4f 6e 65 50 61 73 73 3b 20 20 20 20 20 20  okOnePass;      
150e0 20 20 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f    /* Ok to use o
150f0 6e 65 2d 70 61 73 73 20 61 6c 67 6f 72 69 74 68  ne-pass algorith
15100 6d 20 66 6f 72 20 55 50 44 41 54 45 20 6f 72 20  m for UPDATE or 
15110 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 75  DELETE */.  u8 u
15120 6e 74 65 73 74 65 64 54 65 72 6d 73 3b 20 20 20  ntestedTerms;   
15130 20 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52   /* Not all WHER
15140 45 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65 64  E terms resolved
15150 20 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a   by outer loop *
15160 2f 0a 20 20 75 38 20 65 44 69 73 74 69 6e 63 74  /.  u8 eDistinct
15170 3b 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 54 61  ;.  SrcList *pTa
15180 62 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  bList;          
15190 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 61     /* List of ta
151a0 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  bles in the join
151b0 20 2a 2f 0a 20 20 69 6e 74 20 69 54 6f 70 3b 20   */.  int iTop; 
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151d0 20 20 20 20 20 2f 2a 20 54 68 65 20 76 65 72 79       /* The very
151e0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
151f0 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a  e WHERE loop */.
15200 20 20 69 6e 74 20 69 43 6f 6e 74 69 6e 75 65 3b    int iContinue;
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f   /* Jump here to
15230 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e   continue with n
15240 65 78 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  ext record */.  
15250 69 6e 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20  int iBreak;     
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15270 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 62  * Jump here to b
15280 72 65 61 6b 20 6f 75 74 20 6f 66 20 74 68 65 20  reak out of the 
15290 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  loop */.  int nL
152a0 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
152b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
152c0 65 72 20 6f 66 20 6e 65 73 74 65 64 20 6c 6f 6f  er of nested loo
152d0 70 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 57 68  p */.  struct Wh
152e0 65 72 65 43 6c 61 75 73 65 20 2a 70 57 43 3b 20  ereClause *pWC; 
152f0 20 20 20 20 20 20 2f 2a 20 44 65 63 6f 6d 70 6f        /* Decompo
15300 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48  sition of the WH
15310 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
15320 64 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75 65  double savedNQue
15330 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 2f  ryLoop;        /
15340 2a 20 70 50 61 72 73 65 2d 3e 6e 51 75 65 72 79  * pParse->nQuery
15350 4c 6f 6f 70 20 6f 75 74 73 69 64 65 20 74 68 65  Loop outside the
15360 20 57 48 45 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20   WHERE loop */. 
15370 20 64 6f 75 62 6c 65 20 6e 52 6f 77 4f 75 74 3b   double nRowOut;
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
153a0 62 65 72 20 6f 66 20 6f 75 74 70 75 74 20 72 6f  ber of output ro
153b0 77 73 20 2a 2f 0a 20 20 57 68 65 72 65 4c 65 76  ws */.  WhereLev
153c0 65 6c 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20  el a[1];        
153d0 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
153e0 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
153f0 20 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57 48   nest loop in WH
15400 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69  ERE */.};..#defi
15410 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
15420 54 5f 55 4e 49 51 55 45 20 31 0a 23 64 65 66 69  T_UNIQUE 1.#defi
15430 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
15440 54 5f 4f 52 44 45 52 45 44 20 32 0a 0a 2f 2a 0a  T_ORDERED 2../*.
15450 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
15460 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
15470 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
15480 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
15490 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
154a0 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
154b0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
154c0 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
154d0 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
154e0 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
154f0 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
15500 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
15510 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
15520 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
15530 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
15540 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
15550 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
15560 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
15570 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
15580 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
15590 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
155a0 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
155b0 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
155c0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
155d0 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
155e0 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
155f0 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
15600 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
15610 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
15620 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
15630 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
15640 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
15650 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78  -most .** contex
15660 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
15670 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
15680 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
15690 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
156a0 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
156b0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
156c0 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
156d0 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
156e0 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
156f0 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
15700 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
15710 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
15720 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
15730 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
15740 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
15750 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
15760 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
15770 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
15780 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
15790 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
157a0 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  . .**.** Each su
157b0 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
157c0 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
157d0 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
157e0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
157f0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
15800 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
15810 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
15820 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
15830 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
15840 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
15850 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
15860 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
15870 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
15880 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
15890 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
158a0 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
158b0 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
158c0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
158d0 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
158e0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
158f0 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
15900 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
15910 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
15920 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
15930 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
15940 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
15950 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
15960 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  s */.  int nRef;
15970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15980 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72  umber of names r
15990 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20  esolved by this 
159a0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
159b0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
159c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
159d0 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65  rrors encountere
159e0 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e  d while resolvin
159f0 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20  g names */.  u8 
15a00 61 6c 6c 6f 77 41 67 67 3b 20 20 20 20 20 20 20  allowAgg;       
15a10 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
15a20 75 6e 63 74 69 6f 6e 73 20 61 6c 6c 6f 77 65 64  unctions allowed
15a30 20 68 65 72 65 20 2a 2f 0a 20 20 75 38 20 68 61   here */.  u8 ha
15a40 73 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20  sAgg;           
15a50 2f 2a 20 54 72 75 65 20 69 66 20 61 67 67 72 65  /* True if aggre
15a60 67 61 74 65 73 20 61 72 65 20 73 65 65 6e 20 2a  gates are seen *
15a70 2f 0a 20 20 75 38 20 69 73 43 68 65 63 6b 3b 20  /.  u8 isCheck; 
15a80 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
15a90 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
15aa0 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
15ab0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 69  onstraint */.  i
15ac0 6e 74 20 6e 44 65 70 74 68 3b 20 20 20 20 20 20  nt nDepth;      
15ad0 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
15ae0 73 75 62 71 75 65 72 79 20 72 65 63 75 72 73 69  subquery recursi
15af0 6f 6e 2e 20 31 20 66 6f 72 20 6e 6f 20 72 65 63  on. 1 for no rec
15b00 75 72 73 69 6f 6e 20 2a 2f 0a 20 20 41 67 67 49  ursion */.  AggI
15b10 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
15b20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
15b30 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
15b40 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
15b50 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  /.  NameContext 
15b60 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
15b70 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
15b80 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
15b90 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 7d 3b 0a 0a  utermost */.};..
15ba0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
15bb0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
15bc0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
15bd0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
15be0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
15bf0 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
15c00 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
15c10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
15c20 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
15c30 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
15c40 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
15c50 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
15c60 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
15c70 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
15c80 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
15c90 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
15ca0 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
15cb0 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
15cc0 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
15cd0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
15ce0 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
15cf0 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
15d00 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
15d10 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
15d20 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
15d30 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
15d40 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
15d50 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
15d60 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
15d70 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
15d80 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
15d90 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
15da0 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
15db0 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
15dc0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
15dd0 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
15de0 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
15df0 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
15e00 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
15e10 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
15e20 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
15e30 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
15e40 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
15e50 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
15e60 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
15e70 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
15e80 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
15e90 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
15ea0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
15eb0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
15ec0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
15ed0 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
15ee0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
15ef0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
15f00 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
15f10 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
15f20 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
15f30 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
15f40 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
15f50 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
15f60 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
15f70 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
15f80 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
15f90 61 6e 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  an[2] contains c
15fa0 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
15fb0 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
15fc0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
15fd0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
15fe0 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
15ff0 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
16000 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
16010 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
16020 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
16030 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
16040 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
16050 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
16060 43 45 50 54 20 2a 2f 0a 20 20 63 68 61 72 20 61  CEPT */.  char a
16070 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
16080 20 2f 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 77   /* MakeRecord w
16090 69 74 68 20 74 68 69 73 20 61 66 66 69 6e 69 74  ith this affinit
160a0 79 20 66 6f 72 20 53 52 54 5f 53 65 74 20 2a 2f  y for SRT_Set */
160b0 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b  .  u16 selFlags;
160c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
160d0 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73  ious SF_* values
160e0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
160f0 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
16100 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
16110 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
16120 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
16130 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
16140 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
16150 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
16160 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
16170 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
16180 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
16190 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
161a0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
161b0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
161c0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
161d0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
161e0 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
161f0 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
16200 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
16210 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
16220 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
16230 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
16240 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
16250 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
16260 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65  mpound */.  Sele
16270 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20  ct *pRightmost; 
16280 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74     /* Right-most
16290 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
162a0 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
162b0 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72  tement */.  Expr
162c0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
162d0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
162e0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
162f0 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
16300 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
16310 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
16320 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
16330 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
16340 65 64 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ed. */.  int iLi
16350 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
16360 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
16370 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
16380 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
16390 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  ers */.  int add
163a0 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20 20  rOpenEphm[3];   
163b0 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
163c0 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
163d0 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
163e0 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65 6c 65  /.  double nSele
163f0 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  ctRow;     /* Es
16400 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
16410 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
16420 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
16430 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
16440 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
16450 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
16460 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
16470 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a  elect Flag"..*/.
16480 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
16490 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30 30  nct        0x000
164a0 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
164b0 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
164c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
164d0 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78  solved        0x
164e0 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69 66  0002  /* Identif
164f0 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
16500 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
16510 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
16520 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
16530 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
16540 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
16550 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
16560 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30  Ephemeral   0x00
16570 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  08  /* Uses the 
16580 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
16590 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
165a0 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
165b0 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73 71     0x0010  /* sq
165c0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
165d0 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
165e0 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
165f0 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
16600 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f 4d   0x0020  /* FROM
16610 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
16620 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
16630 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
16640 65 53 6f 72 74 65 72 20 20 20 20 20 20 20 30 78  eSorter       0x
16650 30 30 34 30 20 20 2f 2a 20 53 6f 72 74 20 75 73  0040  /* Sort us
16660 69 6e 67 20 61 20 73 6f 72 74 65 72 20 2a 2f 0a  ing a sorter */.
16670 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
16680 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74 20  lts of a select 
16690 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
166a0 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
166b0 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52 54  ys.  The.** "SRT
166c0 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
166d0 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54 79  SELECT Result Ty
166e0 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  pe"..*/.#define 
166f0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
16700 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
16710 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
16720 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
16730 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
16740 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
16750 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
16760 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
16770 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
16780 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
16790 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
167a0 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
167b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
167c0 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
167d0 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
167e0 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
167f0 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  re */../* The OR
16800 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
16810 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
16820 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
16830 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
16840 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
16850 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
16860 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65 20  scard)..#define 
16870 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
16880 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   5  /* Output ea
16890 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
168a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
168b0 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20 20  Mem          6  
168c0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
168d0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
168e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
168f0 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20 20  Set          7  
16900 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
16910 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
16920 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
16930 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
16940 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   8  /* Store res
16950 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
16960 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
16970 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
16980 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20  RT_EphemTab     
16990 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  9  /* Create tra
169a0 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
169b0 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
169c0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
169d0 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
169e0 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  0  /* Generate a
169f0 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
16a00 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  esult */../*.** 
16a10 41 20 73 74 72 75 63 74 75 72 65 20 75 73 65 64  A structure used
16a20 20 74 6f 20 63 75 73 74 6f 6d 69 7a 65 20 74 68   to customize th
16a30 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 73 71  e behavior of sq
16a40 6c 69 74 65 33 53 65 6c 65 63 74 28 29 2e 20 53  lite3Select(). S
16a50 65 65 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 73 20 61  ee.** comments a
16a60 62 6f 76 65 20 73 71 6c 69 74 65 33 53 65 6c 65  bove sqlite3Sele
16a70 63 74 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  ct() for details
16a80 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
16a90 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
16aa0 65 6c 65 63 74 44 65 73 74 3b 0a 73 74 72 75 63  electDest;.struc
16ab0 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
16ac0 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
16ad0 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
16ae0 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
16af0 6c 74 73 20 2a 2f 0a 20 20 75 38 20 61 66 66 69  lts */.  u8 affi
16b00 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66  nity;      /* Af
16b10 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
16b20 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
16b30 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 6d 3b 20  */.  int iParm; 
16b40 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
16b50 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
16b60 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
16b70 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
16b80 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 2f   iMem;         /
16b90 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
16ba0 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
16bb0 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
16bc0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
16bd0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
16be0 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
16bf0 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  d */.};../*.** D
16c00 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
16c10 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
16c20 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
16c30 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
16c40 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65  REMENT .** table
16c50 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
16c60 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
16c70 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
16c80 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
16c90 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
16ca0 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
16cb0 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
16cc0 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
16cd0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
16ce0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
16cf0 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
16d00 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
16d10 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
16d20 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
16d30 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
16d40 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68  ts are down with
16d50 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
16d60 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
16d70 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
16d80 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
16d90 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
16da0 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
16db0 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
16dc0 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
16dd0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
16de0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
16df0 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
16e00 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
16e10 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
16e20 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
16e30 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
16e40 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
16e50 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
16e60 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
16e70 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
16e80 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16ea0 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
16eb0 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
16ec0 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
16ed0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
16ee0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
16ef0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
16f00 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
16f10 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
16f20 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
16f30 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
16f40 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
16f50 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
16f60 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
16f70 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
16f80 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
16f90 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
16fa0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
16fb0 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
16fc0 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a  ted for each .**
16fd0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
16fe0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
16ff0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
17000 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
17010 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
17020 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
17030 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
17040 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
17050 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
17060 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
17070 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
17080 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
17090 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
170a0 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
170b0 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
170c0 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
170d0 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
170e0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
170f0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
17100 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
17110 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
17120 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
17130 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
17140 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
17150 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
17160 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
17170 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
17180 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
17190 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
171a0 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
171b0 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
171c0 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
171d0 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
171e0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
171f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
17200 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
17210 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
17220 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
17230 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
17240 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
17250 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
17260 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
17270 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a  sult of INSERT .
17280 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
17290 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
172a0 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
172b0 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
172c0 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
172d0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
172e0 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
172f0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
17300 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
17310 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
17320 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
17330 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
17340 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
17350 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66   */.  int orconf
17360 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17370 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
17380 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20  LICT policy */. 
17390 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
173a0 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67  ogram;   /* Prog
173b0 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ram implementing
173c0 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66   pTrigger/orconf
173d0 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
173e0 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
173f0 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
17400 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
17410 63 63 65 73 73 65 64 20 2a 2f 0a 20 20 54 72 69  ccessed */.  Tri
17420 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
17430 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
17440 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
17450 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
17460 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
17470 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
17480 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
17490 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
174a0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
174b0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
174c0 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
174d0 66 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34  f sqlite3_uint64
174e0 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6c 73 65 0a   yDbMask;.#else.
174f0 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
17500 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
17510 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
17520 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74   SQL parser cont
17530 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20  ext.  A copy of 
17540 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
17550 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68  s passed through
17560 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61  .** the parser a
17570 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c  nd down into all
17580 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69   the parser acti
17590 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  on routine in or
175a0 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20  der to.** carry 
175b0 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69  around informati
175c0 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61  on that is globa
175d0 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20  l to the entire 
175e0 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  parse..**.** The
175f0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69   structure is di
17600 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70  vided into two p
17610 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20  arts.  When the 
17620 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a  parser and code.
17630 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c  ** generate call
17640 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75   themselves recu
17650 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72  rsively, the fir
17660 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  st part of the s
17670 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63  tructure.** is c
17680 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20  onstant but the 
17690 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72  second part is r
176a0 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69  eset at the begi
176b0 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66  nning and end of
176c0 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69  .** each recursi
176d0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54  on..**.** The nT
176e0 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61  ableLock and aTa
176f0 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65  bleLock variable
17700 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20  s are only used 
17710 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  if the shared-ca
17720 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20  che .** feature 
17730 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
17740 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
17750 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
17760 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
17770 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
17780 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
17790 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
177a0 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
177b0 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
177c0 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
177d0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
177e0 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
177f0 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
17800 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
17810 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
17820 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
17830 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
17840 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
17850 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
17860 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
17870 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
17880 75 74 69 6f 6e 20 2a 2f 0a 20 20 63 68 61 72 20  ution */.  char 
17890 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
178a0 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
178b0 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
178c0 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
178d0 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
178e0 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
178f0 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
17900 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
17910 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
17920 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
17930 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
17940 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
17950 38 20 6e 61 6d 65 43 6c 61 73 68 3b 20 20 20 20  8 nameClash;    
17960 20 20 20 20 2f 2a 20 41 20 70 65 72 6d 61 6e 65      /* A permane
17970 6e 74 20 74 61 62 6c 65 20 6e 61 6d 65 20 63 6c  nt table name cl
17980 61 73 68 65 73 20 77 69 74 68 20 74 65 6d 70 20  ashes with temp 
17990 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
179a0 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
179b0 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
179c0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
179d0 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
179e0 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
179f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
17a00 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
17a10 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
17a20 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
17a30 6f 72 20 2a 2f 0a 20 20 75 38 20 70 61 72 73 65  or */.  u8 parse
17a40 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
17a50 54 72 75 65 20 61 66 74 65 72 20 61 20 70 61 72  True after a par
17a60 73 69 6e 67 20 65 72 72 6f 72 2e 20 20 54 69 63  sing error.  Tic
17a70 6b 65 74 20 23 31 37 39 34 20 2a 2f 0a 20 20 75  ket #1794 */.  u
17a80 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
17a90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17aa0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
17ab0 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
17ac0 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  [] */.  u8 nTemp
17ad0 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a 20  InUse;       /* 
17ae0 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70 52  Number of aTempR
17af0 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20 63  eg[] currently c
17b00 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
17b10 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b  int aTempReg[8];
17b20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
17b30 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
17b40 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
17b50 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b    int nRangeReg;
17b60 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
17b70 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
17b80 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
17b90 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65  /.  int iRangeRe
17ba0 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  g;       /* Firs
17bb0 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65  t register in te
17bc0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
17bd0 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
17be0 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  nErr;           
17bf0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
17c00 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
17c10 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20  nt nTab;        
17c20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17c30 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f   previously allo
17c40 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f  cated VDBE curso
17c50 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  rs */.  int nMem
17c60 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17c70 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  Number of memory
17c80 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66   cells used so f
17c90 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74  ar */.  int nSet
17ca0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17cb0 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75  Number of sets u
17cc0 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
17cd0 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20  int ckBase;     
17ce0 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
17cf0 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75  ister of data du
17d00 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74  ring check const
17d10 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
17d20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20  iCacheLevel;    
17d30 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c   /* ColCache val
17d40 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68  id when aColCach
17d50 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63  e[].iLevel<=iCac
17d60 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  heLevel */.  int
17d70 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20   iCacheCnt;     
17d80 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65    /* Counter use
17d90 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43  d to generate aC
17da0 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61  olCache[].lru va
17db0 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6e 43 6f  lues */.  u8 nCo
17dc0 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f  lCache;        /
17dd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
17de0 69 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ies in the colum
17df0 6e 20 63 61 63 68 65 20 2a 2f 0a 20 20 75 38 20  n cache */.  u8 
17e00 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20  iColCache;      
17e10 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
17e20 6f 66 20 74 68 65 20 63 61 63 68 65 20 74 6f 20  of the cache to 
17e30 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 73 74 72  replace */.  str
17e40 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
17e50 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
17e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
17e70 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
17e80 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
17e90 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
17ea0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
17eb0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
17ec0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
17ed0 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
17ee0 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
17ef0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
17f00 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
17f10 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
17f20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
17f30 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
17f40 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
17f50 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
17f60 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
17f70 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
17f80 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
17f90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
17fa0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
17fb0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
17fc0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
17fd0 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
17fe0 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
17ff0 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
18000 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
18010 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 79 44  he entry */.  yD
18020 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
18030 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
18040 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
18050 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
18060 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
18070 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
18080 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
18090 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
180a0 61 73 65 73 20 2a 2f 0a 20 20 75 38 20 69 73 4d  ases */.  u8 isM
180b0 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
180c0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
180d0 65 6e 74 20 6d 61 79 20 61 66 66 65 63 74 2f 69  ent may affect/i
180e0 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
180f0 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
18100 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
18110 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
18120 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
18130 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
18140 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47  */.  int cookieG
18150 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64 64  oto;      /* Add
18160 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20  ress of OP_Goto 
18170 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66 69  to cookie verifi
18180 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f  er subroutine */
18190 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c  .  int cookieVal
181a0 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  ue[SQLITE_MAX_AT
181b0 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56  TACHED+2];  /* V
181c0 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73  alues of cookies
181d0 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 23 69   to verify */.#i
181e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
181f0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
18200 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
18210 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18220 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
18230 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
18240 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
18250 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
18260 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
18270 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
18280 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  de */.#endif.  i
18290 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20  nt regRowid;    
182a0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
182b0 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66  holding rowid of
182c0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e   CREATE TABLE en
182d0 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  try */.  int reg
182e0 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Root;         /*
182f0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
18300 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  g root page numb
18310 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63  er for new objec
18320 74 73 20 2a 2f 0a 20 20 41 75 74 6f 69 6e 63 49  ts */.  AutoincI
18330 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
18340 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
18350 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
18360 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e  counters */.  in
18370 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
18380 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
18390 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
183a0 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
183b0 6f 67 72 61 6d 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ogram */..  /* I
183c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
183d0 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69  while coding tri
183e0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a  gger programs. *
183f0 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
18400 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
18410 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
18420 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
18430 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
18440 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
18450 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
18460 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
18470 65 64 20 66 6f 72 20 2a 2f 0a 20 20 75 33 32 20  ed for */.  u32 
18480 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
18490 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
184a0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
184b0 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
184c0 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
184d0 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
184e0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
184f0 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
18500 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
18510 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
18520 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
18530 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
18540 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
18550 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
18560 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
18570 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
18580 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
18590 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
185a0 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
185b0 73 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 51  s */.  double nQ
185c0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 45  ueryLoop;   /* E
185d0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
185e0 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
185f0 20 61 20 71 75 65 72 79 20 2a 2f 0a 0a 20 20 2f   a query */..  /
18600 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
18610 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
18620 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
18630 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
18640 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
18650 63 68 20 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a  ch recursion */.
18660 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20  .  int nVar;    
18670 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18680 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
18690 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
186a0 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
186b0 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
186c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
186d0 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73   available slots
186e0 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20   in azVar[] */. 
186f0 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20   char **azVar;  
18700 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
18710 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61  s to names of pa
18720 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64  rameters */.  Vd
18730 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
18740 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
18750 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
18760 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
18770 2f 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  /.  int nAlias; 
18780 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18790 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65  er of aliased re
187a0 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73  sult set columns
187b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73   */.  int nAlias
187c0 41 6c 6c 6f 63 3b 20 20 20 20 20 2f 2a 20 4e 75  Alloc;     /* Nu
187d0 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 63 61 74 65  mber of allocate
187e0 64 20 73 6c 6f 74 73 20 66 6f 72 20 61 41 6c 69  d slots for aAli
187f0 61 73 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  as[] */.  int *a
18800 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 2f  Alias;         /
18810 2a 20 52 65 67 69 73 74 65 72 20 75 73 65 64 20  * Register used 
18820 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65 64 20  to hold aliased 
18830 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 65  result */.  u8 e
18840 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
18850 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
18860 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20  EXPLAIN flag is 
18870 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65  found on the que
18880 72 79 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  ry */.  Token sN
18890 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 2f 2a 20  ameToken;    /* 
188a0 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
188b0 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
188c0 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
188d0 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
188e0 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
188f0 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
18900 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
18910 61 69 6c 3b 20 20 20 2f 2a 20 41 6c 6c 20 53 51  ail;   /* All SQ
18920 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20  L text past the 
18930 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70  last semicolon p
18940 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65  arsed */.  Table
18950 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20   *pNewTable;    
18960 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67  /* A table being
18970 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
18980 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
18990 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54    Trigger *pNewT
189a0 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54  rigger;     /* T
189b0 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e  rigger under con
189c0 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41  struct by a CREA
189d0 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20  TE TRIGGER */.  
189e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
189f0 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65  hContext; /* The
18a00 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74   6th parameter t
18a10 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c  o db->xAuth call
18a20 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66  backs */.#ifndef
18a30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
18a40 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65  TUALTABLE.  Toke
18a50 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  n sArg;         
18a60 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
18a70 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
18a80 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
18a90 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
18aa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18ab0 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73  True if inside s
18ac0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
18ad0 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  tab() */.  int n
18ae0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
18af0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18b00 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
18b10 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 20 20 54  s to lock */.  T
18b20 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
18b30 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  k;        /* Poi
18b40 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20  nter to virtual 
18b50 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c  tables needing l
18b60 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ocking */.#endif
18b70 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
18b80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
18b90 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65  pression tree he
18ba0 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20  ight of current 
18bb0 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 20 20  sub-select */.  
18bc0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
18bd0 62 3b 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  b;      /* List 
18be0 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
18bf0 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
18c00 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
18c10 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
18c20 67 65 72 50 72 67 3b 20 20 20 20 2f 2a 20 4c 69  gerPrg;    /* Li
18c30 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
18c40 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a  ed triggers */..
18c50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18c60 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
18c70 74 20 69 53 65 6c 65 63 74 49 64 3b 0a 20 20 69  t iSelectId;.  i
18c80 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
18c90 3b 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 69 66  ;.#endif.};..#if
18ca0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18cb0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
18cc0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
18cd0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
18ce0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
18cf0 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
18d00 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
18d10 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
18d20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
18d30 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
18d40 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
18d50 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
18d60 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
18d70 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
18d80 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
18d90 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
18da0 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
18db0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
18dc0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
18dd0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
18de0 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
18df0 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
18e00 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
18e10 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18e30 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
18e40 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
18e50 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
18e60 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
18e70 20 4f 50 5f 49 6e 73 65 72 74 20 61 6e 64 20 4f   OP_Insert and O
18e80 50 5f 44 65 6c 65 74 65 0a 2a 2f 0a 23 64 65 66  P_Delete.*/.#def
18e90 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  ine OPFLAG_NCHAN
18ea0 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  GE       0x01   
18eb0 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
18ec0 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f  e db->nChange */
18ed0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
18ee0 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
18ef0 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  02    /* Set to 
18f00 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
18f10 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
18f20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
18f30 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
18f40 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
18f50 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
18f60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
18f70 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
18f80 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
18f90 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
18fa0 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
18fb0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
18fc0 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
18fd0 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
18fe0 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
18ff0 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
19000 66 69 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41  fine OPFLAG_CLEA
19010 52 43 41 43 48 45 20 20 20 20 30 78 32 30 20 20  RCACHE    0x20  
19020 20 20 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64    /* Clear pseud
19030 6f 2d 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e  o-table cache in
19040 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f   OP_Column */../
19050 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
19060 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
19070 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
19080 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
19090 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
190a0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20  struct Trigger. 
190b0 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
190c0 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
190d0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
190e0 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
190f0 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
19100 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
19110 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
19120 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
19130 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
19140 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62  the . *    datab
19150 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
19160 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
19170 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
19180 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
19190 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
191a0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
191b0 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
191c0 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
191d0 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
191e0 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
191f0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
19200 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
19210 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
19220 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
19230 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
19240 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
19250 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
19260 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
19270 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
19280 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
19290 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
192a0 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
192b0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
192c0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
192d0 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
192e0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
192f0 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
19300 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
19310 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
19320 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
19330 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
19340 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
19350 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
19380 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
19390 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
193a0 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
193b0 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
193c0 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
193e0 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
193f0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
19400 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
19410 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19430 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
19440 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
19450 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
19460 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
19470 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
19480 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
19490 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
194a0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
194b0 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
194c0 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
194d0 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
194e0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
194f0 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
19520 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
19530 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
19540 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
19550 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
19560 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
19570 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
19580 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
19590 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
195a0 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
195b0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
195c0 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
195d0 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
195e0 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
195f0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
19600 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
19610 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
19620 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
19630 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
19640 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
19650 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
19660 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
19670 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
19680 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
19690 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
196a0 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a  termine which. .
196b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
196c0 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
196d0 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
196e0 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
196f0 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
19700 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
19710 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
19720 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
19730 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
19740 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
19750 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
19760 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
19770 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
19780 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
19790 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
197a0 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
197b0 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
197c0 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
197d0 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
197e0 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20  r-program. . *. 
197f0 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
19800 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
19810 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
19820 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
19830 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
19840 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
19850 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
19860 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
19870 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
19880 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69  f the . * associ
19890 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
198a0 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
198b0 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
198c0 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
198d0 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
198e0 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
198f0 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
19900 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20   * . * The "op" 
19910 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73  member indicates
19920 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
19930 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e   a "DELETE", "IN
19940 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20  SERT", "UPDATE" 
19950 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73  or. * "SELECT" s
19960 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65  tatement. The me
19970 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74  anings of the ot
19980 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64  her members is d
19990 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
199a0 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f   . * value of "o
199b0 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
199c0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
199d0 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
199e0 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
199f0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
19a00 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
19a10 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
19a20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
19a30 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
19a40 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
19a50 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
19a60 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
19a70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
19a80 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
19a90 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
19aa0 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
19ab0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
19ac0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
19ad0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
19ae0 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
19af0 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
19b00 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
19b10 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
19b20 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
19b30 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
19b40 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
19b50 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
19b60 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
19b70 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
19b80 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
19b90 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
19ba0 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
19bb0 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
19bc0 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .. . *          
19bd0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
19be0 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
19bf0 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
19c00 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
19c10 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
19c20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
19c30 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
19c40 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
19c50 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
19c60 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
19c70 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65   the table to de
19c80 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57  lete from.. * pW
19c90 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
19ca0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
19cb0 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
19cc0 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
19cd0 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
19ce0 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
19cf0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20  se NULL.. * . * 
19d00 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
19d10 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d  ). * target    -
19d20 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e  > A token holdin
19d30 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d  g the quoted nam
19d40 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
19d50 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66  o update rows of
19d60 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
19d70 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
19d80 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
19d90 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
19da0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
19db0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
19dc0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
19dd0 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
19de0 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
19df0 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
19e00 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
19e10 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19e30 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
19e40 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
19e50 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
19e60 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
19e70 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
19e80 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20  . * . */.struct 
19e90 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
19ea0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
19eb0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
19ec0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
19ed0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
19ee0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
19ef0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
19f00 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
19f10 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
19f20 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
19f30 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
19f40 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
19f50 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
19f60 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
19f70 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
19f80 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53   statment or RHS
19f90 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
19fa0 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  .. SELECT ... */
19fb0 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b  .  Token target;
19fc0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65          /* Targe
19fd0 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
19fe0 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
19ff0 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
1a000 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
1a010 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1a020 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
1a030 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
1a040 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
1a050 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
1a060 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
1a070 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 66   VALUES clause f
1a080 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 49  or INSERT */.  I
1a090 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
1a0a0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
1a0b0 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
1a0c0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1a0d0 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1a0e0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73   in the link-lis
1a0f0 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  t */.  TriggerSt
1a100 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c  ep *pLast;  /* L
1a110 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ast element in l
1a120 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20  ink-list. Valid 
1a130 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c  for 1st elem onl
1a140 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
1a150 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1a160 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1a170 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
1a180 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
1a190 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
1a1a0 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
1a1b0 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
1a1c0 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
1a1d0 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
1a1e0 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64  icit.  .*/.typed
1a1f0 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
1a200 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
1a210 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
1a220 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1a230 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
1a240 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
1a250 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
1a260 6e 20 68 65 72 65 20 2a 2f 0a 20 20 63 6f 6e 73  n here */.  cons
1a270 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
1a280 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
1a290 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
1a2a0 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
1a2b0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
1a2c0 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
1a2d0 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
1a2e0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1a2f0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1a300 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
1a310 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
1a320 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
1a330 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1a340 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1a350 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
1a360 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
1a370 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
1a380 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
1a390 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
1a3a0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
1a3b0 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
1a3c0 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
1a3d0 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
1a3e0 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
1a3f0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1a400 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
1a410 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
1a420 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
1a430 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
1a440 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
1a450 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c     /* A base all
1a460 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72  ocation.  Not fr
1a470 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20  om malloc. */.  
1a480 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
1a490 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
1a4a0 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
1a4b0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43  far */.  int  nC
1a4c0 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
1a4d0 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
1a4e0 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
1a4f0 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20    int  nAlloc;  
1a500 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
1a510 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
1a520 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
1a530 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20    int  mxAlloc; 
1a540 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1a550 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67  m allowed string
1a560 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20   length */.  u8 
1a570 20 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20    mallocFailed; 
1a580 20 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75    /* Becomes tru
1a590 65 20 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20  e if any memory 
1a5a0 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73  allocation fails
1a5b0 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61   */.  u8   useMa
1a5c0 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a  lloc;      /* 0:
1a5d0 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74   none,  1: sqlit
1a5e0 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20  e3DbMalloc,  2: 
1a5f0 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a  sqlite3_malloc *
1a600 2f 0a 20 20 75 38 20 20 20 74 6f 6f 42 69 67 3b  /.  u8   tooBig;
1a610 20 20 20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f           /* Beco
1a620 6d 65 73 20 74 72 75 65 20 69 66 20 73 74 72 69  mes true if stri
1a630 6e 67 20 73 69 7a 65 20 65 78 63 65 65 64 73 20  ng size exceeds 
1a640 6c 69 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  limits */.};../*
1a650 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
1a660 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1a670 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
1a680 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
1a690 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
1a6a0 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
1a6b0 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
1a6c0 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
1a6d0 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
1a6e0 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
1a6f0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1a700 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
1a710 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
1a720 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  zed */.  int iDb
1a730 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a740 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
1a750 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
1a760 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
1a770 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
1a780 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
1a790 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
1a7a0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
1a7b0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1a7c0 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
1a7d0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1a7e0 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
1a7f0 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
1a800 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
1a810 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
1a820 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
1a830 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
1a840 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
1a850 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
1a860 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
1a870 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
1a880 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
1a890 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1a8c0 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
1a8d0 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
1a8e0 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
1a8f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1a900 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
1a910 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1a920 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a940 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1a950 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
1a960 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
1a970 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
1a980 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1a990 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
1a9a0 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
1a9b0 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
1a9c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a9d0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1a9e0 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
1a9f0 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73  /.  int szLookas
1aa00 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
1aa10 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1aa20 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
1aa30 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20  r size */.  int 
1aa40 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  nLookaside;     
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aa60 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
1aa70 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20  de buffer count 
1aa80 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
1aa90 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
1aaa0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
1aab0 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
1aac0 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
1aad0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
1aae0 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
1aaf0 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
1ab00 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
1ab10 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
1ab20 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 20  _pcache_methods 
1ab30 70 63 61 63 68 65 3b 20 20 20 20 2f 2a 20 4c 6f  pcache;    /* Lo
1ab40 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
1ab50 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
1ab60 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
1ab90 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
1aba0 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abc0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
1abd0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
1abe0 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
1abf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
1ac00 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
1ac10 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
1ac20 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63  .  void *pScratc
1ac30 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1ac40 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20       /* Scratch 
1ac50 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
1ac60 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  szScratch;      
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ac80 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63   Size of each sc
1ac90 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a  ratch buffer */.
1aca0 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20    int nScratch; 
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1acd0 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73   scratch buffers
1ace0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
1acf0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1ad00 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
1ad10 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
1ad20 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad40 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
1ad50 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
1ad60 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
1ad70 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1ad80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ad90 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
1ada0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
1adb0 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1add0 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
1ade0 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
1adf0 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
1ae00 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
1ae10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
1ae20 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
1ae30 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
1ae40 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
1ae50 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
1ae60 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
1ae70 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
1ae80 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
1ae90 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
1aea0 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
1aeb0 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
1aec0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1aed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1aee0 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
1aef0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
1af00 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
1af10 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
1af20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1af30 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
1af40 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
1af50 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
1af60 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
1af70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1af80 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
1af90 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
1afa0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
1afb0 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
1afc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1afd0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
1afe0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1aff0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
1b000 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1b010 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1b020 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1b030 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c  ialized */.  sql
1b040 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
1b050 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
1b060 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
1b070 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
1b080 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ze() */.  int nR
1b090 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b0b0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
1b0c0 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
1b0d0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
1b0e0 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
1b0f0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
1b100 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
1b110 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
1b120 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1b130 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
1b140 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
1b150 6f 67 28 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c  og() */.  int bL
1b160 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
1b170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b180 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
1b190 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
1b1a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  .};../*.** Conte
1b1b0 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
1b1c0 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
1b1d0 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
1b1e0 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
1b1f0 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61  .  int (*xExprCa
1b200 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1b210 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20   Expr*);     /* 
1b220 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70  Callback for exp
1b230 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
1b240 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  t (*xSelectCallb
1b250 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ack)(Walker*,Sel
1b260 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62  ect*);  /* Callb
1b270 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
1b280 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
1b290 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b2b0 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
1b2c0 2e 20 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  .  */.  union { 
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2f0 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20    /* Extra data 
1b300 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  for callback */.
1b310 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20      NameContext 
1b320 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20  *pNC;           
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b340 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
1b350 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20   */.    int i;  
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
1b390 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  lue */.  } u;.};
1b3a0 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63  ../* Forward dec
1b3b0 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74  larations */.int
1b3c0 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
1b3d0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
1b3e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1b3f0 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72  kExprList(Walker
1b400 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
1b410 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1b420 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65  lect(Walker*, Se
1b430 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
1b440 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70  te3WalkSelectExp
1b450 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  r(Walker*, Selec
1b460 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1b470 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57  WalkSelectFrom(W
1b480 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1b490 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
1b4a0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61  code from the pa
1b4b0 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67  rse-tree walking
1b4c0 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20   primitives and 
1b4d0 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  their.** callbac
1b4e0 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ks..*/.#define W
1b4f0 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30  RC_Continue    0
1b500 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64     /* Continue d
1b510 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65  own into childre
1b520 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  n */.#define WRC
1b530 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20  _Prune       1  
1b540 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65   /* Omit childre
1b550 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77  n but continue w
1b560 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20  alking siblings 
1b570 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41  */.#define WRC_A
1b580 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f  bort       2   /
1b590 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72  * Abandon the tr
1b5a0 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a  ee walk */../*.*
1b5b0 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
1b5c0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
1b5d0 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
1b5e0 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
1b5f0 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
1b600 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
1b610 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
1b620 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
1b630 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
1b640 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
1b650 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1b670 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
1b680 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6a0 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
1b6b0 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
1b6c0 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
1b6d0 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
1b6e0 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 20 5c 0a 7d 0a 0a 2f            \.}../
1b720 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
1b730 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
1b740 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
1b750 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
1b760 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
1b770 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
1b780 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
1b790 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
1b7a0 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
1b7b0 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
1b7c0 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
1b7d0 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
1b7e0 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
1b7f0 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
1b800 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
1b810 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
1b820 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
1b830 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
1b840 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
1b850 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
1b860 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
1b870 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
1b880 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
1b890 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1b8a0 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
1b8b0 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
1b8c0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
1b8d0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
1b8e0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
1b8f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
1b900 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
1b910 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
1b920 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
1b930 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
1b940 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
1b950 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
1b960 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20  _).../*.** FTS4 
1b970 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74  is really an ext
1b980 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e  ension for FTS3.
1b990 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20    It is enabled 
1b9a0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c  using the.** SQL
1b9b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
1b9c0 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61  macro.  But to a
1b9d0 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  void confusion w
1b9e0 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68  e also all.** th
1b9f0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1ba00 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65  FTS4 macro to se
1ba10 72 76 65 20 61 73 20 61 6e 20 61 6c 69 73 73 65  rve as an alisse
1ba20 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42   for SQLITE_ENAB
1ba30 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20  LE_FTS3..*/.#if 
1ba40 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1ba50 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21  NABLE_FTS4) && !
1ba60 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1ba70 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65  NABLE_FTS3).# de
1ba80 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
1ba90 4c 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a  LE_FTS3.#endif..
1baa0 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e  /*.** The ctype.
1bab0 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64  h header is need
1bac0 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49  ed for non-ASCII
1bad0 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73   systems.  It is
1bae0 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20   also.** needed 
1baf0 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53  by FTS3 when FTS
1bb00 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  3 is included in
1bb10 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
1bb20 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
1bb30 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29  ed(SQLITE_ASCII)
1bb40 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
1bb50 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1bb60 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65  _FTS3) && define
1bb70 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  d(SQLITE_AMALGAM
1bb80 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64  ATION)).# includ
1bb90 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64  e <ctype.h>.#end
1bba0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
1bbb0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d  llowing macros m
1bbc0 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72  imic the standar
1bbd0 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  d library functi
1bbe0 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a  ons toupper(),.*
1bbf0 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61  * isspace(), isa
1bc00 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28  lnum(), isdigit(
1bc10 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29  ) and isxdigit()
1bc20 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
1bc30 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65  The.** sqlite ve
1bc40 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b  rsions only work
1bc50 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
1bc60 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  cters, regardles
1bc70 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a  s of locale..*/.
1bc80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53  #ifdef SQLITE_AS
1bc90 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  CII.# define sql
1bca0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1bcb0 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74  ((x)&~(sqlite3Ct
1bcc0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
1bcd0 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29   char)(x)]&0x20)
1bce0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1bcf0 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28  e3Isspace(x)   (
1bd00 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1bd10 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1bd20 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69  x)]&0x01).# defi
1bd30 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
1bd40 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  m(x)   (sqlite3C
1bd50 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1bd60 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36  d char)(x)]&0x06
1bd70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1bd80 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28  e3Isalpha(x)   (
1bd90 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1bda0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1bdb0 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69  x)]&0x02).# defi
1bdc0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
1bdd0 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  t(x)   (sqlite3C
1bde0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1bdf0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34  d char)(x)]&0x04
1be00 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1be10 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28  e3Isxdigit(x)  (
1be20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
1be30 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1be40 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69  x)]&0x08).# defi
1be50 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
1be60 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55  r(x)   (sqlite3U
1be70 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73  pperToLower[(uns
1be80 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29  igned char)(x)])
1be90 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1bea0 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
1beb0 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
1bec0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1bed0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bee0 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
1bef0 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
1bf00 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1bf10 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
1bf20 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
1bf30 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bf40 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1bf50 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
1bf60 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
1bf70 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1bf80 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
1bf90 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
1bfa0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1bfb0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1bfc0 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
1bfd0 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
1bfe0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1bff0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
1c000 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
1c010 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
1c020 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  r)(x)).#endif../
1c030 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
1c040 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
1c050 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s.*/.int sqlite3
1c060 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68  StrICmp(const ch
1c070 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
1c080 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
1c090 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
1c0a0 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73  har*);.#define s
1c0b0 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73  qlite3StrNICmp s
1c0c0 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a  qlite3_strnicmp.
1c0d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
1c0e0 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f  ocInit(void);.vo
1c0f0 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  id sqlite3Malloc
1c100 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  End(void);.void 
1c110 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69  *sqlite3Malloc(i
1c120 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1c130 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74  e3MallocZero(int
1c140 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1c150 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c  DbMallocZero(sql
1c160 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  ite3*, int);.voi
1c170 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  d *sqlite3DbMall
1c180 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20  ocRaw(sqlite3*, 
1c190 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
1c1a0 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
1c1b0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1c1c0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1c1d0 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
1c1e0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1c1f0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1c200 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
1c210 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1c220 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
1c230 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
1c240 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  void *, int);.vo
1c250 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
1c260 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
1c270 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f  void *, int);.vo
1c280 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
1c290 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1c2a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
1c2b0 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b  llocSize(void*);
1c2c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61  .int sqlite3DbMa
1c2d0 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33  llocSize(sqlite3
1c2e0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  *, void*);.void 
1c2f0 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d  *sqlite3ScratchM
1c300 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1c310 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46   sqlite3ScratchF
1c320 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
1c330 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
1c340 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
1c350 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
1c360 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
1c370 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
1c380 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1c390 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
1c3a0 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
1c3b0 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
1c3c0 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid));.int sqlit
1c3d0 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c  e3HeapNearlyFull
1c3e0 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f  (void);../*.** O
1c3f0 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61  n systems with a
1c400 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65  mple stack space
1c410 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72   and that suppor
1c420 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65  t alloca(), make
1c430 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63  .** use of alloc
1c440 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70  a() to obtain sp
1c450 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75  ace for large au
1c460 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e  tomatic objects.
1c470 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a    By default,.**
1c480 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72   obtain space fr
1c490 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a  om malloc()..**.
1c4a0 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20  ** The alloca() 
1c4b0 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65  routine never re
1c4c0 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69  turns NULL.  Thi
1c4d0 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64  s will cause cod
1c4e0 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20  e paths.** that 
1c4f0 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65  deal with sqlite
1c500 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61  3StackAlloc() fa
1c510 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72  ilures to be unr
1c520 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66  eachable..*/.#if
1c530 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41  def SQLITE_USE_A
1c540 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73  LLOCA.# define s
1c550 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1c560 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63  Raw(D,N)   alloc
1c570 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a(N).# define sq
1c580 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
1c590 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74  ero(D,N)  memset
1c5a0 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e  (alloca(N), 0, N
1c5b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1c5c0 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
1c5d0 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20         .#else.# 
1c5e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1c5f0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
1c600 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
1c610 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
1c620 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1c630 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
1c640 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
1c650 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
1c660 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
1c670 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
1c680 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
1c690 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1c6a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1c6b0 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
1c6c0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
1c6d0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
1c6e0 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
1c6f0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1c700 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
1c710 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
1c720 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
1c730 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
1c740 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
1c750 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1c760 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
1c770 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
1c780 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
1c790 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
1c7a0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
1c7b0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
1c7c0 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
1c7d0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
1c7e0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
1c7f0 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
1c800 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
1c810 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
1c820 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
1c830 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
1c840 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
1c850 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69  te3StatusValue(i
1c860 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1c870 33 53 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20  3StatusAdd(int, 
1c880 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1c890 65 33 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c  e3StatusSet(int,
1c8a0 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20   int);..#ifndef 
1c8b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
1c8c0 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74  TING_POINT.  int
1c8d0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f   sqlite3IsNaN(do
1c8e0 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  uble);.#else.# d
1c8f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
1c900 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a  aN(X)  0.#endif.
1c910 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
1c920 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
1c930 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
1c940 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66  *, va_list);.#if
1c950 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1c960 5f 54 52 41 43 45 0a 76 6f 69 64 20 73 71 6c 69  _TRACE.void sqli
1c970 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
1c980 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  cum*, const char
1c990 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
1c9a0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72  char *sqlite3MPr
1c9b0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
1c9c0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1c9d0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
1c9e0 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
1c9f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
1ca00 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c  list);.char *sql
1ca10 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c  ite3MAppendf(sql
1ca20 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73  ite3*,char*,cons
1ca30 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69  t char*,...);.#i
1ca40 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1ca50 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65  _TEST) || define
1ca60 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
1ca70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
1ca80 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
1ca90 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
1caa0 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
1cab0 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
1cac0 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
1cad0 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
1cae0 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
1caf0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
1cb00 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
1cb10 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
1cb20 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
1cb30 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
1cb40 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1cb50 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
1cb60 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
1cb70 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
1cb80 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
1cb90 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
1cba0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1cbb0 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
1cbc0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1cbd0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
1cbe0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
1cbf0 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
1cc00 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
1cc10 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
1cc20 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
1cc30 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
1cc40 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1cc50 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
1cc60 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
1cc70 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
1cc80 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
1cc90 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
1cca0 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28  qlite3ExprAlloc(
1ccb0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
1ccc0 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  st Token*,int);.
1ccd0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1cce0 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
1ccf0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
1cd00 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74  d sqlite3ExprAtt
1cd10 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69  achSubtrees(sqli
1cd20 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  te3*,Expr*,Expr*
1cd30 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73  ,Expr*);.Expr *s
1cd40 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73  qlite3PExpr(Pars
1cd50 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20  e*, int, Expr*, 
1cd60 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
1cd70 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  en*);.Expr *sqli
1cd80 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
1cd90 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
1cda0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1cdb0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
1cdc0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
1cdd0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
1cde0 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
1cdf0 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
1ce00 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1ce10 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
1ce20 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
1ce30 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
1ce40 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
1ce50 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
1ce60 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
1ce70 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
1ce80 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70  tName(Parse*,Exp
1ce90 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  rList*,Token*,in
1cea0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ceb0 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28  ExprListSetSpan(
1cec0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1ced0 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
1cee0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
1cef0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1cf00 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
1cf10 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
1cf20 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b  lite3*, char**);
1cf30 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
1cf40 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20  Callback(void*, 
1cf50 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61  int, char**, cha
1cf60 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
1cf70 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c  e3Pragma(Parse*,
1cf80 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
1cf90 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
1cfa0 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
1cfb0 72 6e 61 6c 53 63 68 65 6d 61 28 73 71 6c 69 74  rnalSchema(sqlit
1cfc0 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  e3*, int);.void 
1cfd0 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73  sqlite3BeginPars
1cfe0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
1cff0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
1d000 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
1d010 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c  (sqlite3*);.Tabl
1d020 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
1d030 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
1d040 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
1d050 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
1d060 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
1d070 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1d080 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
1d090 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
1d0a0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
1d0b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d0c0 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
1d0d0 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
1d0e0 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
1d0f0 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
1d100 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1d110 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
1d120 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
1d130 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1d140 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
1d150 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
1d160 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
1d170 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
1d180 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f  mnType(Parse*,To
1d190 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1d1a0 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
1d1b0 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
1d1c0 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
1d1d0 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
1d1e0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
1d1f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
1d200 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
1d210 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65  ken*,Token*,Sele
1d220 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1d230 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
1d240 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
1d250 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
1d260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d270 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
1d280 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
1d290 2a 29 3b 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  *);..Bitvec *sql
1d2a0 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
1d2b0 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
1d2c0 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
1d2d0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
1d2e0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
1d2f0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
1d300 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
1d310 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
1d320 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
1d330 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
1d340 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
1d350 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
1d360 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
1d370 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
1d380 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69  vecBuiltinTest(i
1d390 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65  nt,int*);..RowSe
1d3a0 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
1d3b0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
1d3c0 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
1d3d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1d3e0 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
1d3f0 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
1d400 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
1d410 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
1d420 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
1d430 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 75 38  Test(RowSet*, u8
1d440 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69   iBatch, i64);.i
1d450 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
1d460 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  Next(RowSet*, i6
1d470 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  4*);..void sqlit
1d480 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72  e3CreateView(Par
1d490 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1d4a0 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a  *,Token*,Select*
1d4b0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
1d4c0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1d4d0 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
1d4e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1d4f0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
1d500 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
1d510 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
1d520 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
1d530 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1d540 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
1d550 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
1d560 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
1d570 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
1d580 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1d590 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1d5a0 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
1d5b0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
1d5c0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
1d5d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
1d5e0 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
1d5f0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
1d600 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1d610 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
1d620 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
1d630 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
1d640 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
1d650 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
1d660 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
1d670 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
1d680 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1d690 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
1d6a0 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
1d6b0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
1d6c0 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
1d6d0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
1d6e0 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
1d6f0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
1d700 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64  st*, Select*, Id
1d710 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
1d720 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
1d730 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
1d740 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2c 69  ,void*,int,int,i
1d750 6e 74 2a 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  nt*,int*,int*);.
1d760 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
1d770 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
1d780 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
1d790 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
1d7a0 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
1d7b0 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
1d7c0 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
1d7d0 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
1d7e0 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
1d7f0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
1d800 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1d810 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
1d820 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1d830 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
1d840 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
1d850 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
1d860 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
1d870 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
1d880 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8b0 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
1d8c0 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
1d8d0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1d8e0 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
1d8f0 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
1d900 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
1d910 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
1d920 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
1d930 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
1d940 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
1d950 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
1d960 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
1d970 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
1d980 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
1d990 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
1d9a0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
1d9b0 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
1d9c0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1d9d0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
1d9e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
1d9f0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
1da00 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
1da10 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64  sqlite3CreateInd
1da20 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ex(Parse*,Token*
1da30 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a  ,Token*,SrcList*
1da40 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54  ,ExprList*,int,T
1da50 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1da70 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  oken*, int, int)
1da80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
1da90 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
1daa0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
1dab0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
1dac0 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
1dad0 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
1dae0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
1daf0 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
1db00 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
1db10 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
1db20 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
1db40 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  pr*,ExprList*,in
1db50 74 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  t,Expr*,Expr*);.
1db60 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
1db70 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  ctDelete(sqlite3
1db80 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  *, Select*);.Tab
1db90 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  le *sqlite3SrcLi
1dba0 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c  stLookup(Parse*,
1dbb0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
1dbc0 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c  sqlite3IsReadOnl
1dbd0 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  y(Parse*, Table*
1dbe0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1dbf0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61  ite3OpenTable(Pa
1dc00 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  rse*, int iCur, 
1dc10 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c  int iDb, Table*,
1dc20 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e   int);.#if defin
1dc30 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1dc40 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
1dc50 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  IMIT) && !define
1dc60 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  d(SQLITE_OMIT_SU
1dc70 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71  BQUERY).Expr *sq
1dc80 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28  lite3LimitWhere(
1dc90 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
1dca0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
1dcb0 4c 69 73 74 20 2a 2c 20 45 78 70 72 20 2a 2c 20  List *, Expr *, 
1dcc0 45 78 70 72 20 2a 2c 20 63 68 61 72 20 2a 29 3b  Expr *, char *);
1dcd0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
1dce0 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
1dcf0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
1dd00 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1dd10 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
1dd20 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
1dd30 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
1dd40 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
1dd50 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
1dd60 69 6e 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  in(Parse*, SrcLi
1dd70 73 74 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  st*, Expr*, Expr
1dd80 4c 69 73 74 2a 2a 2c 45 78 70 72 4c 69 73 74 2a  List**,ExprList*
1dd90 2c 75 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u16);.void sqli
1dda0 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
1ddb0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
1ddc0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
1ddd0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
1dde0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1ddf0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1de00 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
1de10 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a  umnOfTable(Vdbe*
1de20 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1de30 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1de40 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
1de50 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
1de60 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1de70 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43  sqlite3ExprCodeC
1de80 6f 70 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  opy(Parse*, int,
1de90 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1dea0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1deb0 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69  eStore(Parse*, i
1dec0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1ded0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1dee0 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29  achePush(Parse*)
1def0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1df00 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65  prCachePop(Parse
1df10 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1df20 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65  lite3ExprCacheRe
1df30 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  move(Parse*, int
1df40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1df50 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
1df60 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  ar(Parse*);.void
1df70 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1df80 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  eAffinityChange(
1df90 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1dfa0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1dfb0 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
1dfc0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
1dfd0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
1dfe0 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
1dff0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
1e000 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
1e010 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
1e020 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1e030 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
1e040 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
1e050 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
1e060 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
1e070 6e 73 74 61 6e 74 73 28 50 61 72 73 65 2a 2c 20  nstants(Parse*, 
1e080 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1e090 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c  te3ExprCodeExprL
1e0a0 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ist(Parse*, Expr
1e0b0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
1e0c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1e0d0 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c  prIfTrue(Parse*,
1e0e0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
1e0f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e100 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65  xprIfFalse(Parse
1e110 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
1e120 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  nt);.Table *sqli
1e130 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c  te3FindTable(sql
1e140 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1e150 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
1e160 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
1e170 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
1e180 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e  *,int isView,con
1e190 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1e1a0 63 68 61 72 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  char*);.Index *s
1e1b0 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
1e1c0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1e1d0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
1e1e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e1f0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
1e200 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
1e210 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
1e220 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
1e230 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
1e240 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1e250 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
1e260 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
1e270 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
1e280 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
1e290 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a  r**, sqlite3*);.
1e2a0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d  char *sqlite3Nam
1e2b0 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74  eFromToken(sqlit
1e2c0 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
1e2d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
1e2e0 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72  pare(Expr*, Expr
1e2f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1e300 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
1e310 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
1e320 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1e330 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
1e340 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
1e350 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
1e360 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
1e370 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
1e380 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
1e390 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
1e3a0 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
1e3b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e3c0 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
1e3d0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
1e3e0 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
1e3f0 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
1e400 6c 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74  lite3PrngResetSt
1e410 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
1e420 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1e430 6c 6c 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ll(sqlite3*);.vo
1e440 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
1e450 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65  rifySchema(Parse
1e460 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1e470 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e  lite3CodeVerifyN
1e480 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65  amedSchema(Parse
1e490 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
1e4a0 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  Db);.void sqlite
1e4b0 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f  3BeginTransactio
1e4c0 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  n(Parse*, int);.
1e4d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
1e4e0 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  itTransaction(Pa
1e4f0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1e500 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73  te3RollbackTrans
1e510 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
1e520 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65  void sqlite3Save
1e530 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  point(Parse*, in
1e540 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  t, Token*);.void
1e550 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
1e560 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20  epoints(sqlite3 
1e570 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1e580 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
1e590 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1e5a0 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
1e5b0 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
1e5c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
1e5d0 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
1e5e0 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  on(Expr*);.int s
1e5f0 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
1e600 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
1e610 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1e620 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
1e630 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1e640 6c 69 74 65 33 45 78 70 72 43 6f 64 65 49 73 4e  lite3ExprCodeIsN
1e650 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a 2c 20 63  ullJump(Vdbe*, c
1e660 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69 6e 74 2c  onst Expr*, int,
1e670 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1e680 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
1e690 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
1e6a0 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
1e6b0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
1e6c0 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
1e6d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
1e6e0 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50  erateRowDelete(P
1e6f0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1e700 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 54 72  nt, int, int, Tr
1e710 69 67 67 65 72 20 2a 2c 20 69 6e 74 29 3b 0a 76  igger *, int);.v
1e720 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1e730 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
1e740 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
1e750 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e  , int, int*);.in
1e760 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
1e770 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
1e780 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
1e790 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1e7a0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
1e7b0 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
1e7c0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
1e7d0 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2a 2c             int*,
1e800 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
1e810 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
1e820 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
1e830 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  tion(Parse*, Tab
1e840 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
1e850 6e 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  nt*, int, int, i
1e860 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1e870 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
1e880 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
1e890 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
1e8a0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1e8b0 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
1e8c0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
1e8d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
1e8e0 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
1e8f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1e900 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
1e910 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
1e920 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
1e930 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  *, int, char*, i
1e940 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
1e950 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
1e960 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
1e970 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
1e980 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
1e990 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
1e9a0 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
1e9b0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
1e9c0 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
1e9d0 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
1e9e0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
1e9f0 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
1ea00 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
1ea10 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
1ea20 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
1ea30 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ea40 46 75 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75  FuncDefInsert(Fu
1ea50 6e 63 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63  ncDefHash*, Func
1ea60 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  Def*);.FuncDef *
1ea70 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
1ea80 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ion(sqlite3*,con
1ea90 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74  st char*,int,int
1eaa0 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ,u8,int);.void s
1eab0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
1eac0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73  iltinFunctions(s
1ead0 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
1eae0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61  qlite3RegisterDa
1eaf0 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28  teTimeFunctions(
1eb00 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
1eb10 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61  te3RegisterGloba
1eb20 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  lFunctions(void)
1eb30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
1eb40 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74  etyCheckOk(sqlit
1eb50 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
1eb60 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b  3SafetyCheckSick
1eb70 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  OrOk(sqlite3*);.
1eb80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e  void sqlite3Chan
1eb90 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c  geCookie(Parse*,
1eba0 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66   int);..#if !def
1ebb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1ebc0 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e  _VIEW) && !defin
1ebd0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
1ebe0 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c  RIGGER).void sql
1ebf0 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56  ite3MaterializeV
1ec00 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  iew(Parse*, Tabl
1ec10 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1ec20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
1ec30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
1ec40 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69  GGER.  void sqli
1ec50 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28  te3BeginTrigger(
1ec60 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54  Parse*, Token*,T
1ec70 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64  oken*,int,int,Id
1ec80 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a  List*,SrcList*,.
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eca0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
1ecb0 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ,int, int);.  vo
1ecc0 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
1ecd0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
1ece0 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f  TriggerStep*, To
1ecf0 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ken*);.  void sq
1ed00 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
1ed10 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1ed20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
1ed30 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
1ed40 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72  erPtr(Parse*, Tr
1ed50 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67  igger*);.  Trigg
1ed60 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
1ed70 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a  ersExist(Parse *
1ed80 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45  , Table*, int, E
1ed90 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70  xprList*, int *p
1eda0 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72  Mask);.  Trigger
1edb0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
1edc0 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  List(Parse *, Ta
1edd0 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  ble *);.  void s
1ede0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
1edf0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
1ee00 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70  gger *, int, Exp
1ee10 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62  rList*, int, Tab
1ee20 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  le *,.          
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee40 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29    int, int, int)
1ee50 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1ee60 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
1ee70 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72  rect(Parse *, Tr
1ee80 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a  igger *, Table *
1ee90 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1eea0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56  ;.  void sqliteV
1eeb0 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73  iewTriggers(Pars
1eec0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
1eed0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
1eee0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1eef0 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53  e3DeleteTriggerS
1ef00 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  tep(sqlite3*, Tr
1ef10 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54  iggerStep*);.  T
1ef20 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
1ef30 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74  te3TriggerSelect
1ef40 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  Step(sqlite3*,Se
1ef50 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65  lect*);.  Trigge
1ef60 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
1ef70 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
1ef80 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
1ef90 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20   IdList*,.      
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efc0 20 20 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65    ExprList*,Sele
1efd0 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67  ct*,u8);.  Trigg
1efe0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
1eff0 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70  riggerUpdateStep
1f000 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
1f010 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  ,ExprList*, Expr
1f020 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65  *, u8);.  Trigge
1f030 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
1f040 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28  iggerDeleteStep(
1f050 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
1f060 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20   Expr*);.  void 
1f070 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
1f080 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54  gger(sqlite3*, T
1f090 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64  rigger*);.  void
1f0a0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
1f0b0 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  dDeleteTrigger(s
1f0c0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
1f0d0 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20  t char*);.  u32 
1f0e0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
1f0f0 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69  lmask(Parse*,Tri
1f100 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  gger*,ExprList*,
1f110 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69  int,int,Table*,i
1f120 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71  nt);.# define sq
1f130 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
1f140 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
1f150 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f  level ? (p)->pTo
1f160 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65  plevel : (p)).#e
1f170 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1f180 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
1f190 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
1f1a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
1f1b0 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
1f1c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f1d0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
1f1e0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
1f1f0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
1f200 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
1f210 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
1f220 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
1f230 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
1f240 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
1f250 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
1f260 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
1f270 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
1f280 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
1f290 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
1f2a0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
1f2b0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
1f2c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1f2d0 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
1f2e0 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
1f2f0 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
1f300 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
1f310 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1f320 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
1f330 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
1f340 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
1f350 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
1f360 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
1f370 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f380 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
1f390 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
1f3a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1f3b0 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
1f3c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
1f3d0 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
1f3e0 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
1f3f0 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
1f400 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
1f410 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
1f420 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1f430 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1f440 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1f450 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
1f460 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
1f470 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
1f480 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1f490 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
1f4a0 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
1f4b0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
1f4c0 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
1f4d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
1f4e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
1f4f0 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
1f500 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
1f510 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
1f520 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
1f530 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
1f540 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
1f550 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1f560 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
1f570 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
1f580 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1f590 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
1f5a0 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
1f5b0 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
1f5c0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
1f5d0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
1f5e0 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
1f5f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  arse*, Expr*);.i
1f600 6e 74 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  nt sqlite3FixIni
1f610 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
1f620 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
1f630 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
1f640 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
1f650 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
1f660 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
1f670 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
1f680 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
1f690 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
1f6a0 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
1f6b0 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
1f6c0 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
1f6d0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
1f6e0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
1f6f0 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
1f700 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
1f710 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
1f720 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
1f730 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
1f740 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
1f750 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
1f760 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
1f770 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
1f780 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
1f790 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
1f7a0 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
1f7b0 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
1f7c0 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e  , int nChar);.in
1f7d0 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61  t sqlite3Utf8Cha
1f7e0 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  rLen(const char 
1f7f0 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74  *pData, int nByt
1f800 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55  e);.u32 sqlite3U
1f810 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38  tf8Read(const u8
1f820 2a 2c 20 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  *, const u8**);.
1f830 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
1f840 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
1f850 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
1f860 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
1f870 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
1f880 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
1f890 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
1f8a0 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
1f8b0 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
1f8c0 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64  .c.** file.  Cod
1f8d0 65 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65  e should use the
1f8e0 20 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c   MACRO forms bel
1f8f0 6f 77 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e  ow, as the Varin
1f900 74 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20  t32 versions.** 
1f910 61 72 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73  are coded to ass
1f920 75 6d 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62  ume the single b
1f930 79 74 65 20 63 61 73 65 20 69 73 20 61 6c 72 65  yte case is alre
1f940 61 64 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69  ady handled (whi
1f950 63 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f  ch .** the MACRO
1f960 20 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a   form does)..*/.
1f970 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
1f980 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
1f990 61 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73  ar*, u64);.int s
1f9a0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
1f9b0 32 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  2(unsigned char*
1f9c0 2c 20 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74  , u32);.u8 sqlit
1f9d0 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
1f9e0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1f9f0 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
1fa00 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
1fa10 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
1fa20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
1fa30 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
1fa40 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
1fa50 0a 2a 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f  .** The header o
1fa60 66 20 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69  f a record consi
1fa70 73 74 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63  sts of a sequenc
1fa80 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
1fa90 68 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54  h integers..** T
1faa0 68 65 73 65 20 69 6e 74 65 67 65 72 73 20 61 72  hese integers ar
1fab0 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20  e almost always 
1fac0 73 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e  small and are en
1fad0 63 6f 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c  coded as a singl
1fae0 65 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66  e byte..** The f
1faf0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
1fb00 74 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74  take advantage t
1fb10 68 69 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76  his fact to prov
1fb20 69 64 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64  ide a fast encod
1fb30 65 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20  e.** and decode 
1fb40 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 73 20  of the integers 
1fb50 69 6e 20 61 20 72 65 63 6f 72 64 20 68 65 61 64  in a record head
1fb60 65 72 2e 20 20 49 74 20 69 73 20 66 61 73 74 65  er.  It is faste
1fb70 72 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e  r for the common
1fb80 0a 2a 2a 20 63 61 73 65 20 77 68 65 72 65 20 74  .** case where t
1fb90 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 61 20  he integer is a 
1fba0 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74  single byte.  It
1fbb0 20 69 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f   is a little slo
1fbc0 77 65 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  wer when the.** 
1fbd0 69 6e 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f  integer is two o
1fbe0 72 20 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42  r more bytes.  B
1fbf0 75 74 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73  ut overall it is
1fc00 20 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54   faster..**.** T
1fc10 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70  he following exp
1fc20 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75  ressions are equ
1fc30 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20  ivalent:.**.**  
1fc40 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65     x = sqlite3Ge
1fc50 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42  tVarint32( A, &B
1fc60 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73   );.**     x = s
1fc70 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
1fc80 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a  2( A, B );.**.**
1fc90 20 20 20 20 20 78 20 3d 20 67 65 74 56 61 72 69       x = getVari
1fca0 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a  nt32( A, B );.**
1fcb0 20 20 20 20 20 78 20 3d 20 70 75 74 56 61 72 69       x = putVari
1fcc0 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a  nt32( A, B );.**
1fcd0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
1fce0 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 28 75  arint32(A,B)  (u
1fcf0 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
1fd00 30 29 20 3f 20 28 28 42 29 20 3d 20 28 75 33 32  0) ? ((B) = (u32
1fd10 29 2a 28 41 29 29 2c 31 20 3a 20 73 71 6c 69 74  )*(A)),1 : sqlit
1fd20 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
1fd30 29 2c 20 28 75 33 32 20 2a 29 26 28 42 29 29 29  ), (u32 *)&(B)))
1fd40 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
1fd50 6e 74 33 32 28 41 2c 42 29 20 20 28 75 38 29 28  nt32(A,B)  (u8)(
1fd60 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
1fd70 78 38 30 29 20 3f 20 28 2a 28 41 29 20 3d 20 28  x80) ? (*(A) = (
1fd80 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
1fd90 29 29 2c 31 20 3a 20 73 71 6c 69 74 65 33 50 75  )),1 : sqlite3Pu
1fda0 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 20 28  tVarint32((A), (
1fdb0 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74  B))).#define get
1fdc0 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
1fdd0 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69  3GetVarint.#defi
1fde0 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20  ne putVarint    
1fdf0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
1fe00 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ...const char *s
1fe10 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
1fe20 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49  ityStr(Vdbe *, I
1fe30 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ndex *);.void sq
1fe40 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69  lite3TableAffini
1fe50 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 54 61  tyStr(Vdbe *, Ta
1fe60 62 6c 65 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c  ble *);.char sql
1fe70 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e  ite3CompareAffin
1fe80 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c  ity(Expr *pExpr,
1fe90 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74   char aff2);.int
1fea0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
1feb0 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45  inityOk(Expr *pE
1fec0 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66  xpr, char idx_af
1fed0 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71  finity);.char sq
1fee0 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
1fef0 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
1ff00 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
1ff10 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
1ff20 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  64*, int, u8);.v
1ff30 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
1ff40 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
1ff50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
1ff60 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
1ff70 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
1ff80 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
1ff90 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
1ffa0 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
1ffb0 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
1ffc0 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
1ffd0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
1ffe0 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
1fff0 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
20000 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
20010 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
20020 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
20030 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
20040 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
20050 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
20060 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
20070 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
20080 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
20090 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
200a0 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
200b0 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
200c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
200d0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
200e0 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
200f0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
20100 72 53 65 74 43 6f 6c 6c 28 45 78 70 72 2a 2c 20  rSetColl(Expr*, 
20110 43 6f 6c 6c 53 65 71 2a 29 3b 0a 45 78 70 72 20  CollSeq*);.Expr 
20120 2a 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 43  *sqlite3ExprSetC
20130 6f 6c 6c 42 79 54 6f 6b 65 6e 28 50 61 72 73 65  ollByToken(Parse
20140 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
20150 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
20160 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
20170 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
20180 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
20190 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
201a0 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
201b0 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
201c0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
201d0 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
201e0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
201f0 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
20200 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
20210 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
20220 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
20230 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
20240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
20250 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
20260 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
20270 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
20280 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
20290 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
202a0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
202b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
202c0 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
202d0 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
202e0 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
202f0 74 20 63 68 61 72 20 2a 7a 29 3b 0a 0a 63 6f 6e  t char *z);..con
20300 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
20310 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
20320 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
20330 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
20340 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
20350 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
20360 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
20370 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
20380 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
20390 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20  d *,u8, .       
203a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203b0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
203c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
203d0 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
203e0 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
203f0 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
20400 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
20410 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
20420 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
20430 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
20440 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 69 66 64  , int, u8);.#ifd
20450 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
20460 5f 53 54 41 54 33 0a 63 68 61 72 20 2a 73 71 6c  _STAT3.char *sql
20470 69 74 65 33 55 74 66 38 74 6f 31 36 28 73 71 6c  ite3Utf8to16(sql
20480 69 74 65 33 20 2a 2c 20 75 38 2c 20 63 68 61 72  ite3 *, u8, char
20490 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b   *, int, int *);
204a0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
204b0 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
204c0 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
204d0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
204e0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
204f0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
20500 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
20510 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
20520 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
20530 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
20540 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
20550 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
20560 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
20570 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
20580 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
20590 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
205a0 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
205b0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
205c0 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
205d0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
205e0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
205f0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
20600 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
20610 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
20620 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
20630 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  fig;.extern SQLI
20640 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61  TE_WSD FuncDefHa
20650 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  sh sqlite3Global
20660 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
20670 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
20680 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
20690 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
206a0 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
206b0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
206c0 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
206d0 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
206e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
206f0 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
20700 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
20710 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
20720 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
20730 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
20740 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
20750 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
20760 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
20770 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
20780 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
20790 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
207a0 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
207b0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
207c0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
207d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
207e0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
207f0 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
20800 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
20810 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
20820 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
20830 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20840 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
20850 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
20860 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  meContext*);.int
20870 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
20880 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
20890 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
208a0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
208b0 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
208c0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
208d0 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  ameContext*);.in
208e0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
208f0 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
20900 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
20910 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
20920 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
20930 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
20940 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
20950 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
20960 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
20970 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
20980 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
20990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
209a0 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
209b0 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
209c0 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  t *);.CollSeq *s
209d0 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
209e0 28 73 71 6c 69 74 65 33 2a 2c 20 75 38 2c 20 43  (sqlite3*, u8, C
209f0 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
20a00 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
20a10 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
20a20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
20a30 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
20a40 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ze(Parse*, Token
20a50 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
20a60 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73  sqlite3InvokeBus
20a70 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e  yHandler(BusyHan
20a80 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  dler*);.int sqli
20a90 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65  te3FindDb(sqlite
20aa0 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
20ab0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61   sqlite3FindDbNa
20ac0 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  me(sqlite3 *, co
20ad0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
20ae0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
20af0 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Load(sqlite3*,in
20b00 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c  t iDB);.void sql
20b10 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53  ite3DeleteIndexS
20b20 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c  amples(sqlite3*,
20b30 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
20b40 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45  lite3DefaultRowE
20b50 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  st(Index*);.void
20b60 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
20b70 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71  LikeFunctions(sq
20b80 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e  lite3*, int);.in
20b90 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46  t sqlite3IsLikeF
20ba0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
20bb0 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72  ,Expr*,int*,char
20bc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20bd0 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61  MinimumFileForma
20be0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
20bf0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20c00 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
20c10 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
20c20 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
20c30 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
20c40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
20c50 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
20c60 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
20c70 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
20c80 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66  lite3IndexKeyinf
20c90 6f 28 50 61 72 73 65 20 2a 2c 20 49 6e 64 65 78  o(Parse *, Index
20ca0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
20cb0 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
20cc0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
20cd0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
20ce0 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a  id *, .  void (*
20cf0 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
20d00 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
20d10 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
20d20 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
20d30 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
20d40 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69  3_value **), voi
20d50 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
20d60 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44  ntext*),.  FuncD
20d70 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
20d80 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71  ructor.);.int sq
20d90 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c  lite3ApiExit(sql
20da0 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a  ite3 *db, int);.
20db0 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
20dc0 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73  empDatabase(Pars
20dd0 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
20de0 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
20df0 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a  StrAccum*, char*
20e00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
20e10 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
20e20 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
20e30 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
20e40 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
20e50 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
20e60 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
20e70 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
20e80 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
20e90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
20ea0 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
20eb0 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
20ec0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
20ed0 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
20ee0 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
20ef0 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
20f00 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
20f10 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
20f20 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
20f30 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
20f40 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
20f50 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
20f60 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 2f   const u8 *);../
20f70 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
20f80 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
20f90 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
20fa0 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
20fb0 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
20fc0 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a  d*(*)(size_t));.
20fd0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
20fe0 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
20ff0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
21000 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
21010 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
21020 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
21030 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
21040 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
21050 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
21060 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
21070 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
21080 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
21090 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
210a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
210b0 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
210c0 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
210d0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
210e0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
210f0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
21100 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
21110 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
21120 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21130 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
21140 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
21150 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
21160 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
21170 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
21180 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
21190 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
211a0 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
211b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
211c0 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
211d0 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
211e0 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
211f0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
21200 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
21210 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
21220 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
21230 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21240 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
21250 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
21260 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
21270 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
21280 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
21290 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
212a0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
212b0 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
212c0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
212d0 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69  Lock(X) .#  defi
212e0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
212f0 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  lock(X).#  defin
21300 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
21310 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65  ockList(X).#  de
21320 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21330 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20  Savepoint(X, Y, 
21340 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Z) SQLITE_OK.#  
21350 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65  define sqlite3Ge
21360 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28  tVTable(X,Y)  ((
21370 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65  VTable*)0).#else
21380 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
21390 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65  VtabClear(sqlite
213a0 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a  3 *db, Table*);.
213b0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
213c0 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
213d0 64 62 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 20 20  db, char **);.  
213e0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
213f0 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33  Rollback(sqlite3
21400 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71   *db);.   int sq
21410 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
21420 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
21430 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
21440 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  bLock(VTable *);
21450 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
21460 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c  VtabUnlock(VTabl
21470 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
21480 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
21490 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ist(sqlite3*);. 
214a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
214b0 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74  bSavepoint(sqlit
214c0 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  e3 *, int, int);
214d0 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69  .   VTable *sqli
214e0 74 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c  te3GetVTable(sql
214f0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
21500 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21510 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
21520 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
21530 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
21540 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69  s==0).#endif.voi
21550 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
21560 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
21570 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
21580 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
21590 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
215a0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
215b0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
215c0 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
215d0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
215e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
215f0 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
21600 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21610 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
21620 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
21630 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
21640 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
21650 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
21660 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
21670 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
21680 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
21690 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
216a0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
216b0 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
216c0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
216d0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
216e0 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
216f0 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
21700 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
21710 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
21720 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
21730 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
21740 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
21750 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
21760 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
21770 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
21780 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e  te3_value**);.in
21790 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
217a0 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
217b0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
217c0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
217d0 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
217e0 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
217f0 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
21800 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
21810 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a  prepare(Vdbe*);.
21820 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21830 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28  ListCheckLength(
21840 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
21850 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
21860 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
21870 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f  3BinaryCompareCo
21880 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45  llSeq(Parse *, E
21890 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a  xpr *, Expr *);.
218a0 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49  int sqlite3TempI
218b0 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71  nMemory(const sq
218c0 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63  lite3*);.const c
218d0 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
218e0 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29  nalModename(int)
218f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
21900 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
21910 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
21920 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
21930 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
21940 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
21950 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
21960 74 29 3b 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  t);../* Declarat
21970 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
21980 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
21990 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
219a0 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
219b0 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
219c0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
219d0 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
219e0 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
219f0 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
21a00 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
21a10 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
21a20 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
21a30 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
21a40 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
21a50 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
21a60 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
21a70 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
21a80 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
21a90 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
21aa0 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
21ab0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
21ac0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
21ad0 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
21ae0 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
21af0 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
21b00 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
21b10 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
21b20 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
21b30 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
21b40 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
21b50 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
21b60 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
21b70 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
21b80 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
21b90 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
21ba0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
21bb0 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
21bc0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
21bd0 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
21be0 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
21bf0 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
21c00 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
21c10 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
21c20 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
21c30 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
21c40 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
21c50 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
21c60 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
21c70 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
21c80 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
21c90 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
21ca0 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73  c,d).  #define s
21cb0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
21cc0 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65  b,c,d).  #define
21cd0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
21ce0 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
21cf0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
21d00 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
21d10 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
21d20 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
21d30 62 2c 63 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a  b,c,d) 0.#endif.
21d40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21d50 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
21d60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
21d70 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
21d80 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  , Table*);.#else
21d90 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
21da0 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
21db0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
21dc0 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
21dd0 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
21de0 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
21df0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
21e00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
21e10 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
21e20 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
21e30 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
21e40 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
21e50 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
21e60 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
21e70 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
21e80 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
21e90 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
21ea0 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
21eb0 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
21ec0 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
21ed0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
21ee0 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
21ef0 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
21f00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21f10 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
21f20 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
21f30 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
21f40 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
21f50 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
21f60 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
21f70 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
21f80 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
21f90 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
21fa0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
21fb0 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 23  lloc().#endif..#
21fc0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
21fd0 52 4f 57 49 44 20 20 20 20 20 20 20 20 20 20 20  ROWID           
21fe0 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  1.#define IN_IND
21ff0 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
22000 20 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e 5f     2.#define IN_
22010 49 4e 44 45 58 5f 49 4e 44 45 58 20 20 20 20 20  INDEX_INDEX     
22020 20 20 20 20 20 20 33 0a 69 6e 74 20 73 71 6c 69        3.int sqli
22030 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
22040 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
22050 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  int*);..#ifdef S
22060 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
22070 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20  MIC_WRITE.  int 
22080 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
22090 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
220a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
220b0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
220c0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  int, int);.  int
220d0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
220e0 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ize(sqlite3_vfs 
220f0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
22100 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
22110 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
22120 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22130 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
22140 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29  ze(pVfs) ((pVfs)
22150 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 23 65 6e 64  ->szOsFile).#end
22160 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
22170 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
22180 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
22190 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  int sqlite3MemJo
221a0 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b  urnalSize(void);
221b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65  .int sqlite3IsMe
221c0 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33  mJournal(sqlite3
221d0 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53  _file *);..#if S
221e0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
221f0 45 50 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71  EPTH>0.  void sq
22200 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
22210 68 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ht(Parse *pParse
22220 2c 20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e  , Expr *p);.  in
22230 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
22240 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
22250 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
22260 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
22270 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
22280 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
22290 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
222a0 69 67 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66  ight(x,y).  #def
222b0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
222c0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
222d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
222e0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
222f0 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
22300 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
22310 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
22320 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
22330 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
22340 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
22350 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
22360 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
22370 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
22380 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
22390 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
223a0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
223b0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
223c0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
223d0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
223e0 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
223f0 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
22400 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
22410 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
22420 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
22430 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
22440 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
22450 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
22460 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
22470 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
22480 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
22490 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
224a0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
224b0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
224c0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
224d0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
224e0 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
224f0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
22500 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
22510 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
22520 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
22530 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
22540 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
22550 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20  acing messages. 
22560 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
22570 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
22580 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
22590 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
225a0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
225b0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
225c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
225d0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
225e0 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45  e*);.SQLITE_EXTE
225f0 52 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65  RN void (*sqlite
22600 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
22610 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73  char*,...);.#els
22620 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  e.# define IOTRA
22630 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73  CE(A).# define s
22640 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
22650 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a  eSql(X).#endif..
22660 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74  /*.** These rout
22670 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62  ines are availab
22680 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e  le for the mem2.
22690 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f  c debugging memo
226a0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  ry allocator.** 
226b0 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20  only.  They are 
226c0 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
226d0 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74  hat different "t
226e0 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a  ypes" of memory.
226f0 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  ** allocations a
22700 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63  re properly trac
22710 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  ked by the syste
22720 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  m..**.** sqlite3
22730 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
22740 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65  ) sets the "type
22750 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69  " of an allocati
22760 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20  on to one of.** 
22770 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61  the MEMTYPE_* ma
22780 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c  cros defined bel
22790 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  ow.  The type mu
227a0 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20  st be a bitmask 
227b0 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65  with.** a single
227c0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
227d0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
227e0 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  asType() returns
227f0 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20   true if any of 
22800 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
22810 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
22820 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
22830 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
22840 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
22850 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
22860 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
22870 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69  ugHasType() is i
22880 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
22890 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20  inside assert() 
228a0 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
228b0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
228c0 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e  gNoType() return
228d0 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f  s true if none o
228e0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
228f0 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
22900 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
22910 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
22920 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
22930 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
22940 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20  ..**.** Perhaps 
22950 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61  the most importa
22960 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20  nt point is the 
22970 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
22980 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a  en MEMTYPE_HEAP.
22990 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c  ** and MEMTYPE_L
229a0 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e  OOKASIDE.  If an
229b0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d   allocation is M
229c0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
229d0 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20  , that means.** 
229e0 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  it might have be
229f0 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  en allocated by 
22a00 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70  lookaside, excep
22a10 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  t the allocation
22a20 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67   was.** too larg
22a30 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77  e or lookaside w
22a40 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e  as already full.
22a50 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
22a60 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  t to verify.** t
22a70 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  hat allocations 
22a80 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
22a90 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62  been satisfied b
22aa0 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20  y lookaside are 
22ab0 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61  not.** passed ba
22ac0 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  ck to non-lookas
22ad0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
22ae0 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75  nes.  Asserts su
22af0 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61  ch as the.** exa
22b00 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70  mple above are p
22b10 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e  laced on the non
22b20 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
22b30 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65  ) routines to ve
22b40 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e  rify.** this con
22b50 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20  straint. .**.** 
22b60 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
22b70 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
22b80 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
22b90 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
22ba0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
22bb0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
22bc0 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
22bd0 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
22be0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
22bf0 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
22c00 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
22c10 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
22c20 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
22c30 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
22c40 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
22c50 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
22c60 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
22c70 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22c80 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
22c90 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
22ca0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
22cb0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
22cc0 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
22cd0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22ce0 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
22cf0 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
22d00 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
22d10 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
22d20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
22d30 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
22d40 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
22d50 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
22d60 20 2f 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62   /* Might have b
22d70 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  een lookaside me
22d80 6d 6f 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mory */.#define 
22d90 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20  MEMTYPE_SCRATCH 
22da0 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61     0x04  /* Scra
22db0 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  tch allocations 
22dc0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
22dd0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
22de0 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  08  /* Page cach
22df0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
22e00 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
22e10 5f 44 42 20 20 20 20 20 20 20 20 20 30 78 31 30  _DB         0x10
22e20 20 20 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65    /* Uses sqlite
22e30 33 44 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73  3DbMalloc, not s
22e40 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  qlite_malloc */.
22e50 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
22e60 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a              TEINT_H_ */.