/ Hex Artifact Content
Login

Artifact 142ef5ed3fe0e6c662e99dbf92f38715b29a53b6:


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 34 0a 23 65 6e 64  LE_FORMAT 4.#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: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
b540: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
b550: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
b560: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
b570: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
b580: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
b590: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
b5a0: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
b5b0: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
b5c0: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
b5d0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
b5e0: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
b5f0: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
b600: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
b610: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
b620: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
b630: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
b640: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b650: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
b660: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
b670: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
b680: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
b690: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
b6a0: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
b6b0: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
b6c0: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
b6d0: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
b6e0: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
b6f0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
b700: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
b710: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
b720: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
b730: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
b740: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
b750: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
b760: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
b770: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
b780: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
b790: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
b7a0: 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61  n with 'a'.  Tha
b7b0: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
b7c0: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
b7d0: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
b7e0: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
b7f0: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
b800: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
b810: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
b820: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
b830: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
b840: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
b850: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
b860: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
b870: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
b880: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
b890: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
b8a0: 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64  omparison..*/.#d
b8b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b8c0: 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64  _TEXT     'a'.#d
b8d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b8e0: 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64  _NONE     'b'.#d
b8f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b900: 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64  _NUMERIC  'c'.#d
b910: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b920: 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64  _INTEGER  'd'.#d
b930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
b940: 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23  _REAL     'e'..#
b950: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
b960: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
b970: 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45  X)  ((X)>=SQLITE
b980: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f  _AFF_NUMERIC)../
b990: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
b9a0: 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20  AFF_MASK values 
b9b0: 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69  masks off the si
b9c0: 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f  gnificant bits o
b9d0: 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79  f an.** affinity
b9e0: 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66   value. .*/.#def
b9f0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
ba00: 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a  ASK     0x67../*
ba10: 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
ba20: 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
ba30: 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
ba40: 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
ba50: 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
ba60: 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f  the affinity..*/
ba70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba80: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30  JUMPIFNULL   0x0
ba90: 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  8  /* jumps if e
baa0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
bab0: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
bac0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
bad0: 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74       0x10  /* St
bae0: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
baf0: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
bb00: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
bb10: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
bb20: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
bb30: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ULL=NULL */../*.
bb40: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
bb50: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
bb60: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
bb70: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
bb80: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
bb90: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
bba0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
bbb0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
bbc0: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
bbd0: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
bbe0: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
bbf0: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
bc00: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
bc10: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
bc20: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
bc30: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
bc40: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
bc50: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
bc60: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
bc70: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
bc80: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
bc90: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
bca0: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
bcb0: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
bcc0: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
bcd0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
bce0: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
bcf0: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
bd00: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
bd10: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
bd20: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
bd30: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
bd40: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
bd50: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
bd60: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
bd70: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
bd80: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
bd90: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
bda0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
bdb0: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
bdc0: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
bdd0: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
bde0: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
bdf0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
be00: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
be10: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
be20: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
be30: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
be40: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
be50: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
be60: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
be70: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
be80: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
be90: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
bea0: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
beb0: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
bec0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
bed0: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
bee0: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
bef0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
bf00: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
bf10: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
bf20: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
bf30: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
bf40: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
bf50: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
bf60: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
bf70: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
bf80: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
bf90: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
bfa0: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
bfb0: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
bfc0: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
bfd0: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
bfe0: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
bff0: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
c000: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
c010: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
c020: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
c030: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
c040: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
c050: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
c060: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
c070: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
c080: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
c090: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
c0a0: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
c0b0: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
c0c0: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
c0d0: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
c0e0: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
c0f0: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
c100: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
c110: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
c120: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
c130: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
c140: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
c150: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
c160: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
c170: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
c180: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
c190: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
c1a0: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
c1b0: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
c1c0: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
c1d0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
c1e0: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
c1f0: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
c200: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
c210: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
c220: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
c230: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
c240: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
c250: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
c260: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
c270: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
c280: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
c290: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
c2a0: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
c2b0: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
c2c0: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
c2d0: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
c2e0: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
c2f0: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
c300: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
c310: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
c320: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
c330: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
c340: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
c350: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
c360: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
c370: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
c380: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
c390: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
c3a0: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
c3b0: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
c3c0: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
c3d0: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
c3e0: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
c3f0: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
c400: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
c410: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
c420: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
c430: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
c440: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
c450: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
c460: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
c470: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
c480: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
c490: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
c4a0: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
c4b0: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
c4c0: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
c4d0: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
c4e0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c500: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
c510: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
c520: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
c530: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
c540: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c550: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
c560: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
c570: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
c580: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
c590: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
c5a0: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
c5b0: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c5d0: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
c5e0: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
c5f0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
c600: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
c610: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
c620: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
c630: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
c640: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
c650: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
c660: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
c670: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
c680: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
c690: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
c6a0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
c6b0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
c6c0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74  /*.** Each SQL t
c6d0: 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
c6e0: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
c6f0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
c700: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
c710: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
c720: 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73  * Table.zName is
c730: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
c740: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73   table.  The cas
c750: 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
c760: 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c  l.** CREATE TABL
c770: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
c780: 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20  tored, but case 
c790: 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61  is not significa
c7a0: 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72  nt for.** compar
c7b0: 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  isons..**.** Tab
c7c0: 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e  le.nCol is the n
c7d0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
c7e0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   in this table. 
c7f0: 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61   Table.aCol is a
c800: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  .** pointer to a
c810: 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d  n array of Colum
c820: 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e  n structures, on
c830: 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
c840: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
c850: 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54  table has an INT
c860: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
c870: 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b  , then Table.iPK
c880: 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ey is the index 
c890: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e  of.** the column
c8a0: 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65   that is that ke
c8b0: 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54  y.   Otherwise T
c8c0: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65  able.iPKey is ne
c8d0: 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a  gative.  Note.**
c8e0: 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79   that the dataty
c8f0: 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  pe of the PRIMAR
c900: 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e  Y KEY must be IN
c910: 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66  TEGER for this f
c920: 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65  ield to.** be se
c930: 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50  t.  An INTEGER P
c940: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73  RIMARY KEY is us
c950: 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  ed as the rowid 
c960: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
c970: 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  ** the table.  I
c980: 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f  f a table has no
c990: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
c9a0: 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e   KEY, then a ran
c9b0: 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20  dom rowid.** is 
c9c0: 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61  generated for ea
c9d0: 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61  ch row of the ta
c9e0: 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d  ble.  TF_HasPrim
c9f0: 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66  aryKey is set if
ca00: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61  .** the table ha
ca10: 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45  s any PRIMARY KE
ca20: 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74  Y, INTEGER or ot
ca30: 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  herwise..**.** T
ca40: 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65  able.tnum is the
ca50: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
ca60: 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20   the root BTree 
ca70: 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
ca80: 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61  e in the.** data
ca90: 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54  base file.  If T
caa0: 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20  able.iDb is the 
cab0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
cac0: 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b  abase table back
cad0: 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65  end.** in sqlite
cae0: 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f  .aDb[].  0 is fo
caf0: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
cb00: 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72  ase and 1 is for
cb10: 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a   the file that.*
cb20: 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72  * holds temporar
cb30: 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  y tables and ind
cb40: 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68  ices.  If TF_Eph
cb50: 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a  emeral is set.**
cb60: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
cb70: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66  is stored in a f
cb80: 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f  ile that is auto
cb90: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
cba0: 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44  d.** when the VD
cbb0: 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  BE cursor to the
cbc0: 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
cbd0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  .  In this case 
cbe0: 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72  Table.tnum .** r
cbf0: 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f  efers VDBE curso
cc00: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f  r number that ho
cc10: 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70  lds the table op
cc20: 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72  en, not to the r
cc30: 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62  oot.** page numb
cc40: 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74  er.  Transient t
cc50: 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74  ables are used t
cc60: 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c  o hold the resul
cc70: 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71  ts of a.** sub-q
cc80: 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72  uery that appear
cc90: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72  s instead of a r
cca0: 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  eal table name i
ccb0: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
ccc0: 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43  e .** of a SELEC
ccd0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
cce0: 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
ccf0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
cd00: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
cd10: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
cd20: 65 77 20 2a 2f 0a 20 20 69 6e 74 20 69 50 4b 65  ew */.  int iPKe
cd30: 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
cd40: 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
cd50: 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
cd60: 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20   as the primary 
cd70: 6b 65 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  key */.  int nCo
cd80: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  l;            /*
cd90: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
cda0: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
cdb0: 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43   */.  Column *aC
cdc0: 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ol;        /* In
cdd0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
cde0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
cdf0: 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20   Index *pIndex; 
ce00: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
ce10: 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20   SQL indexes on 
ce20: 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  this table. */. 
ce30: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
ce40: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
ce50: 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69  ree node for thi
ce60: 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74  s table (see not
ce70: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 74 52  e above) */.  tR
ce80: 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20  owcnt nRowEst;  
ce90: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
cea0: 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20  rows in table - 
ceb0: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
cec0: 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 65 6c  1 table */.  Sel
ced0: 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
cee0: 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
cef0: 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
cf00: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
cf10: 20 76 69 65 77 2e 20 2a 2f 0a 20 20 75 31 36 20   view. */.  u16 
cf20: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
cf30: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
cf40: 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
cf50: 61 62 6c 65 20 2a 2f 0a 20 20 75 38 20 74 61 62  able */.  u8 tab
cf60: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
cf70: 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
cf80: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65  alues */.  u8 ke
cf90: 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  yConf;          
cfa0: 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
cfb0: 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
cfc0: 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
cfd0: 69 50 4b 65 79 20 2a 2f 0a 20 20 46 4b 65 79 20  iPKey */.  FKey 
cfe0: 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
cff0: 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
d000: 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
d010: 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
d020: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
d030: 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
d040: 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
d050: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
d060: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66  ch column */.#if
d070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d080: 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 20 2a 70  _CHECK.  Expr *p
d090: 43 68 65 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  Check;        /*
d0a0: 20 54 68 65 20 41 4e 44 20 6f 66 20 61 6c 6c 20   The AND of all 
d0b0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
d0c0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  s */.#endif.#ifn
d0d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d0e0: 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
d0f0: 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
d100: 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43    /* Offset in C
d110: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74  REATE TABLE stmt
d120: 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
d130: 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  lumn */.#endif.#
d140: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d150: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
d160: 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
d170: 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
d180: 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
d190: 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  . */.  int nModu
d1a0: 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
d1b0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
d1c0: 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
d1d0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
d1e0: 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65  oduleArg;  /* Te
d1f0: 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65  xt of all module
d200: 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f   args. [0] is mo
d210: 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 23 65 6e  dule name */.#en
d220: 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70  dif.  Trigger *p
d230: 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69  Trigger;   /* Li
d240: 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73  st of triggers s
d250: 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61  tored in pSchema
d260: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
d270: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
d280: 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69  hema that contai
d290: 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ns this table */
d2a0: 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a  .  Table *pNextZ
d2b0: 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20  ombie;  /* Next 
d2c0: 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f  on the Parse.pZo
d2d0: 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a  mbieTab list */.
d2e0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
d2f0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62  d values for Tab
d300: 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23  e.tabFlags..*/.#
d310: 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
d320: 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20  ly        0x01  
d330: 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
d340: 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
d350: 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
d360: 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20  ral       0x02  
d370: 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
d380: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
d390: 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
d3a0: 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a  Key   0x04    /*
d3b0: 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69   Table has a pri
d3c0: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
d3d0: 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65  ine TF_Autoincre
d3e0: 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f  ment   0x08    /
d3f0: 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
d400: 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
d410: 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
d420: 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20  e TF_Virtual    
d430: 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
d440: 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  Is a virtual tab
d450: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
d460: 5f 4e 65 65 64 4d 65 74 61 64 61 74 61 20 20 20  _NeedMetadata   
d470: 20 30 78 32 30 20 20 20 20 2f 2a 20 61 43 6f 6c   0x20    /* aCol
d480: 5b 5d 2e 7a 54 79 70 65 20 61 6e 64 20 61 43 6f  [].zType and aCo
d490: 6c 5b 5d 2e 70 43 6f 6c 6c 20 6d 69 73 73 69 6e  l[].pColl missin
d4a0: 67 20 2a 2f 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65  g */..../*.** Te
d4b0: 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
d4c0: 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
d4d0: 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
d4e0: 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
d4f0: 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
d500: 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
d510: 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
d520: 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
d530: 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
d540: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
d550: 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
d560: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d570: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
d580: 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
d590: 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29  al(X)      (((X)
d5a0: 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
d5b0: 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20  Virtual)!=0).#  
d5c0: 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
d5d0: 6f 6c 75 6d 6e 28 58 29 20 28 28 58 29 2d 3e 69  olumn(X) ((X)->i
d5e0: 73 48 69 64 64 65 6e 29 0a 23 65 6c 73 65 0a 23  sHidden).#else.#
d5f0: 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
d600: 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20 20  al(X)      0.#  
d610: 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
d620: 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
d630: 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f  f../*.** Each fo
d640: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
d650: 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61  aint is an insta
d660: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
d670: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
d680: 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20  **.** A foreign 
d690: 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65  key is associate
d6a0: 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65  d with two table
d6b0: 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74  s.  The "from" t
d6c0: 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74  able is.** the t
d6d0: 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
d6e0: 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ns the REFERENCE
d6f0: 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72  S clause that cr
d700: 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67  eates the foreig
d710: 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22  n.** key.  The "
d720: 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65  to" table is the
d730: 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e   table that is n
d740: 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45  amed in the REFE
d750: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a  RENCES clause..*
d760: 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20  * Consider this 
d770: 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20  example:.**.**  
d780: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
d790: 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20  ex1(.**       a 
d7a0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
d7b0: 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20  KEY,.**       b 
d7c0: 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49  INTEGER CONSTRAI
d7d0: 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45  NT fk1 REFERENCE
d7e0: 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20  S ex2(x).**     
d7f0: 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72  );.**.** For for
d800: 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20  eign key "fk1", 
d810: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
d820: 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20  s "ex1" and the 
d830: 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32  to-table is "ex2
d840: 22 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  "..**.** Each RE
d850: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
d860: 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
d870: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
d880: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
d890: 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
d8a0: 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
d8b0: 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
d8c0: 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
d8d0: 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
d8e0: 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
d8f0: 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
d900: 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
d910: 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
d920: 68 65 63 6b 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  hecked..*/.struc
d930: 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
d940: 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
d950: 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
d960: 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
d970: 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
d980: 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
d990: 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
d9a0: 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69  xt foreign key i
d9b0: 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61  n pFrom */.  cha
d9c0: 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f  r *zTo;        /
d9d0: 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20  * Name of table 
d9e0: 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69  that the key poi
d9f0: 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72  nts to (aka: Par
da00: 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ent) */.  FKey *
da10: 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e  pNextTo;    /* N
da20: 65 78 74 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ext foreign key 
da30: 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 7a  on table named z
da40: 54 6f 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  To */.  FKey *pP
da50: 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
da60: 76 69 6f 75 73 20 66 6f 72 65 69 67 6e 20 6b 65  vious foreign ke
da70: 79 20 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65 64  y on table named
da80: 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
da90: 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
daa0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
dab0: 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
dac0: 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
dad0: 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
dae0: 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 2f 2a  sDeferred;    /*
daf0: 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
db00: 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
db10: 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
db20: 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
db30: 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
db40: 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
db50: 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
db60: 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
db70: 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
db80: 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 20 20  *apTrigger[2];  
db90: 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20  /* Triggers for 
dba0: 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e  aAction[] action
dbb0: 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  s */.  struct sC
dbc0: 6f 6c 4d 61 70 20 7b 20 20 2f 2a 20 4d 61 70 70  olMap {  /* Mapp
dbd0: 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
dbe0: 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
dbf0: 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
dc00: 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
dc10: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
dc20: 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20  column in pFrom 
dc30: 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f  */.    char *zCo
dc40: 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  l;        /* Nam
dc50: 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
dc60: 54 6f 2e 20 20 49 66 20 30 20 75 73 65 20 50 52  To.  If 0 use PR
dc70: 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
dc80: 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
dc90: 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
dca0: 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
dcb0: 6f 6c 75 6d 6e 20 73 20 2a 2f 0a 7d 3b 0a 0a 2f  olumn s */.};../
dcc0: 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70  *.** SQLite supp
dcd0: 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72  orts many differ
dce0: 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
dcf0: 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  lve a constraint
dd00: 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
dd10: 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
dd20: 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
dd30: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
dd40: 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
dd50: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
dd60: 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
dd70: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
dd80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
dd90: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
dda0: 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
ddb0: 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
ddc0: 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
ddd0: 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
dde0: 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
ddf0: 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
de00: 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
de10: 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
de20: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
de30: 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
de40: 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
de50: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
de60: 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
de70: 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
de80: 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
de90: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
dea0: 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
deb0: 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
dec0: 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
ded0: 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
dee0: 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
def0: 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
df00: 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
df10: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
df20: 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
df30: 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
df40: 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
df50: 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
df60: 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
df70: 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
df80: 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
df90: 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
dfa0: 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
dfb0: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
dfc0: 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
dfd0: 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
dfe0: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
dff0: 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
e000: 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
e010: 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
e020: 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
e030: 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
e040: 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
e050: 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
e060: 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
e070: 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
e080: 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
e090: 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
e0a0: 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
e0b0: 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
e0c0: 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
e0d0: 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
e0e0: 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
e0f0: 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
e100: 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
e110: 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
e120: 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
e130: 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
e140: 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
e150: 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
e160: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
e170: 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
e180: 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
e190: 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
e1a0: 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
e1b0: 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
e1c0: 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a  eign key..** .**
e1d0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
e1e0: 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
e1f0: 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
e200: 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
e210: 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
e220: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
e230: 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
e240: 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
e250: 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
e260: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
e270: 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
e280: 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
e290: 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
e2a0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
e2b0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
e2c0: 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
e2d0: 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
e2e0: 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
e2f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
e300: 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
e310: 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
e320: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
e330: 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
e340: 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
e350: 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
e360: 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
e370: 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
e380: 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
e390: 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
e3a0: 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
e3b0: 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
e3c0: 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
e3d0: 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
e3e0: 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
e3f0: 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
e400: 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
e410: 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
e420: 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
e430: 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
e440: 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
e450: 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
e460: 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
e470: 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
e480: 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
e490: 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
e4a0: 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
e4b0: 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
e4c0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
e4d0: 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
e4e0: 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
e4f0: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
e500: 44 65 66 61 75 6c 74 20 20 39 39 20 20 2f 2a 20  Default  99  /* 
e510: 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
e520: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
e530: 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
e540: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e550: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
e560: 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
e570: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
e580: 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
e590: 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
e5a0: 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
e5b0: 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63  ontrol the .** c
e5c0: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
e5d0: 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
e5e0: 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
e5f0: 66 6f 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  fo {.  sqlite3 *
e600: 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
e610: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
e620: 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 65 6e  ction */.  u8 en
e630: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
e640: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
e650: 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
e660: 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
e670: 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
e680: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
e690: 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
e6a0: 20 61 43 6f 6c 6c 5b 5d 20 2a 2f 0a 20 20 75 38   aColl[] */.  u8
e6b0: 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
e6c0: 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20    /* Sort order 
e6d0: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e  for each column.
e6e0: 20 20 4d 61 79 20 62 65 20 4e 55 4c 4c 20 2a 2f    May be NULL */
e6f0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
e700: 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
e710: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
e720: 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
e730: 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
e740: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
e750: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
e760: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
e770: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
e780: 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e  t a.** single in
e790: 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20  dex record that 
e7a0: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
e7b0: 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
e7c0: 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76   individual.** v
e7d0: 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  alues..**.** A r
e7e0: 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
e7f0: 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
e800: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
e810: 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
e820: 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
e830: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
e840: 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
e850: 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
e860: 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
e870: 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
e880: 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
e890: 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
e8a0: 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
e8b0: 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
e8c0: 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
e8d0: 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
e8e0: 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
e8f0: 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
e900: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
e910: 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  e holds a record
e920: 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64   that has alread
e930: 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62  y been disassemb
e940: 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20  led.** into its 
e950: 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c  constituent fiel
e960: 64 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ds..*/.struct Un
e970: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
e980: 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
e990: 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
e9a0: 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
e9b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
e9c0: 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
e9d0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
e9e0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
e9f0: 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c  Mem[] */.  u8 fl
ea00: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ags;           /
ea10: 2a 20 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e  * Boolean settin
ea20: 67 73 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e  gs.  UNPACKED_..
ea30: 2e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  . below */.  i64
ea40: 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20   rowid;         
ea50: 20 2f 2a 20 55 73 65 64 20 62 79 20 55 4e 50 41   /* Used by UNPA
ea60: 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
ea70: 43 48 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  CH */.  Mem *aMe
ea80: 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
ea90: 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  alues */.};../*.
eaa0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
eab0: 73 20 6f 66 20 55 6e 70 61 63 6b 65 64 52 65 63  s of UnpackedRec
eac0: 6f 72 64 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65  ord.flags.*/.#de
ead0: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 4e  fine UNPACKED_IN
eae0: 43 52 4b 45 59 20 20 20 20 20 20 20 30 78 30 31  CRKEY       0x01
eaf0: 20 20 2f 2a 20 4d 61 6b 65 20 74 68 69 73 20 6b    /* Make this k
eb00: 65 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 6c 61  ey an epsilon la
eb10: 72 67 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rger */.#define 
eb20: 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
eb30: 4d 41 54 43 48 20 20 30 78 30 32 20 20 2f 2a 20  MATCH  0x02  /* 
eb40: 41 20 70 72 65 66 69 78 20 6d 61 74 63 68 20 69  A prefix match i
eb50: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20  s considered OK 
eb60: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43  */.#define UNPAC
eb70: 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43  KED_PREFIX_SEARC
eb80: 48 20 30 78 30 34 20 20 2f 2a 20 49 67 6e 6f 72  H 0x04  /* Ignor
eb90: 65 20 66 69 6e 61 6c 20 28 72 6f 77 69 64 29 20  e final (rowid) 
eba0: 66 69 65 6c 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  field */../*.** 
ebb0: 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69  Each SQL index i
ebc0: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
ebd0: 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a   memory by an.**
ebe0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
ebf0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
ec00: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
ec10: 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74  columns of the t
ec20: 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f  able that are to
ec30: 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20   be indexed are 
ec40: 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20  described.** by 
ec50: 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66  the aiColumn[] f
ec60: 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72  ield of this str
ec70: 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61  ucture.  For exa
ec80: 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a  mple, suppose.**
ec90: 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c   we have the fol
eca0: 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64  lowing table and
ecb0: 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20   index:.**.**   
ecc0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45    CREATE TABLE E
ecd0: 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e  x1(c1 int, c2 in
ece0: 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20  t, c3 text);.** 
ecf0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
ed00: 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63   Ex2 ON Ex1(c3,c
ed10: 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  1);.**.** In the
ed20: 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
ed30: 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c   describing Ex1,
ed40: 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65   nCol==3 because
ed50: 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68   there are.** th
ed60: 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  ree columns in t
ed70: 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68  he table.  In th
ed80: 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  e Index structur
ed90: 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20  e describing.** 
eda0: 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20  Ex2, nColumn==2 
edb0: 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33  since 2 of the 3
edc0: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20   columns of Ex1 
edd0: 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20  are indexed..** 
ede0: 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43  The value of aiC
edf0: 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e  olumn is {2, 0}.
ee00: 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32    aiColumn[0]==2
ee10: 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a   because the .**
ee20: 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
ee30: 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
ee40: 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
ee50: 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
ee60: 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
ee70: 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
ee80: 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
ee90: 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
eea0: 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
eeb0: 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
eec0: 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
eed0: 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
eee0: 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
eef0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
ef00: 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
ef10: 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
ef20: 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
ef30: 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
ef40: 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
ef50: 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
ef60: 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
ef70: 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
ef80: 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
ef90: 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
efa0: 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
efb0: 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
efc0: 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
efd0: 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
efe0: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
eff0: 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68  ion .** algorith
f000: 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e  m to employ when
f010: 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20  ever an attempt 
f020: 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72  is made to inser
f030: 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a  t a non-unique.*
f040: 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  * element..*/.st
f050: 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63  ruct Index {.  c
f060: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
f070: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
f080: 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6e  index */.  int n
f090: 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
f0a0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f0b0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 75 73   in the table us
f0c0: 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
f0d0: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 43 6f 6c   */.  int *aiCol
f0e0: 75 6d 6e 3b 20 20 20 2f 2a 20 57 68 69 63 68 20  umn;   /* Which 
f0f0: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
f100: 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
f110: 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 74   1st is 0 */.  t
f120: 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
f130: 3b 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 41  ; /* Result of A
f140: 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
f150: 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
f160: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
f170: 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
f180: 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
f190: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
f1a0: 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
f1b0: 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 6f 6e       /* Page con
f1c0: 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
f1d0: 74 68 69 73 20 69 6e 64 65 78 20 69 6e 20 64 61  this index in da
f1e0: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
f1f0: 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
f200: 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
f210: 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
f220: 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
f230: 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 49 6e 64   */.  u8 autoInd
f240: 65 78 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  ex;    /* True i
f250: 66 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  f is automatical
f260: 6c 79 20 63 72 65 61 74 65 64 20 28 65 78 3a 20  ly created (ex: 
f270: 62 79 20 55 4e 49 51 55 45 29 20 2a 2f 0a 20 20  by UNIQUE) */.  
f280: 75 38 20 62 55 6e 6f 72 64 65 72 65 64 3b 20 20  u8 bUnordered;  
f290: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
f2a0: 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
f2b0: 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
f2c0: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
f2d0: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
f2e0: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
f2f0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
f300: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
f310: 65 78 74 3b 20 20 20 20 2f 2a 20 54 68 65 20 6e  ext;    /* The n
f320: 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
f330: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
f340: 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
f350: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 2f  hema *pSchema; /
f360: 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
f370: 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
f380: 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
f390: 65 72 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f 66  er;  /* Array of
f3a0: 20 73 69 7a 65 20 49 6e 64 65 78 2e 6e 43 6f 6c   size Index.nCol
f3b0: 75 6d 6e 2e 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn. True==DESC,
f3c0: 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
f3d0: 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20   char **azColl; 
f3e0: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f    /* Array of co
f3f0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
f400: 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78   names for index
f410: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
f420: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 20  E_ENABLE_STAT3. 
f430: 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
f440: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f450: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
f460: 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
f470: 20 20 74 52 6f 77 63 6e 74 20 61 76 67 45 71 3b    tRowcnt avgEq;
f480: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76             /* Av
f490: 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 20  erage nEq value 
f4a0: 66 6f 72 20 6b 65 79 20 76 61 6c 75 65 73 20 6e  for key values n
f4b0: 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
f4c0: 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
f4d0: 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
f4e0: 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
f4f0: 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23  ft-most key */.#
f500: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
f510: 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
f520: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
f530: 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
f540: 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
f550: 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20  emory .** using 
f560: 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
f570: 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
f580: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
f590: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
f5a0: 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
f5b0: 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
f5c0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
f5d0: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
f5e0: 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 75 6e  dexSample {.  un
f5f0: 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
f600: 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  z;        /* Val
f610: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
f620: 51 4c 49 54 45 5f 54 45 58 54 20 6f 72 20 53 51  QLITE_TEXT or SQ
f630: 4c 49 54 45 5f 42 4c 4f 42 20 2a 2f 0a 20 20 20  LITE_BLOB */.   
f640: 20 64 6f 75 62 6c 65 20 72 3b 20 20 20 20 20 20   double r;      
f650: 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65 54 79   /* Value if eTy
f660: 70 65 20 69 73 20 53 51 4c 49 54 45 5f 46 4c 4f  pe is SQLITE_FLO
f670: 41 54 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 3b  AT */.    i64 i;
f680: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
f690: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
f6a0: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 2a 2f  QLITE_INTEGER */
f6b0: 0a 20 20 7d 20 75 3b 0a 20 20 75 38 20 65 54 79  .  } u;.  u8 eTy
f6c0: 70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  pe;         /* S
f6d0: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 53 51 4c 49  QLITE_NULL, SQLI
f6e0: 54 45 5f 49 4e 54 45 47 45 52 20 2e 2e 2e 20 65  TE_INTEGER ... e
f6f0: 74 63 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  tc. */.  int nBy
f700: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 69  te;        /* Si
f710: 7a 65 20 69 6e 20 62 79 74 65 20 6f 66 20 74 65  ze in byte of te
f720: 78 74 20 6f 72 20 62 6c 6f 62 2e 20 2a 2f 0a 20  xt or blob. */. 
f730: 20 74 52 6f 77 63 6e 74 20 6e 45 71 3b 20 20 20   tRowcnt nEq;   
f740: 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
f750: 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
f760: 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
f770: 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
f780: 74 52 6f 77 63 6e 74 20 6e 4c 74 3b 20 20 20 20  tRowcnt nLt;    
f790: 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
f7a0: 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
f7b0: 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
f7c0: 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
f7d0: 20 74 52 6f 77 63 6e 74 20 6e 44 4c 74 3b 20 20   tRowcnt nDLt;  
f7e0: 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
f7f0: 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
f800: 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
f810: 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
f820: 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
f830: 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
f840: 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
f850: 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
f860: 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
f870: 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
f880: 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
f890: 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
f8a0: 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
f8b0: 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
f8c0: 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
f8d0: 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
f8e0: 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
f8f0: 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
f900: 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
f910: 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
f920: 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
f930: 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
f940: 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
f950: 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
f960: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
f970: 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
f980: 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
f990: 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
f9a0: 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
f9b0: 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
f9c0: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
f9d0: 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
f9e0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
f9f0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
fa00: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
fa10: 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
fa20: 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
fa30: 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
fa40: 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
fa50: 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
fa60: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
fa70: 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
fa80: 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
fa90: 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
faa0: 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
fab0: 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
fac0: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
fad0: 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
fae0: 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
faf0: 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
fb00: 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
fb10: 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
fb20: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
fb30: 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
fb40: 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
fb50: 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
fb60: 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
fb70: 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
fb80: 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
fb90: 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
fba0: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
fbb0: 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
fbc0: 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
fbd0: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
fbe0: 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
fbf0: 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
fc00: 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
fc10: 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
fc20: 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
fc30: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
fc40: 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
fc50: 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
fc60: 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
fc70: 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
fc80: 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
fc90: 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcb0: 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
fcc0: 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
fcd0: 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
fce0: 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
fcf0: 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
fd00: 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
fd10: 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
fd20: 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
fd30: 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd50: 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
fd60: 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
fd70: 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
fd80: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
fd90: 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
fda0: 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
fdb0: 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
fdc0: 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
fdd0: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
fde0: 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
fdf0: 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
fe00: 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
fe10: 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
fe20: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
fe30: 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
fe40: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
fe50: 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
fe60: 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 73 74 72  g index */.  str
fe70: 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
fe80: 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
fe90: 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
fea0: 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
feb0: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
fec0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
fed0: 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
fee0: 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ff00: 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
ff10: 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
ff20: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
ff30: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
ff40: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
ff50: 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
ff60: 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
ff70: 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
ff80: 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
ff90: 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
ffa0: 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
ffb0: 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
ffc0: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
ffd0: 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
ffe0: 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
fff0: 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
10000 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
10010 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10020 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
10030 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
10040 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
10050 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
10060 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
10070 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
10080 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  ol[] */.  int nC
10090 6f 6c 75 6d 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  olumnAlloc;     
100a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
100b0 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  lots allocated f
100c0 6f 72 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69  or aCol[] */.  i
100d0 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b  nt nAccumulator;
100e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
100f0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
10100 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f   show through to
10110 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20   the output..   
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10130 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69         ** Additi
10140 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65  onal columns are
10150 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61   used only as pa
10160 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20  rameters to.    
10170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10180 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61        ** aggrega
10190 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
101a0 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f    struct AggInfo
101b0 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72  _func {   /* For
101c0 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
101d0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
101e0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
101f0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
10200 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20  ession encoding 
10210 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
10220 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
10230 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nc;          /* 
10240 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
10250 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
10260 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
10270 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
10280 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
10290 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
102a0 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
102b0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69  r */.    int iDi
102c0 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20  stinct;         
102d0 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74    /* Ephemeral t
102e0 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66  able used to enf
102f0 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  orce DISTINCT */
10300 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69  .  } *aFunc;.  i
10310 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20  nt nFunc;       
10320 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10330 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
10340 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Func[] */.  int 
10350 6e 46 75 6e 63 41 6c 6c 6f 63 3b 20 20 20 20 20  nFuncAlloc;     
10360 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10370 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
10380 20 66 6f 72 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a   for aFunc[] */.
10390 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
103a0 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
103b0 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
103c0 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
103d0 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
103e0 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
103f0 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
10400 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
10410 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
10420 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
10430 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
10440 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
10450 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
10460 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
10470 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
10480 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
10490 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
104a0 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
104b0 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
104c0 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
104d0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
104e0 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
104f0 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
10500 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
10510 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
10520 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
10530 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
10540 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
10550 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
10560 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
10570 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
10580 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
10590 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
105a0 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
105b0 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
105c0 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
105d0 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
105e0 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
105f0 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
10600 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
10610 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
10620 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
10630 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
10640 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
10650 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
10660 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
10670 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
10680 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
10690 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
106a0 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
106b0 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
106c0 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
106d0 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
106e0 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
106f0 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
10700 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
10710 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
10720 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
10730 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
10740 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
10750 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
10760 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
10770 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
10780 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
10790 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
107a0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
107b0 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
107c0 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
107d0 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a  OAT, TK_BLOB, .*
107e0 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c  * or TK_STRING),
107f0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
10800 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65   contains the te
10810 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69  xt of the SQL li
10820 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65  teral. If.** the
10830 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
10840 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41   variable (TK_VA
10850 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78  RIABLE), then Ex
10860 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
10870 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62  s the .** variab
10880 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79  le name. Finally
10890 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  , if the express
108a0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
108b0 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54  nction (TK_FUNCT
108c0 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78  ION),.** then Ex
108d0 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
108e0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
108f0 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  e function..**.*
10900 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e  * Expr.pRight an
10910 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65  d Expr.pLeft are
10920 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
10930 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f  ght subexpressio
10940 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72  ns of a.** binar
10950 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68  y operator. Eith
10960 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62  er or both may b
10970 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78  e NULL..**.** Ex
10980 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20  pr.x.pList is a 
10990 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74  list of argument
109a0 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  s if the express
109b0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75  ion is an SQL fu
109c0 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53  nction,.** a CAS
109d0 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  E expression or 
109e0 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e  an IN expression
109f0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c   of the form "<l
10a00 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e  hs> IN (<y>, <z>
10a10 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78  ...)"..** Expr.x
10a20 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64  .pSelect is used
10a30 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
10a40 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65  on is a sub-sele
10a50 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73  ct or an express
10a60 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f  ion of.** the fo
10a70 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45  rm "<lhs> IN (SE
10a80 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74  LECT ...)". If t
10a90 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  he EP_xIsSelect 
10aa0 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68  bit is set in th
10ab0 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
10ac0 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e  mask, then Expr.
10ad0 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
10ae0 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45  id. Otherwise, E
10af0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a  xpr.x.pList is .
10b00 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
10b10 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
10b20 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
10b30 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
10b40 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
10b50 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
10b60 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
10b70 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
10b80 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
10b90 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
10ba0 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
10bb0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
10bc0 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
10bd0 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
10be0 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
10bf0 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
10c00 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
10c10 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
10c20 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
10c30 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
10c40 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
10c50 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
10c60 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
10c70 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
10c80 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
10c90 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
10ca0 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
10cb0 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
10cc0 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
10cd0 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
10ce0 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
10cf0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
10d00 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
10d10 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
10d20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
10d30 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72  on mark .** char
10d40 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65  acter '?' in the
10d50 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74   original SQL) t
10d60 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61  hen the Expr.iTa
10d70 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e  ble holds the in
10d80 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  dex .** number f
10d90 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
10da0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
10db0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
10dc0 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
10dd0 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
10de0 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
10df0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
10e00 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
10e10 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
10e20 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
10e30 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
10e40 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
10e50 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
10e60 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
10e70 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
10e80 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
10e90 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
10ea0 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
10eb0 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
10ec0 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
10ed0 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
10ee0 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
10ef0 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
10f00 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
10f10 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
10f20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
10f30 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
10f40 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
10f50 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
10f60 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
10f70 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
10f80 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
10f90 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
10fa0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
10fb0 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
10fc0 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
10fd0 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
10fe0 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
10ff0 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
11000 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
11010 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
11020 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
11030 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
11040 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
11050 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
11060 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
11070 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
11080 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
11090 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
110a0 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
110b0 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
110c0 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
110d0 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
110e0 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
110f0 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
11100 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
11110 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
11120 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
11130 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
11140 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
11150 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
11160 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
11170 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
11180 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
11190 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
111a0 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
111b0 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
111c0 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
111d0 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
111e0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
111f0 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
11200 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
11210 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
11220 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
11230 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
11240 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
11250 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
11260 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
11270 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
11280 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
11290 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
112a0 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
112b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
112c0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
112d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
112e0 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
112f0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
11300 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
11310 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
11320 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
11330 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
11340 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
11350 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
11360 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
11370 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
11380 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
11390 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
113a0 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
113b0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
113c0 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
113d0 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
113e0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
113f0 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
11400 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
11410 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
11420 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
11430 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
11440 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
11450 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
11460 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
11470 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
11480 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
11490 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
114a0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
114b0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
114c0 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
114d0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
114e0 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
114f0 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a  r malfunction. .
11500 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
11510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11530 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11540 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
11550 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
11560 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
11570 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
11580 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
11590 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
115a0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
115b0 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
115c0 3b 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f  ;     /* Functio
115d0 6e 20 61 72 67 75 6d 65 6e 74 73 20 6f 72 20 69  n arguments or i
115e0 6e 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65  n "<expr> IN (<e
115f0 78 70 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20  xpr-list)" */.  
11600 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
11610 74 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66  t;     /* Used f
11620 6f 72 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61  or sub-selects a
11630 6e 64 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c  nd "<expr> IN (<
11640 73 65 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 7d  select>)" */.  }
11650 20 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   x;.  CollSeq *p
11660 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Coll;        /* 
11670 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79  The collation ty
11680 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe of the column
11690 20 6f 72 20 30 20 2a 2f 0a 0a 20 20 2f 2a 20 49   or 0 */..  /* I
116a0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
116b0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
116c0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
116d0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
116e0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
116f0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
11700 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
11710 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
11720 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
11730 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
11740 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
11750 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
11760 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
11770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
117a0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 69  ******/..  int i
117b0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
117c0 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
117d0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
117e0 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
117f0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
11810 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
11820 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
11830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11840 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
11850 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
11860 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f 0a 20 20 79   0 -> old */.  y
11870 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
11880 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
11890 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
118a0 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
118b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
118c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
118d0 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
118e0 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
118f0 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31  s >= 1). */.  i1
11900 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
11910 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
11920 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
11930 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
11940 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
11950 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
11960 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
11970 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
11980 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
11990 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 32 3b 20  */.  u8 flags2; 
119a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
119b0 65 63 6f 6e 64 20 73 65 74 20 6f 66 20 66 6c 61  econd set of fla
119c0 67 73 2e 20 20 45 50 32 5f 2e 2e 2e 20 2a 2f 0a  gs.  EP2_... */.
119d0 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
119e0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 61           /* If a
119f0 20 54 4b 5f 52 45 47 49 53 54 45 52 2c 20 74 68   TK_REGISTER, th
11a00 65 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  e original value
11a10 20 6f 66 20 45 78 70 72 2e 6f 70 20 2a 2f 0a 20   of Expr.op */. 
11a20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
11a30 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
11a40 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
11a50 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
11a60 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
11a70 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
11a80 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
11a90 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
11aa0 6f 6e 73 2e 20 2a 2f 0a 23 69 66 20 53 51 4c 49  ons. */.#if SQLI
11ab0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
11ac0 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
11ad0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
11ae0 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
11af0 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
11b00 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
11b10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
11b20 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
11b30 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
11b40 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
11b50 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
11b60 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
11b70 6e 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f  n   0x0001  /* O
11b80 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20  riginated in ON 
11b90 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
11ba0 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  of a join */.#de
11bb0 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
11bc0 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 6f     0x0002  /* Co
11bd0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
11be0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
11bf0 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
11c00 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 20  e EP_Resolved   
11c10 30 78 30 30 30 34 20 20 2f 2a 20 49 44 73 20 68  0x0004  /* IDs h
11c20 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
11c30 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
11c40 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
11c50 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a        0x0008  /*
11c60 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
11c70 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
11c80 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
11c90 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
11ca0 20 30 78 30 30 31 30 20 20 2f 2a 20 41 67 67 72   0x0010  /* Aggr
11cb0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
11cc0 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
11cd0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
11ce0 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30 78  EP_VarSelect  0x
11cf0 30 30 32 30 20 20 2f 2a 20 70 53 65 6c 65 63 74  0020  /* pSelect
11d00 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
11d10 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
11d20 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
11d30 6f 74 65 64 20 20 30 78 30 30 34 30 20 20 2f 2a  oted  0x0040  /*
11d40 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
11d50 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
11d60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
11d70 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 38 30  nfixFunc  0x0080
11d80 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e    /* True for an
11d90 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
11da0 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
11db0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
11dc0 78 70 43 6f 6c 6c 61 74 65 20 30 78 30 31 30 30  xpCollate 0x0100
11dd0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
11de0 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69 65  equence specifie
11df0 64 20 65 78 70 6c 69 63 69 74 6c 79 20 2a 2f 0a  d explicitly */.
11e00 23 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65 64  #define EP_Fixed
11e10 44 65 73 74 20 20 30 78 30 32 30 30 20 20 2f 2a  Dest  0x0200  /*
11e20 20 52 65 73 75 6c 74 20 6e 65 65 64 65 64 20 69   Result needed i
11e30 6e 20 61 20 73 70 65 63 69 66 69 63 20 72 65 67  n a specific reg
11e40 69 73 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ister */.#define
11e50 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 20 30   EP_IntValue   0
11e60 78 30 34 30 30 20 20 2f 2a 20 49 6e 74 65 67 65  x0400  /* Intege
11e70 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65  r value containe
11e80 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f  d in u.iValue */
11e90 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53  .#define EP_xIsS
11ea0 65 6c 65 63 74 20 20 30 78 30 38 30 30 20 20 2f  elect  0x0800  /
11eb0 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  * x.pSelect is v
11ec0 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20  alid (otherwise 
11ed0 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 0a  x.pList is) */..
11ee0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
11ef0 65 64 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a  ed    0x1000  /*
11f00 20 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20   Expr struct is 
11f10 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
11f20 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
11f30 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
11f40 6e 6c 79 20 20 30 78 32 30 30 30 20 20 2f 2a 20  nly  0x2000  /* 
11f50 45 78 70 72 20 73 74 72 75 63 74 20 69 73 20 45  Expr struct is E
11f60 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
11f70 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
11f80 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69  #define EP_Stati
11f90 63 20 20 20 20 20 30 78 34 30 30 30 20 20 2f 2a  c     0x4000  /*
11fa0 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20   Held in memory 
11fb0 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  not obtained fro
11fc0 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 0a 2f  m malloc() */../
11fd0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
11fe0 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
11ff0 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
12000 68 65 20 45 78 70 72 2e 66 6c 61 67 73 32 20 66  he Expr.flags2 f
12010 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
12020 20 45 50 32 5f 4d 61 6c 6c 6f 63 65 64 54 6f 6b   EP2_MallocedTok
12030 65 6e 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4e  en  0x0001  /* N
12040 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62  eed to sqlite3Db
12050 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b  Free() Expr.zTok
12060 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  en */.#define EP
12070 32 5f 49 72 72 65 64 75 63 69 62 6c 65 20 20 20  2_Irreducible   
12080 20 30 78 30 30 30 32 20 20 2f 2a 20 43 61 6e 6e   0x0002  /* Cann
12090 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
120a0 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 0a  E this Expr */..
120b0 2f 2a 0a 2a 2a 20 54 68 65 20 70 73 65 75 64 6f  /*.** The pseudo
120c0 2d 72 6f 75 74 69 6e 65 20 73 71 6c 69 74 65 33  -routine sqlite3
120d0 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69 62  ExprSetIrreducib
120e0 6c 65 20 73 65 74 73 20 74 68 65 20 45 50 32 5f  le sets the EP2_
120f0 49 72 72 65 64 75 63 69 62 6c 65 0a 2a 2a 20 66  Irreducible.** f
12100 6c 61 67 20 6f 6e 20 61 6e 20 65 78 70 72 65 73  lag on an expres
12110 73 69 6f 6e 20 73 74 72 75 63 74 75 72 65 2e 20  sion structure. 
12120 20 54 68 69 73 20 66 6c 61 67 20 69 73 20 75 73   This flag is us
12130 65 64 20 66 6f 72 20 56 56 26 41 20 6f 6e 6c 79  ed for VV&A only
12140 2e 20 20 54 68 65 0a 2a 2a 20 72 6f 75 74 69 6e  .  The.** routin
12150 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  e is implemented
12160 20 61 73 20 61 20 6d 61 63 72 6f 20 74 68 61 74   as a macro that
12170 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 77 68 65 6e   only works when
12180 20 69 6e 20 64 65 62 75 67 67 69 6e 67 20 6d 6f   in debugging mo
12190 64 65 2c 0a 2a 2a 20 73 6f 20 61 73 20 6e 6f 74  de,.** so as not
121a0 20 74 6f 20 62 75 72 64 65 6e 20 70 72 6f 64 75   to burden produ
121b0 63 74 69 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23  ction code..*/.#
121c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
121d0 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
121e0 53 65 74 49 72 72 65 64 75 63 69 62 6c 65 28 58  SetIrreducible(X
121f0 29 20 20 28 58 29 2d 3e 66 6c 61 67 73 32 20 7c  )  (X)->flags2 |
12200 3d 20 45 50 32 5f 49 72 72 65 64 75 63 69 62 6c  = EP2_Irreducibl
12210 65 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  e.#else.# define
12220 20 45 78 70 72 53 65 74 49 72 72 65 64 75 63 69   ExprSetIrreduci
12230 62 6c 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  ble(X).#endif../
12240 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
12250 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
12260 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
12270 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
12280 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20   .** Expr.flags 
12290 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
122a0 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
122b0 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
122c0 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
122d0 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  )).#define ExprH
122e0 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 45 2c  asAnyProperty(E,
122f0 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
12300 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
12310 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
12320 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
12330 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
12340 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
12350 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
12360 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
12370 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
12380 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
12390 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75  er of bytes requ
123a0 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c  ired by a normal
123b0 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74   Expr .** struct
123c0 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
123d0 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
123e0 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
123f0 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20   Expr.flags .** 
12400 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
12410 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
12420 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
12430 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
12440 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
12450 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
12460 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
12470 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
12480 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
12490 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
124a0 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
124b0 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
124c0 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
124d0 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
124e0 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
124f0 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
12500 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
12510 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
12520 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
12530 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
12540 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
12550 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
12560 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c  nt .** above sql
12570 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f  ite3ExprDup() fo
12580 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64  r details..*/.#d
12590 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45  efine EXPRDUP_RE
125a0 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30  DUCE         0x0
125b0 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64  001  /* Used red
125c0 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e  uced-size Expr n
125d0 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  odes */../*.** A
125e0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
125f0 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
12600 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
12610 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
12620 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
12630 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
12640 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
12650 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
12660 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
12670 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
12680 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
12690 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
126a0 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
126b0 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
126c0 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
126d0 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
126e0 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
126f0 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
12700 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
12710 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
12720 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
12730 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
12740 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2f 0a 73  s not used..*/.s
12750 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
12760 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
12770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12780 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
12790 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
127a0 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20  /.  int nAlloc; 
127b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
127c0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
127d0 61 6c 6c 6f 63 61 74 65 64 20 62 65 6c 6f 77 20  allocated below 
127e0 2a 2f 0a 20 20 69 6e 74 20 69 45 43 75 72 73 6f  */.  int iECurso
127f0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  r;          /* V
12800 44 42 45 20 43 75 72 73 6f 72 20 61 73 73 6f 63  DBE Cursor assoc
12810 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
12820 45 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74  ExprList */.  st
12830 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
12840 65 6d 20 7b 0a 20 20 20 20 45 78 70 72 20 2a 70  em {.    Expr *p
12850 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
12860 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65  /* The list of e
12870 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
12880 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
12890 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
128a0 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
128b0 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
128c0 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
128d0 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
128e0 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
128f0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
12900 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
12910 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
12920 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
12930 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
12940 20 20 20 75 38 20 64 6f 6e 65 3b 20 20 20 20 20     u8 done;     
12950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66            /* A f
12960 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lag to indicate 
12970 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20  when processing 
12980 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  is finished */. 
12990 20 20 20 75 31 36 20 69 43 6f 6c 3b 20 20 20 20     u16 iCol;    
129a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
129b0 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
129c0 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
129d0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31  lt set */.    u1
129e0 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
129f0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
12a00 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b  to Parse.aAlias[
12a10 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ] for zName */. 
12a20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20   } *a;          
12a30 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
12a40 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 65 78  ntry for each ex
12a50 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  pression */.};..
12a60 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
12a70 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
12a80 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
12a90 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
12aa0 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
12ab0 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
12ac0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
12ad0 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
12ae0 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
12af0 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
12b00 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
12b10 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
12b20 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
12b30 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
12b40 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
12b50 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
12b60 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
12b70 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
12b80 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
12b90 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
12ba0 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
12bb0 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
12bc0 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
12bd0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
12be0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
12bf0 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
12c00 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
12c10 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
12c20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
12c30 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
12c40 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
12c50 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
12c60 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
12c70 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
12c80 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
12c90 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
12ca0 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
12cb0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
12cc0 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
12cd0 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
12ce0 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
12cf0 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
12d00 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
12d10 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
12d20 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
12d30 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
12d40 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
12d50 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
12d60 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
12d70 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
12d80 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
12d90 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
12da0 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
12db0 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
12dc0 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
12dd0 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
12de0 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
12df0 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
12e00 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
12e10 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
12e20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
12e30 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
12e40 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
12e50 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
12e60 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
12e70 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
12e80 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
12e90 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
12ea0 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
12eb0 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
12ec0 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
12ed0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f  t */.  int nAllo
12ee0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
12ef0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
12f00 6f 63 61 74 65 64 20 66 6f 72 20 61 5b 5d 20 62  ocated for a[] b
12f10 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
12f20 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
12f30 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
12f40 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
12f50 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
12f60 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
12f70 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
12f80 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
12f90 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
12fa0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
12fb0 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
12fc0 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
12fd0 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
12fe0 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
12ff0 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
13000 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
13010 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
13020 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69  /.typedef u64 Bi
13030 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  tmask;../*.** Th
13040 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
13050 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
13060 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
13070 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
13080 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
13090 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
130a0 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  k)*8))../*.** Th
130b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
130c0 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
130d0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
130e0 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
130f0 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
13100 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
13110 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
13120 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
13130 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
13140 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
13150 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
13160 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
13170 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
13180 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
13190 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
131a0 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
131b0 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
131c0 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
131d0 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
131e0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
131f0 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
13200 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
13210 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
13220 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
13230 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
13240 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
13250 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
13260 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
13270 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
13280 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
13290 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
132a0 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
132b0 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
132c0 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
132d0 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
132e0 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
132f0 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
13300 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
13310 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
13320 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
13330 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
13340 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
13350 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
13360 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
13370 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
13380 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
13390 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
133a0 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
133b0 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
133c0 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
133d0 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
133e0 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
133f0 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
13400 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
13410 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
13420 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
13430 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
13440 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
13450 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
13460 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
13470 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
13480 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
13490 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
134a0 73 74 20 7b 0a 20 20 69 31 36 20 6e 53 72 63 3b  st {.  i16 nSrc;
134b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
134c0 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
134d0 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
134e0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
134f0 20 20 69 31 36 20 6e 41 6c 6c 6f 63 3b 20 20 20    i16 nAlloc;   
13500 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13510 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
13520 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a  d in a[] below *
13530 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69  /.  struct SrcLi
13540 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68  st_item {.    ch
13550 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
13560 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
13570 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
13580 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
13590 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
135a0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
135b0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
135c0 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
135d0 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
135e0 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
135f0 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
13600 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
13610 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
13620 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
13630 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
13640 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
13650 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
13660 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
13670 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
13680 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
13690 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
136a0 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
136b0 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
136c0 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
136d0 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
136e0 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
136f0 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
13700 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
13710 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
13720 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 75 38  illSub */.    u8
13730 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
13740 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
13750 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
13760 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
13770 75 73 20 2a 2f 0a 20 20 20 20 75 38 20 6e 6f 74  us */.    u8 not
13780 49 6e 64 65 78 65 64 3b 20 20 20 20 2f 2a 20 54  Indexed;    /* T
13790 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
137a0 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
137b0 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 38 20 69  ause */.    u8 i
137c0 73 43 6f 72 72 65 6c 61 74 65 64 3b 20 20 2f 2a  sCorrelated;  /*
137d0 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65   True if sub-que
137e0 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ry is correlated
137f0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
13800 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
13810 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64      u8 iSelectId
13820 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c  ;     /* If pSel
13830 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f  ect!=0, the id o
13840 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  f the sub-select
13850 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69   in EQP */.#endi
13860 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  f.    int iCurso
13870 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
13880 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
13890 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
138a0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
138b0 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
138c0 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
138d0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
138e0 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
138f0 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
13900 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
13910 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
13920 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
13930 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
13940 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
13950 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
13960 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  */.    char *zIn
13970 64 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e  dex;     /* Iden
13980 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44  tifier from "IND
13990 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e  EXED BY <zIndex>
139a0 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  " clause */.    
139b0 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
139c0 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
139d0 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
139e0 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66  ng to zIndex, if
139f0 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d   any */.  } a[1]
13a00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13a10 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
13a20 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
13a30 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
13a40 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
13a50 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
13a60 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
13a70 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
13a80 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
13a90 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
13aa0 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
13ab0 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
13ac0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
13ad0 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
13ae0 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
13af0 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
13b00 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
13b10 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
13b20 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
13b30 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
13b40 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
13b50 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
13b60 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
13b70 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
13b80 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
13b90 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
13ba0 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
13bb0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
13bc0 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
13bd0 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
13be0 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
13bf0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
13c00 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
13c10 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
13c20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
13c30 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
13c40 0a 2a 2a 20 41 20 57 68 65 72 65 50 6c 61 6e 20  .** A WherePlan 
13c50 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 69 6e 66  object holds inf
13c60 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 64 65  ormation that de
13c70 73 63 72 69 62 65 73 20 61 20 6c 6f 6f 6b 75 70  scribes a lookup
13c80 0a 2a 2a 20 73 74 72 61 74 65 67 79 2e 0a 2a 2a  .** strategy..**
13c90 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  .** This object 
13ca0 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62  is intended to b
13cb0 65 20 6f 70 61 71 75 65 20 6f 75 74 73 69 64 65  e opaque outside
13cc0 20 6f 66 20 74 68 65 20 77 68 65 72 65 2e 63 20   of the where.c 
13cd0 6d 6f 64 75 6c 65 2e 0a 2a 2a 20 49 74 20 69 73  module..** It is
13ce0 20 69 6e 63 6c 75 64 65 64 20 68 65 72 65 20 6f   included here o
13cf0 6e 6c 79 20 73 6f 20 74 68 61 74 20 74 68 61 74  nly so that that
13d00 20 63 6f 6d 70 69 6c 65 72 20 77 69 6c 6c 20 6b   compiler will k
13d10 6e 6f 77 20 68 6f 77 20 62 69 67 20 69 74 0a 2a  now how big it.*
13d20 2a 20 69 73 2e 20 20 4e 6f 6e 65 20 6f 66 20 74  * is.  None of t
13d30 68 65 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69  he fields in thi
13d40 73 20 6f 62 6a 65 63 74 20 73 68 6f 75 6c 64 20  s object should 
13d50 62 65 20 75 73 65 64 20 6f 75 74 73 69 64 65 20  be used outside 
13d60 6f 66 0a 2a 2a 20 74 68 65 20 77 68 65 72 65 2e  of.** the where.
13d70 63 20 6d 6f 64 75 6c 65 2e 0a 2a 2a 0a 2a 2a 20  c module..**.** 
13d80 57 69 74 68 69 6e 20 74 68 65 20 75 6e 69 6f 6e  Within the union
13d90 2c 20 70 49 64 78 20 69 73 20 6f 6e 6c 79 20 75  , pIdx is only u
13da0 73 65 64 20 77 68 65 6e 20 77 73 46 6c 61 67 73  sed when wsFlags
13db0 26 57 48 45 52 45 5f 49 4e 44 45 58 45 44 20 69  &WHERE_INDEXED i
13dc0 73 20 74 72 75 65 2e 0a 2a 2a 20 70 54 65 72 6d  s true..** pTerm
13dd0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68   is only used wh
13de0 65 6e 20 77 73 46 6c 61 67 73 26 57 48 45 52 45  en wsFlags&WHERE
13df0 5f 4d 55 4c 54 49 5f 4f 52 20 69 73 20 74 72 75  _MULTI_OR is tru
13e00 65 2e 20 20 41 6e 64 20 70 56 74 61 62 49 64 78  e.  And pVtabIdx
13e10 0a 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  .** is only used
13e20 20 77 68 65 6e 20 77 73 46 6c 61 67 73 26 57 48   when wsFlags&WH
13e30 45 52 45 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  ERE_VIRTUALTABLE
13e40 20 69 73 20 74 72 75 65 2e 20 20 49 74 20 69 73   is true.  It is
13e50 20 6e 65 76 65 72 20 74 68 65 0a 2a 2a 20 63 61   never the.** ca
13e60 73 65 20 74 68 61 74 20 6d 6f 72 65 20 74 68 61  se that more tha
13e70 6e 20 6f 6e 65 20 6f 66 20 74 68 65 73 65 20 63  n one of these c
13e80 6f 6e 64 69 74 69 6f 6e 73 20 69 73 20 74 72 75  onditions is tru
13e90 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65  e..*/.struct Whe
13ea0 72 65 50 6c 61 6e 20 7b 0a 20 20 75 33 32 20 77  rePlan {.  u32 w
13eb0 73 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  sFlags;         
13ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 48 45            /* WHE
13ed0 52 45 5f 2a 20 66 6c 61 67 73 20 74 68 61 74 20  RE_* flags that 
13ee0 64 65 73 63 72 69 62 65 20 74 68 65 20 73 74 72  describe the str
13ef0 61 74 65 67 79 20 2a 2f 0a 20 20 75 33 32 20 6e  ategy */.  u32 n
13f00 45 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq;             
13f10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13f20 62 65 72 20 6f 66 20 3d 3d 20 63 6f 6e 73 74 72  ber of == constr
13f30 61 69 6e 74 73 20 2a 2f 0a 20 20 64 6f 75 62 6c  aints */.  doubl
13f40 65 20 6e 52 6f 77 3b 20 20 20 20 20 20 20 20 20  e nRow;         
13f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74            /* Est
13f60 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
13f70 20 72 6f 77 73 20 28 66 6f 72 20 45 51 50 29 20   rows (for EQP) 
13f80 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
13f90 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20   Index *pIdx;   
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fb0 2f 2a 20 49 6e 64 65 78 20 77 68 65 6e 20 57 48  /* Index when WH
13fc0 45 52 45 5f 49 4e 44 45 58 45 44 20 69 73 20 74  ERE_INDEXED is t
13fd0 72 75 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  rue */.    struc
13fe0 74 20 57 68 65 72 65 54 65 72 6d 20 2a 70 54 65  t WhereTerm *pTe
13ff0 72 6d 3b 20 20 20 20 20 20 20 2f 2a 20 57 48 45  rm;       /* WHE
14000 52 45 20 63 6c 61 75 73 65 20 74 65 72 6d 20 66  RE clause term f
14010 6f 72 20 4f 52 2d 73 65 61 72 63 68 20 2a 2f 0a  or OR-search */.
14020 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 64 65      sqlite3_inde
14030 78 5f 69 6e 66 6f 20 2a 70 56 74 61 62 49 64 78  x_info *pVtabIdx
14040 3b 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61  ;  /* Virtual ta
14050 62 6c 65 20 69 6e 64 65 78 20 74 6f 20 75 73 65  ble index to use
14060 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
14070 2a 0a 2a 2a 20 46 6f 72 20 65 61 63 68 20 6e 65  *.** For each ne
14080 73 74 65 64 20 6c 6f 6f 70 20 69 6e 20 61 20 57  sted loop in a W
14090 48 45 52 45 20 63 6c 61 75 73 65 20 69 6d 70 6c  HERE clause impl
140a0 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
140b0 57 68 65 72 65 49 6e 66 6f 0a 2a 2a 20 73 74 72  WhereInfo.** str
140c0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
140d0 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  a single instanc
140e0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
140f0 75 72 65 2e 20 20 54 68 69 73 20 73 74 72 75 63  ure.  This struc
14100 74 75 72 65 0a 2a 2a 20 69 73 20 69 6e 74 65 6e  ture.** is inten
14110 64 65 64 20 74 6f 20 62 65 20 70 72 69 76 61 74  ded to be privat
14120 65 20 74 68 65 20 74 68 65 20 77 68 65 72 65 2e  e the the where.
14130 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20 73 68 6f  c module and sho
14140 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63  uld not be.** ac
14150 63 65 73 73 20 6f 72 20 6d 6f 64 69 66 69 65 64  cess or modified
14160 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c 65   by other module
14170 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 49 64  s..**.** The pId
14180 78 49 6e 66 6f 20 66 69 65 6c 64 20 69 73 20 75  xInfo field is u
14190 73 65 64 20 74 6f 20 68 65 6c 70 20 70 69 63 6b  sed to help pick
141a0 20 74 68 65 20 62 65 73 74 20 69 6e 64 65 78 20   the best index 
141b0 6f 6e 20 61 0a 2a 2a 20 76 69 72 74 75 61 6c 20  on a.** virtual 
141c0 74 61 62 6c 65 2e 20 20 54 68 65 20 70 49 64 78  table.  The pIdx
141d0 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20 63 6f 6e  Info pointer con
141e0 74 61 69 6e 73 20 69 6e 64 65 78 69 6e 67 0a 2a  tains indexing.*
141f0 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  * information fo
14200 72 20 74 68 65 20 69 2d 74 68 20 74 61 62 6c 65  r the i-th table
14210 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
14220 75 73 65 20 62 65 66 6f 72 65 20 72 65 6f 72 64  use before reord
14230 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c 20 74 68  ering..** All th
14240 65 20 70 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74  e pIdxInfo point
14250 65 72 73 20 61 72 65 20 66 72 65 65 64 20 62 79  ers are freed by
14260 20 77 68 65 72 65 49 6e 66 6f 46 72 65 65 28 29   whereInfoFree()
14270 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a 2a 2a 20   in where.c..** 
14280 41 6c 6c 20 6f 74 68 65 72 20 69 6e 66 6f 72 6d  All other inform
14290 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 2d 74  ation in the i-t
142a0 68 20 57 68 65 72 65 4c 65 76 65 6c 20 6f 62 6a  h WhereLevel obj
142b0 65 63 74 20 66 6f 72 20 74 68 65 20 69 2d 74 68  ect for the i-th
142c0 20 74 61 62 6c 65 0a 2a 2a 20 61 66 74 65 72 20   table.** after 
142d0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 72 64 65  FROM clause orde
142e0 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ring..*/.struct 
142f0 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a 20 20 57  WhereLevel {.  W
14300 68 65 72 65 50 6c 61 6e 20 70 6c 61 6e 3b 20 20  herePlan plan;  
14310 20 20 20 20 20 2f 2a 20 71 75 65 72 79 20 70 6c       /* query pl
14320 61 6e 20 66 6f 72 20 74 68 69 73 20 65 6c 65 6d  an for this elem
14330 65 6e 74 20 6f 66 20 74 68 65 20 46 52 4f 4d 20  ent of the FROM 
14340 63 6c 61 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  clause */.  int 
14350 69 4c 65 66 74 4a 6f 69 6e 3b 20 20 20 20 20 20  iLeftJoin;      
14360 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    /* Memory cell
14370 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
14380 6e 74 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f  nt LEFT OUTER JO
14390 49 4e 20 2a 2f 0a 20 20 69 6e 74 20 69 54 61 62  IN */.  int iTab
143a0 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Cur;          /*
143b0 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
143c0 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
143d0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  the table */.  i
143e0 6e 74 20 69 49 64 78 43 75 72 3b 20 20 20 20 20  nt iIdxCur;     
143f0 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
14400 20 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20   cursor used to 
14410 61 63 63 65 73 73 20 70 49 64 78 20 2a 2f 0a 20  access pIdx */. 
14420 20 69 6e 74 20 61 64 64 72 42 72 6b 3b 20 20 20   int addrBrk;   
14430 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
14440 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f 75 74  ere to break out
14450 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a   of the loop */.
14460 20 20 69 6e 74 20 61 64 64 72 4e 78 74 3b 20 20    int addrNxt;  
14470 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
14480 68 65 72 65 20 74 6f 20 73 74 61 72 74 20 74 68  here to start th
14490 65 20 6e 65 78 74 20 49 4e 20 63 6f 6d 62 69 6e  e next IN combin
144a0 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 61  ation */.  int a
144b0 64 64 72 43 6f 6e 74 3b 20 20 20 20 20 20 20 20  ddrCont;        
144c0 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f   /* Jump here to
144d0 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74   continue with t
144e0 68 65 20 6e 65 78 74 20 6c 6f 6f 70 20 63 79 63  he next loop cyc
144f0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  le */.  int addr
14500 46 69 72 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  First;        /*
14510 20 46 69 72 73 74 20 69 6e 73 74 72 75 63 74 69   First instructi
14520 6f 6e 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 6f  on of interior o
14530 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20  f the loop */.  
14540 75 38 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  u8 iFrom;       
14550 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
14560 6e 74 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  ntry in the FROM
14570 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20   clause */.  u8 
14580 6f 70 2c 20 70 35 3b 20 20 20 20 20 20 20 20 20  op, p5;         
14590 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 61 6e 64     /* Opcode and
145a0 20 50 35 20 6f 66 20 74 68 65 20 6f 70 63 6f 64   P5 of the opcod
145b0 65 20 74 68 61 74 20 65 6e 64 73 20 74 68 65 20  e that ends the 
145c0 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 70 31  loop */.  int p1
145d0 2c 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  , p2;           
145e0 2f 2a 20 4f 70 65 72 61 6e 64 73 20 6f 66 20 74  /* Operands of t
145f0 68 65 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  he opcode used t
14600 6f 20 65 6e 64 73 20 74 68 65 20 6c 6f 6f 70 20  o ends the loop 
14610 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
14620 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
14630 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 64  formation that d
14640 65 70 65 6e 64 73 20 6f 6e 20 70 6c 61 6e 2e 77  epends on plan.w
14650 73 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20 73 74  sFlags */.    st
14660 72 75 63 74 20 7b 0a 20 20 20 20 20 20 69 6e 74  ruct {.      int
14670 20 6e 49 6e 3b 20 20 20 20 20 20 20 20 20 20 20   nIn;           
14680 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14690 65 6e 74 72 69 65 73 20 69 6e 20 61 49 6e 4c 6f  entries in aInLo
146a0 6f 70 5b 5d 20 2a 2f 0a 20 20 20 20 20 20 73 74  op[] */.      st
146b0 72 75 63 74 20 49 6e 4c 6f 6f 70 20 7b 0a 20 20  ruct InLoop {.  
146c0 20 20 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20        int iCur; 
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
146e0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
146f0 75 73 65 64 20 62 79 20 74 68 69 73 20 49 4e 20  used by this IN 
14700 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  operator */.    
14710 20 20 20 20 69 6e 74 20 61 64 64 72 49 6e 54 6f      int addrInTo
14720 70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  p;         /* To
14730 70 20 6f 66 20 74 68 65 20 49 4e 20 6c 6f 6f 70  p of the IN loop
14740 20 2a 2f 0a 20 20 20 20 20 20 7d 20 2a 61 49 6e   */.      } *aIn
14750 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  Loop;           
14760 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
14770 62 6f 75 74 20 65 61 63 68 20 6e 65 73 74 65 64  bout each nested
14780 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a   IN operator */.
14790 20 20 20 20 7d 20 69 6e 3b 20 20 20 20 20 20 20      } in;       
147a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
147b0 64 20 77 68 65 6e 20 70 6c 61 6e 2e 77 73 46 6c  d when plan.wsFl
147c0 61 67 73 26 57 48 45 52 45 5f 49 4e 5f 41 42 4c  ags&WHERE_IN_ABL
147d0 45 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  E */.  } u;..  /
147e0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
147f0 66 69 65 6c 64 20 69 73 20 72 65 61 6c 6c 79 20  field is really 
14800 6e 6f 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  not part of the 
14810 63 75 72 72 65 6e 74 20 6c 65 76 65 6c 2e 20 20  current level.  
14820 42 75 74 0a 20 20 2a 2a 20 77 65 20 6e 65 65 64  But.  ** we need
14830 20 61 20 70 6c 61 63 65 20 74 6f 20 63 61 63 68   a place to cach
14840 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
14850 69 6e 64 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f  index informatio
14860 6e 20 66 6f 72 20 65 61 63 68 0a 20 20 2a 2a 20  n for each.  ** 
14870 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
14880 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
14890 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 4c 65   and the WhereLe
148a0 76 65 6c 20 73 74 72 75 63 74 75 72 65 20 69 73  vel structure is
148b0 0a 20 20 2a 2a 20 61 20 63 6f 6e 76 65 6e 69 65  .  ** a convenie
148c0 6e 74 20 70 6c 61 63 65 20 73 69 6e 63 65 20 74  nt place since t
148d0 68 65 72 65 20 69 73 20 6f 6e 65 20 57 68 65 72  here is one Wher
148e0 65 4c 65 76 65 6c 20 66 6f 72 20 65 61 63 68 20  eLevel for each 
148f0 46 52 4f 4d 20 63 6c 61 75 73 65 0a 20 20 2a 2a  FROM clause.  **
14900 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20   element..  */. 
14910 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
14920 6e 66 6f 20 2a 70 49 64 78 49 6e 66 6f 3b 20 20  nfo *pIdxInfo;  
14930 2f 2a 20 49 6e 64 65 78 20 69 6e 66 6f 20 66 6f  /* Index info fo
14940 72 20 6e 2d 74 68 20 73 6f 75 72 63 65 20 74 61  r n-th source ta
14950 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
14960 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61   Flags appropria
14970 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c  te for the wctrl
14980 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20  Flags parameter 
14990 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  of sqlite3WhereB
149a0 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68  egin().** and th
149b0 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72  e WhereInfo.wctr
149c0 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a  lFlags member..*
149d0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
149e0 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
149f0 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
14a00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14a10 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
14a20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
14a30 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
14a40 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
14a50 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14a60 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
14a70 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
14a80 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
14a90 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
14aa0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14ab0 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
14ac0 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
14ad0 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
14ae0 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
14af0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55  #define WHERE_DU
14b00 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30  PLICATES_OK    0
14b10 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72  x0008 /* Ok to r
14b20 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65  eturn a row more
14b30 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64   than once */.#d
14b40 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54  efine WHERE_OMIT
14b50 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30  _OPEN_CLOSE  0x0
14b60 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72  010 /* Table cur
14b70 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79  sors are already
14b80 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
14b90 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42   WHERE_FORCE_TAB
14ba0 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20 2f  LE      0x0020 /
14bb0 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20  * Do not use an 
14bc0 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63  index-only searc
14bd0 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  h */.#define WHE
14be0 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59  RE_ONETABLE_ONLY
14bf0 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e      0x0040 /* On
14c00 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20  ly code the 1st 
14c10 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73  table in pTabLis
14c20 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
14c30 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20  RE_AND_ONLY     
14c40 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 6f      0x0080 /* Do
14c50 6e 27 74 20 75 73 65 20 69 6e 64 69 63 65 73 20  n't use indices 
14c60 66 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a  for OR terms */.
14c70 0a 2f 2a 0a 2a 2a 20 54 68 65 20 57 48 45 52 45  ./*.** The WHERE
14c80 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
14c90 6e 67 20 72 6f 75 74 69 6e 65 20 68 61 73 20 74  ng routine has t
14ca0 77 6f 20 68 61 6c 76 65 73 2e 20 20 54 68 65 0a  wo halves.  The.
14cb0 2a 2a 20 66 69 72 73 74 20 70 61 72 74 20 64 6f  ** first part do
14cc0 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  es the start of 
14cd0 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 61  the WHERE loop a
14ce0 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a  nd the second.**
14cf0 20 68 61 6c 66 20 64 6f 65 73 20 74 68 65 20 74   half does the t
14d00 61 69 6c 20 6f 66 20 74 68 65 20 57 48 45 52 45  ail of the WHERE
14d10 20 6c 6f 6f 70 2e 20 20 41 6e 20 69 6e 73 74 61   loop.  An insta
14d20 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73  nce of.** this s
14d30 74 72 75 63 74 75 72 65 20 69 73 20 72 65 74 75  tructure is retu
14d40 72 6e 65 64 20 62 79 20 74 68 65 20 66 69 72 73  rned by the firs
14d50 74 20 68 61 6c 66 20 61 6e 64 20 70 61 73 73 65  t half and passe
14d60 64 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 65  d.** into the se
14d70 63 6f 6e 64 20 68 61 6c 66 20 74 6f 20 67 69 76  cond half to giv
14d80 65 20 73 6f 6d 65 20 63 6f 6e 74 69 6e 75 69 74  e some continuit
14d90 79 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65  y..*/.struct Whe
14da0 72 65 49 6e 66 6f 20 7b 0a 20 20 50 61 72 73 65  reInfo {.  Parse
14db0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
14dc0 2f 2a 20 50 61 72 73 69 6e 67 20 61 6e 64 20 63  /* Parsing and c
14dd0 6f 64 65 20 67 65 6e 65 72 61 74 69 6e 67 20 63  ode generating c
14de0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 75 31 36 20  ontext */.  u16 
14df0 77 63 74 72 6c 46 6c 61 67 73 3b 20 20 20 20 20  wctrlFlags;     
14e00 20 2f 2a 20 46 6c 61 67 73 20 6f 72 69 67 69 6e   /* Flags origin
14e10 61 6c 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73  ally passed to s
14e20 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
14e30 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 4f 6e 65  () */.  u8 okOne
14e40 50 61 73 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  Pass;        /* 
14e50 4f 6b 20 74 6f 20 75 73 65 20 6f 6e 65 2d 70 61  Ok to use one-pa
14e60 73 73 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72  ss algorithm for
14e70 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
14e80 45 20 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73 74  E */.  u8 untest
14e90 65 64 54 65 72 6d 73 3b 20 20 20 20 2f 2a 20 4e  edTerms;    /* N
14ea0 6f 74 20 61 6c 6c 20 57 48 45 52 45 20 74 65 72  ot all WHERE ter
14eb0 6d 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 6f  ms resolved by o
14ec0 75 74 65 72 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75  uter loop */.  u
14ed0 38 20 65 44 69 73 74 69 6e 63 74 3b 0a 20 20 53  8 eDistinct;.  S
14ee0 72 63 4c 69 73 74 20 2a 70 54 61 62 4c 69 73 74  rcList *pTabList
14ef0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14f00 20 4c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   List of tables 
14f10 69 6e 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  in the join */. 
14f20 20 69 6e 74 20 69 54 6f 70 3b 20 20 20 20 20 20   int iTop;      
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 2f 2a 20 54 68 65 20 76 65 72 79 20 62 65 67 69  /* The very begi
14f50 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 57 48 45  nning of the WHE
14f60 52 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 69 6e 74  RE loop */.  int
14f70 20 69 43 6f 6e 74 69 6e 75 65 3b 20 20 20 20 20   iContinue;     
14f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a              /* J
14f90 75 6d 70 20 68 65 72 65 20 74 6f 20 63 6f 6e 74  ump here to cont
14fa0 69 6e 75 65 20 77 69 74 68 20 6e 65 78 74 20 72  inue with next r
14fb0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ecord */.  int i
14fc0 42 72 65 61 6b 3b 20 20 20 20 20 20 20 20 20 20  Break;          
14fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
14fe0 70 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20  p here to break 
14ff0 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  out of the loop 
15000 2a 2f 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b  */.  int nLevel;
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15020 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15030 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 2a 2f 0a   nested loop */.
15040 20 20 73 74 72 75 63 74 20 57 68 65 72 65 43 6c    struct WhereCl
15050 61 75 73 65 20 2a 70 57 43 3b 20 20 20 20 20 20  ause *pWC;      
15060 20 2f 2a 20 44 65 63 6f 6d 70 6f 73 69 74 69 6f   /* Decompositio
15070 6e 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 63  n of the WHERE c
15080 6c 61 75 73 65 20 2a 2f 0a 20 20 64 6f 75 62 6c  lause */.  doubl
15090 65 20 73 61 76 65 64 4e 51 75 65 72 79 4c 6f 6f  e savedNQueryLoo
150a0 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 70 50 61  p;        /* pPa
150b0 72 73 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70 20  rse->nQueryLoop 
150c0 6f 75 74 73 69 64 65 20 74 68 65 20 57 48 45 52  outside the WHER
150d0 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75 62  E loop */.  doub
150e0 6c 65 20 6e 52 6f 77 4f 75 74 3b 20 20 20 20 20  le nRowOut;     
150f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73             /* Es
15100 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
15110 66 20 6f 75 74 70 75 74 20 72 6f 77 73 20 2a 2f  f output rows */
15120 0a 20 20 57 68 65 72 65 4c 65 76 65 6c 20 61 5b  .  WhereLevel a[
15130 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  1];             
15140 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
15150 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73 74   about each nest
15160 20 6c 6f 6f 70 20 69 6e 20 57 48 45 52 45 20 2a   loop in WHERE *
15170 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 57 48  /.};..#define WH
15180 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49  ERE_DISTINCT_UNI
15190 51 55 45 20 31 0a 23 64 65 66 69 6e 65 20 57 48  QUE 1.#define WH
151a0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
151b0 45 52 45 44 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20  ERED 2../*.** A 
151c0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69  NameContext defi
151d0 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e  nes a context in
151e0 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76   which to resolv
151f0 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75  e table and colu
15200 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68  mn.** names.  Th
15210 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73  e context consis
15220 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20  ts of a list of 
15230 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63  tables (the pSrc
15240 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a  List) field and.
15250 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d  ** a list of nam
15260 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70  ed expression (p
15270 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d  EList).  The nam
15280 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  ed expression li
15290 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c  st may.** be NUL
152a0 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72  L.  The pSrc cor
152b0 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
152c0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
152d0 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f   SELECT or.** to
152e0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
152f0 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20   operated on by 
15300 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20  INSERT, UPDATE, 
15310 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a  or DELETE.  The.
15320 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73  ** pEList corres
15330 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73  ponds to the res
15340 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c  ult set of a SEL
15350 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20  ECT and is NULL 
15360 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61  for.** other sta
15370 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e  tements..**.** N
15380 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20  ameContexts can 
15390 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e  be nested.  When
153a0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
153b0 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74  , the inner-most
153c0 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20   .** context is 
153d0 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
153e0 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
153f0 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
15400 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
15410 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
15420 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
15430 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
15440 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
15450 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
15460 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
15470 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
15480 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
15490 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
154a0 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
154b0 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
154c0 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
154d0 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
154e0 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
154f0 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
15500 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a  incremented. .**
15510 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72  .** Each subquer
15520 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d  y gets a new Nam
15530 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70  eContext.  The p
15540 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74  Next field point
15550 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  s to the.** Name
15560 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70  Context in the p
15570 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68  arent query.  Th
15580 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f  us the process o
15590 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a  f scanning the.*
155a0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69  * NameContext li
155b0 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
155c0 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f  o searching thro
155d0 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79  ugh successively
155e0 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65   outer.** subque
155f0 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  ries looking for
15600 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72   a match..*/.str
15610 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  uct NameContext 
15620 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
15630 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  e;       /* The 
15640 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c  parser */.  SrcL
15650 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
15660 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
15670 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72  tables used to r
15680 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a  esolve names */.
15690 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
156a0 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e  st;    /* Option
156b0 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64  al list of named
156c0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
156d0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
156e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
156f0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
15700 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
15710 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
15720 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15730 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
15740 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
15750 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
15760 65 73 20 2a 2f 0a 20 20 75 38 20 61 6c 6c 6f 77  es */.  u8 allow
15770 41 67 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Agg;         /* 
15780 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
15790 6f 6e 73 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  ons allowed here
157a0 20 2a 2f 0a 20 20 75 38 20 68 61 73 41 67 67 3b   */.  u8 hasAgg;
157b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
157c0 75 65 20 69 66 20 61 67 67 72 65 67 61 74 65 73  ue if aggregates
157d0 20 61 72 65 20 73 65 65 6e 20 2a 2f 0a 20 20 75   are seen */.  u
157e0 38 20 69 73 43 68 65 63 6b 3b 20 20 20 20 20 20  8 isCheck;      
157f0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
15800 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
15810 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  n a CHECK constr
15820 61 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 44  aint */.  int nD
15830 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  epth;          /
15840 2a 20 44 65 70 74 68 20 6f 66 20 73 75 62 71 75  * Depth of subqu
15850 65 72 79 20 72 65 63 75 72 73 69 6f 6e 2e 20 31  ery recursion. 1
15860 20 66 6f 72 20 6e 6f 20 72 65 63 75 72 73 69 6f   for no recursio
15870 6e 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  n */.  AggInfo *
15880 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49  pAggInfo;   /* I
15890 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
158a0 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74   aggregates at t
158b0 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e  his level */.  N
158c0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78  ameContext *pNex
158d0 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65  t;  /* Next oute
158e0 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20  r name context. 
158f0 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d   NULL for outerm
15900 6f 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ost */.};../*.**
15910 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
15920 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
15930 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
15940 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
15950 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
15960 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
15970 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
15980 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
15990 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74   nLimit is set t
159a0 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73  o -1 if there is
159b0 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65   no LIMIT clause
159c0 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65  .  nOffset is se
159d0 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68  t to 0..** If th
159e0 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63  ere is a LIMIT c
159f0 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65  lause, the parse
15a00 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f  r sets nLimit to
15a10 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
15a20 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e  e.** limit and n
15a30 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61  Offset to the va
15a40 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65  lue of the offse
15a50 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65  t (or 0 if there
15a60 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65   is not.** offse
15a70 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f  t).  But later o
15a80 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f  n, nLimit and nO
15a90 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65  ffset become the
15aa0 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
15ab0 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45  s.** in the VDBE
15ac0 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65   that record the
15ad0 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65   limit and offse
15ae0 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a  t counters..**.*
15af0 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d  * addrOpenEphm[]
15b00 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e   entries contain
15b10 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
15b20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
15b30 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65   opcodes..** The
15b40 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73  se addresses mus
15b50 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74  t be stored so t
15b60 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61  hat we can go ba
15b70 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a  ck and fill in.*
15b80 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f  * the P4_KEYINFO
15b90 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65   and P2 paramete
15ba0 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68  rs later.  Neith
15bb0 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e  er the KeyInfo n
15bc0 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  or.** the number
15bd0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50   of columns in P
15be0 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65  2 can be compute
15bf0 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  d at the same ti
15c00 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f  me.** as the OP_
15c10 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63  OpenEphm instruc
15c20 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65  tion is coded be
15c30 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f  cause not.** eno
15c40 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ugh information 
15c50 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75  about the compou
15c60 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77  nd query is know
15c70 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e  n at that point.
15c80 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  .** The KeyInfo 
15c90 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e  for addrOpenTran
15ca0 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74  [0] and [1] cont
15cb0 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ains collating s
15cc0 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20  equences.** for 
15cd0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20  the result set. 
15ce0 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72   The KeyInfo for
15cf0 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 32 5d   addrOpenTran[2]
15d00 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
15d10 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73  ing.** sequences
15d20 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42   for the ORDER B
15d30 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  Y clause..*/.str
15d40 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45  uct Select {.  E
15d50 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
15d60 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65        /* The fie
15d70 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  lds of the resul
15d80 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  t */.  u8 op;   
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15da0 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f   One of: TK_UNIO
15db0 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45  N TK_ALL TK_INTE
15dc0 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20  RSECT TK_EXCEPT 
15dd0 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
15de0 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ty;         /* M
15df0 61 6b 65 52 65 63 6f 72 64 20 77 69 74 68 20 74  akeRecord with t
15e00 68 69 73 20 61 66 66 69 6e 69 74 79 20 66 6f 72  his affinity for
15e10 20 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 75 31   SRT_Set */.  u1
15e20 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20  6 selFlags;     
15e30 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
15e40 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  SF_* values */. 
15e50 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
15e60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
15e70 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
15e80 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
15e90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
15ea0 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
15eb0 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
15ec0 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
15ed0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
15ee0 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
15ef0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
15f00 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
15f10 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
15f20 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
15f30 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
15f40 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
15f50 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
15f60 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
15f70 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
15f80 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
15f90 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
15fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
15fb0 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
15fc0 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
15fd0 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  d */.  Select *p
15fe0 52 69 67 68 74 6d 6f 73 74 3b 20 20 20 20 2f 2a  Rightmost;    /*
15ff0 20 52 69 67 68 74 2d 6d 6f 73 74 20 73 65 6c 65   Right-most sele
16000 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
16010 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
16020 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  t */.  Expr *pLi
16030 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
16040 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
16050 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
16060 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70  t used. */.  Exp
16070 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20  r *pOffset;     
16080 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78      /* OFFSET ex
16090 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
160a0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
160b0 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
160c0 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
160d0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
160e0 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
160f0 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
16100 2f 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e  /.  int addrOpen
16110 45 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20 4f 50  Ephm[3];   /* OP
16120 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64  _OpenEphem opcod
16130 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68  es related to th
16140 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 64  is select */.  d
16150 6f 75 62 6c 65 20 6e 53 65 6c 65 63 74 52 6f 77  ouble nSelectRow
16160 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
16170 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  ed number of res
16180 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 7d 3b 0a 0a  ult rows */.};..
16190 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
161a0 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
161b0 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
161c0 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
161d0 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
161e0 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69   Flag"..*/.#defi
161f0 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
16200 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 4f        0x01  /* O
16210 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
16220 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
16230 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
16240 20 20 20 20 20 20 20 30 78 30 32 20 20 2f 2a 20         0x02  /* 
16250 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
16260 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
16270 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
16280 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30  regate       0x0
16290 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  4  /* Contains a
162a0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
162b0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
162c0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
162d0 20 30 78 30 38 20 20 2f 2a 20 55 73 65 73 20 74   0x08  /* Uses t
162e0 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
162f0 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
16300 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
16310 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20 73        0x10  /* s
16320 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
16330 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
16340 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
16350 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
16360 20 20 30 78 32 30 20 20 2f 2a 20 46 52 4f 4d 20    0x20  /* FROM 
16370 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
16380 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
16390 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
163a0 53 6f 72 74 65 72 20 20 20 20 20 20 20 30 78 34  Sorter       0x4
163b0 30 20 20 2f 2a 20 53 6f 72 74 20 75 73 69 6e 67  0  /* Sort using
163c0 20 61 20 73 6f 72 74 65 72 20 2a 2f 0a 0a 0a 2f   a sorter */.../
163d0 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73  *.** The results
163e0 20 6f 66 20 61 20 73 65 6c 65 63 74 20 63 61 6e   of a select can
163f0 20 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20   be distributed 
16400 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2e  in several ways.
16410 20 20 54 68 65 0a 2a 2a 20 22 53 52 54 22 20 70    The.** "SRT" p
16420 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
16430 45 43 54 20 52 65 73 75 6c 74 20 54 79 70 65 22  ECT Result Type"
16440 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
16450 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
16460 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
16470 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
16480 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
16490 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
164a0 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
164b0 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
164c0 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
164d0 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
164e0 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
164f0 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
16500 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
16510 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
16520 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
16530 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
16540 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
16550 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
16560 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
16570 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
16580 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
16590 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
165a0 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
165b0 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 63 61  Dest)<=SRT_Disca
165c0 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  rd)..#define SRT
165d0 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 35 20  _Output       5 
165e0 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
165f0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
16600 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
16610 20 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a 20            6  /* 
16620 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
16630 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
16640 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
16650 20 20 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20            7  /* 
16660 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
16670 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
16680 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
16690 5f 54 61 62 6c 65 20 20 20 20 20 20 20 20 38 20  _Table        8 
166a0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
166b0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
166c0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
166d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
166e0 45 70 68 65 6d 54 61 62 20 20 20 20 20 39 20 20  EphemTab     9  
166f0 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
16700 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
16710 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
16720 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16730 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 30 20 20  Coroutine   10  
16740 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
16750 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
16760 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  lt */../*.** A s
16770 74 72 75 63 74 75 72 65 20 75 73 65 64 20 74 6f  tructure used to
16780 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20 62   customize the b
16790 65 68 61 76 69 6f 72 20 6f 66 20 73 71 6c 69 74  ehavior of sqlit
167a0 65 33 53 65 6c 65 63 74 28 29 2e 20 53 65 65 0a  e3Select(). See.
167b0 2a 2a 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  ** comments abov
167c0 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28  e sqlite3Select(
167d0 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
167e0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
167f0 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
16800 63 74 44 65 73 74 3b 0a 73 74 72 75 63 74 20 53  ctDest;.struct S
16810 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
16820 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
16830 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
16840 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
16850 20 2a 2f 0a 20 20 75 38 20 61 66 66 69 6e 69 74   */.  u8 affinit
16860 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
16870 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
16880 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
16890 20 20 69 6e 74 20 69 50 61 72 6d 3b 20 20 20 20    int iParm;    
168a0 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
168b0 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
168c0 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
168d0 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  thod */.  int iM
168e0 65 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 42  em;         /* B
168f0 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65  ase register whe
16900 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77  re results are w
16910 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
16920 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  nMem;         /*
16930 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
16940 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
16950 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
16960 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
16970 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
16980 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
16990 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
169a0 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20  ENT .** tables, 
169b0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
169c0 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74  formation is att
169d0 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62  ached to the Tab
169e0 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a  le.u.autoInc.p.*
169f0 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63  * pointer of eac
16a00 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  h autoincrement 
16a10 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20  table to record 
16a20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d  some side inform
16a30 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68  ation that.** th
16a40 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
16a50 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65   needs.  We have
16a60 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62   to keep per-tab
16a70 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  le autoincrement
16a80 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
16a90 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20  in case inserts 
16aa0 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20  are down within 
16ab0 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67  triggers.  Trigg
16ac0 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f  ers do not.** no
16ad0 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74  rmally coordinat
16ae0 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69  e their activiti
16af0 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65  es, but we do ne
16b00 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65  ed to coordinate
16b10 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20   the.** loading 
16b20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75  and saving of au
16b30 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f  toincrement info
16b40 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
16b50 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b  ct AutoincInfo {
16b60 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
16b70 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74  pNext;   /* Next
16b80 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61   info block in a
16b90 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c   list of them al
16ba0 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  l */.  Table *pT
16bb0 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ab;          /* 
16bc0 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20  Table this info 
16bd0 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20  block refers to 
16be0 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
16bf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
16c00 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  dex in sqlite3.a
16c10 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65  Db[] of database
16c20 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f   holding pTab */
16c30 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20  .  int regCtr;  
16c40 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
16c50 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64  ry register hold
16c60 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f  ing the rowid co
16c70 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unter */.};../*.
16c80 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63  ** Size of the c
16c90 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23  olumn cache.*/.#
16ca0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f  ifndef SQLITE_N_
16cb0 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e  COLCACHE.# defin
16cc0 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e SQLITE_N_COLCA
16cd0 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f  CHE 10.#endif../
16ce0 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e  *.** At least on
16cf0 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
16d00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
16d10 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64  cture is created
16d20 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72   for each .** tr
16d30 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62  igger that may b
16d40 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61  e fired while pa
16d50 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c  rsing an INSERT,
16d60 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
16d70 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20  E.** statement. 
16d80 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73  All such objects
16d90 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
16da0 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  he linked list h
16db0 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73  eaded at.** Pars
16dc0 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e  e.pTriggerPrg an
16dd0 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73  d deleted once s
16de0 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61  tatement compila
16df0 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a  tion has been.**
16e00 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a   completed..**.*
16e10 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f  * A Vdbe sub-pro
16e20 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d  gram that implem
16e30 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e  ents the body an
16e40 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  d WHEN clause of
16e50 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67   trigger.** Trig
16e60 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c  gerPrg.pTrigger,
16e70 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61   assuming a defa
16e80 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
16e90 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69  clause of.** Tri
16ea0 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20  ggerPrg.orconf, 
16eb0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
16ec0 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f   TriggerPrg.pPro
16ed0 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a  gram variable..*
16ee0 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69  * The Parse.pTri
16ef0 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76  ggerPrg list nev
16f00 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20  er contains two 
16f10 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65  entries with the
16f20 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20   same.** values 
16f30 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65  for both pTrigge
16f40 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a  r and orconf..**
16f50 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50  .** The TriggerP
16f60 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76  rg.aColmask[0] v
16f70 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
16f80 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e  o a mask of old.
16f90 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63  * columns.** acc
16fa0 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f  essed (or set to
16fb0 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20   0 for triggers 
16fc0 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c  fired as a resul
16fd0 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20  t of INSERT .** 
16fe0 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d  statements). Sim
16ff0 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67  ilarly, the Trig
17000 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
17010 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  1] variable is s
17020 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20  et to.** a mask 
17030 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
17040 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
17050 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  gram..*/.struct 
17060 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54  TriggerPrg {.  T
17070 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
17080 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  ;      /* Trigge
17090 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77  r this program w
170a0 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f  as coded from */
170b0 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20  .  int orconf;  
170c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
170d0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
170e0 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 53 75  T policy */.  Su
170f0 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
17100 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d  am;   /* Program
17110 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54   implementing pT
17120 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f  rigger/orconf */
17130 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
17140 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
17150 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
17160 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
17170 73 73 65 64 20 2a 2f 0a 20 20 54 72 69 67 67 65  ssed */.  Trigge
17180 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
17190 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
171a0 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
171b0 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a  rPrg list */.};.
171c0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61  ./*.** The yDbMa
171d0 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  sk datatype for 
171e0 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61  the bitmask of a
171f0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
17200 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51  bases..*/.#if SQ
17210 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
17220 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 73  D>30.  typedef s
17230 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 79 44  qlite3_uint64 yD
17240 62 4d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74  bMask;.#else.  t
17250 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
17260 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e  int yDbMask;.#en
17270 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
17280 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
17290 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
172a0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
172b0 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
172c0 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
172d0 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
172e0 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
172f0 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
17300 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
17310 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
17320 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
17330 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
17340 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
17350 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
17360 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
17370 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
17380 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
17390 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
173a0 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
173b0 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
173c0 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
173d0 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
173e0 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
173f0 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
17400 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
17410 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
17420 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
17430 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
17440 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
17450 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
17460 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
17470 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
17480 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20   .** feature is 
17490 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
174a0 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
174b0 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
174c0 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
174d0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
174e0 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
174f0 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
17500 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
17510 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
17520 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
17530 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
17540 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
17550 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
17560 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
17570 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
17580 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
17590 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
175a0 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
175b0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
175c0 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
175d0 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
175e0 6f 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  on */.  char *zE
175f0 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
17600 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
17610 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
17620 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
17630 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
17640 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
17650 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 75 38 20  ytecode */.  u8 
17660 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
17670 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
17680 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
17690 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
176a0 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
176b0 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
176c0 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
176d0 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
176e0 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
176f0 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
17700 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17710 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
17720 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
17730 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
17740 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
17750 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17760 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
17770 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
17780 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
17790 6e 54 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20  nTempInUse;     
177a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
177b0 54 65 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e  TempReg[] curren
177c0 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20  tly checked out 
177d0 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  */.  int aTempRe
177e0 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c  g[8];     /* Hol
177f0 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
17800 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
17810 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67  s */.  int nRang
17820 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53  eReg;       /* S
17830 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  ize of the tempo
17840 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
17850 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61  ock */.  int iRa
17860 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
17870 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
17880 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  in temporary reg
17890 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
178a0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
178b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
178c0 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
178d0 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20  /.  int nTab;   
178e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
178f0 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79  er of previously
17900 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20   allocated VDBE 
17910 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
17920 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
17930 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
17940 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
17950 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
17960 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20   nSet;          
17970 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
17980 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  ets used so far 
17990 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b  */.  int ckBase;
179a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
179b0 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64 61  e register of da
179c0 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20  ta during check 
179d0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
179e0 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c   int iCacheLevel
179f0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68  ;     /* ColCach
17a00 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f  e valid when aCo
17a10 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c  lCache[].iLevel<
17a20 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a  =iCacheLevel */.
17a30 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b    int iCacheCnt;
17a40 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
17a50 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  r used to genera
17a60 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c  te aColCache[].l
17a70 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  ru values */.  u
17a80 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 nColCache;    
17a90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17aa0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
17ab0 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75 38 20  Cache[] */.  u8 
17ac0 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20  iColCache;      
17ad0 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
17ae0 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 74  in aColCache[] t
17af0 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20 20 73  o replace */.  s
17b00 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
17b10 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
17b20 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
17b30 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
17b40 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
17b50 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
17b60 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
17b70 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
17b80 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
17b90 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
17ba0 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
17bb0 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
17bc0 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
17bd0 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
17be0 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
17bf0 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
17c00 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
17c10 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
17c20 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
17c30 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
17c40 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17c60 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
17c70 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
17c80 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
17c90 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
17ca0 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
17cb0 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
17cc0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
17cd0 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
17ce0 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
17cf0 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
17d00 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
17d10 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
17d20 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
17d30 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
17d40 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
17d50 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
17d60 61 62 61 73 65 73 20 2a 2f 0a 20 20 75 38 20 69  abases */.  u8 i
17d70 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20  sMultiWrite;    
17d80 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
17d90 65 6d 65 6e 74 20 6d 61 79 20 61 66 66 65 63 74  ement may affect
17da0 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65  /insert multiple
17db0 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61   rows */.  u8 ma
17dc0 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20  yAbort;         
17dd0 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
17de0 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61  ment may throw a
17df0 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
17e00 6e 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  n */.  int cooki
17e10 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41  eGoto;      /* A
17e20 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74  ddress of OP_Got
17e30 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69  o to cookie veri
17e40 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20  fier subroutine 
17e50 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56  */.  int cookieV
17e60 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  alue[SQLITE_MAX_
17e70 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a  ATTACHED+2];  /*
17e80 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69   Values of cooki
17e90 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a  es to verify */.
17ea0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
17eb0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
17ec0 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
17ed0 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
17ee0 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
17ef0 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
17f00 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
17f10 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
17f20 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
17f30 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
17f40 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
17f50 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
17f60 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
17f70 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
17f80 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
17f90 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
17fa0 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
17fb0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
17fc0 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
17fd0 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
17fe0 65 63 74 73 20 2a 2f 0a 20 20 41 75 74 6f 69 6e  ects */.  Autoin
17ff0 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
18000 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
18010 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
18020 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
18030 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
18040 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
18050 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
18060 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
18070 70 72 6f 67 72 61 6d 20 2a 2f 0a 0a 20 20 2f 2a  program */..  /*
18080 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
18090 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74  d while coding t
180a0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
180b0 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
180c0 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
180d0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
180e0 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
180f0 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
18100 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
18110 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
18120 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
18130 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 75 33  oded for */.  u3
18140 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20  2 oldmask;      
18150 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c     /* Mask of ol
18160 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  d.* columns refe
18170 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20  renced */.  u32 
18180 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  newmask;        
18190 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e   /* Mask of new.
181a0 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
181b0 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72  nced */.  u8 eTr
181c0 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f  iggerOp;       /
181d0 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  * TK_UPDATE, TK_
181e0 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c  INSERT or TK_DEL
181f0 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63  ETE */.  u8 eOrc
18200 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
18210 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   Default ON CONF
18220 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20  LICT policy for 
18230 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f  trigger steps */
18240 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69  .  u8 disableTri
18250 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20  ggers;  /* True 
18260 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  to disable trigg
18270 65 72 73 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  ers */.  double 
18280 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a  nQueryLoop;   /*
18290 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
182a0 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
182b0 6f 66 20 61 20 71 75 65 72 79 20 2a 2f 0a 0a 20  of a query */.. 
182c0 20 2f 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   /* Above is con
182d0 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
182e0 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
182f0 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
18300 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
18310 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 20 2a  each recursion *
18320 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20  /..  int nVar;  
18330 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18340 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
18350 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
18360 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
18370 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
18380 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18390 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
183a0 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
183b0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b  .  char **azVar;
183c0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
183d0 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
183e0 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
183f0 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
18400 3b 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67  ;    /* VM being
18410 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c   reprepared (sql
18420 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29  ite3Reprepare())
18430 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73   */.  int nAlias
18440 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
18450 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
18460 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
18470 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 41 6c  ns */.  int *aAl
18480 69 61 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ias;         /* 
18490 52 65 67 69 73 74 65 72 20 75 73 65 64 20 74 6f  Register used to
184a0 20 68 6f 6c 64 20 61 6c 69 61 73 65 64 20 72 65   hold aliased re
184b0 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 65 78 70  sult */.  u8 exp
184c0 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lain;          /
184d0 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
184e0 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
184f0 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
18500 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
18510 65 54 6f 6b 65 6e 3b 20 20 20 20 2f 2a 20 54 6f  eToken;    /* To
18520 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
18530 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
18540 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
18550 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
18560 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f    /* The last to
18570 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ken parsed */.  
18580 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
18590 6c 3b 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20  l;   /* All SQL 
185a0 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
185b0 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
185c0 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
185d0 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 2f 2a  pNewTable;    /*
185e0 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63   A table being c
185f0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52  onstructed by CR
18600 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
18610 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69  Trigger *pNewTri
18620 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69  gger;     /* Tri
18630 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74  gger under const
18640 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45  ruct by a CREATE
18650 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f   TRIGGER */.  co
18660 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
18670 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36  ontext; /* The 6
18680 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  th parameter to 
18690 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61  db->xAuth callba
186a0 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  cks */.#ifndef S
186b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
186c0 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
186d0 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
186e0 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65       /* Complete
186f0 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c   text of a modul
18700 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20  e argument */.  
18710 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
18720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
18730 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
18740 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
18750 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
18760 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
18770 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18780 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
18790 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  to lock */.  Tab
187a0 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
187b0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
187c0 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
187d0 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
187e0 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
187f0 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
18800 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
18810 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
18820 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
18830 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 20 20 54 61  b-select */.  Ta
18840 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
18850 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
18860 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74   Table objects t
18870 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63  o delete after c
18880 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69  ode gen */.  Tri
18890 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65  ggerPrg *pTrigge
188a0 72 50 72 67 3b 20 20 20 20 2f 2a 20 4c 69 6e 6b  rPrg;    /* Link
188b0 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
188c0 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 23 69   triggers */..#i
188d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
188e0 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20  T_EXPLAIN.  int 
188f0 69 53 65 6c 65 63 74 49 64 3b 0a 20 20 69 6e 74  iSelectId;.  int
18900 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 0a   iNextSelectId;.
18910 23 65 6e 64 69 66 0a 7d 3b 0a 0a 23 69 66 64 65  #endif.};..#ifde
18920 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
18930 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
18940 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
18950 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
18960 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
18970 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
18980 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
18990 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
189a0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
189b0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
189c0 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
189d0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
189e0 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
189f0 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
18a00 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
18a10 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
18a20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
18a30 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
18a40 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
18a50 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
18a60 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
18a70 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
18a80 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
18a90 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
18ab0 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
18ac0 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
18ad0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
18ae0 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 4f  or P5 value in O
18af0 50 5f 49 6e 73 65 72 74 20 61 6e 64 20 4f 50 5f  P_Insert and OP_
18b00 44 65 6c 65 74 65 0a 2a 2f 0a 23 64 65 66 69 6e  Delete.*/.#defin
18b10 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
18b20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
18b30 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
18b40 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23  db->nChange */.#
18b50 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
18b60 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
18b70 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
18b80 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
18b90 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
18ba0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
18bb0 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
18bc0 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
18bd0 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
18be0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
18bf0 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
18c00 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
18c10 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
18c20 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
18c30 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
18c40 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
18c50 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
18c60 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
18c70 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
18c80 6e 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  ne OPFLAG_CLEARC
18c90 41 43 48 45 20 20 20 20 30 78 32 30 20 20 20 20  ACHE    0x20    
18ca0 2f 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d  /* Clear pseudo-
18cb0 74 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20 4f  table cache in O
18cc0 50 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a  P_Column */../*.
18cd0 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
18ce0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
18cf0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
18d00 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
18d10 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
18d20 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
18d30 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
18d40 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
18d50 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
18d60 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
18d70 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
18d80 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
18d90 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
18da0 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
18db0 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
18dc0 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
18dd0 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
18de0 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
18df0 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
18e00 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
18e10 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
18e20 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
18e30 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
18e40 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
18e50 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
18e60 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
18e70 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
18e80 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
18e90 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
18ea0 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
18eb0 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
18ec0 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
18ed0 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
18ee0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
18ef0 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
18f00 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
18f10 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
18f20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
18f30 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
18f40 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
18f50 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
18f60 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
18f70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
18f80 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
18f90 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
18fa0 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
18fb0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
18fc0 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
18fd0 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
19000 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
19010 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
19020 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
19030 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
19040 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19060 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
19070 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
19080 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
19090 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
190a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
190b0 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
190c0 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
190d0 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
190e0 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
190f0 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
19100 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
19110 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
19120 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
19130 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
19140 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
19150 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
19160 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
19170 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19190 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
191a0 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
191b0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
191c0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
191d0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
191e0 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
191f0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
19200 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
19210 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
19220 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
19230 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
19240 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
19250 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
19260 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
19270 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
19280 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
19290 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
192a0 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
192b0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
192c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
192d0 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
192e0 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
192f0 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
19300 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
19310 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
19320 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
19330 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
19340 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
19350 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
19360 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
19370 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
19380 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
19390 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
193a0 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
193b0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
193c0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
193d0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
193e0 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
193f0 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
19400 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
19410 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
19420 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
19430 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
19440 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
19450 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
19460 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
19470 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
19480 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
19490 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
194a0 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
194b0 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
194c0 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
194d0 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
194e0 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
194f0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
19500 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
19510 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
19520 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
19530 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
19540 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
19550 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
19560 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
19570 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
19580 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
19590 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
195a0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
195b0 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
195c0 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
195d0 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
195e0 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
195f0 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
19600 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
19610 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
19620 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
19630 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
19640 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
19650 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
19660 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
19670 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
19680 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
19690 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
196a0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
196b0 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
196c0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
196d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
196e0 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
196f0 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
19700 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
19710 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
19720 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
19730 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
19740 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
19750 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
19760 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
19770 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
19780 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
19790 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
197a0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
197b0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
197c0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
197d0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
197e0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
197f0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
19800 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
19810 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
19820 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
19830 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
19840 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
19850 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
19860 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
19870 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
19880 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
19890 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
198a0 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
198b0 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74   TK_DELETE). * t
198c0 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
198d0 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
198e0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
198f0 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
19900 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
19910 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
19920 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
19930 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
19940 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
19950 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
19960 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
19970 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
19980 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
19990 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
199a0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
199b0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
199c0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
199d0 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a  update rows of..
199e0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
199f0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
19a00 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
19a10 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
19a20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
19a40 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
19a50 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
19a60 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
19a70 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
19a80 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
19a90 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
19ab0 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
19ac0 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
19ad0 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
19ae0 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
19af0 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
19b00 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  * . */.struct Tr
19b10 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
19b20 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
19b30 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
19b40 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
19b50 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
19b60 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
19b70 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
19b80 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
19b90 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
19ba0 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
19bb0 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
19bc0 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
19bd0 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
19be0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
19bf0 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
19c00 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  tatment or RHS o
19c10 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  f INSERT INTO ..
19c20 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
19c30 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20   Token target;  
19c40 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
19c50 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
19c60 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
19c70 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
19c80 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
19c90 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
19ca0 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
19cb0 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
19cc0 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
19cd0 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
19ce0 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 20 56  e for UPDATE.  V
19cf0 41 4c 55 45 53 20 63 6c 61 75 73 65 20 66 6f 72  ALUES clause for
19d00 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 49 64 4c   INSERT */.  IdL
19d10 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
19d20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
19d30 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
19d40 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
19d50 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
19d60 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
19d70 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
19d80 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
19d90 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
19da0 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
19db0 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
19dc0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
19dd0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
19de0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
19df0 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
19e00 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
19e10 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
19e20 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
19e30 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
19e40 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
19e50 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
19e60 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66  it.  .*/.typedef
19e70 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20   struct DbFixer 
19e80 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20  DbFixer;.struct 
19e90 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73  DbFixer {.  Pars
19ea0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
19eb0 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63  /* The parsing c
19ec0 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d  ontext.  Error m
19ed0 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20  essages written 
19ee0 68 65 72 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  here */.  const 
19ef0 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
19f00 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
19f10 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
19f20 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
19f30 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
19f40 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
19f50 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
19f60 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
19f70 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
19f80 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
19f90 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
19fa0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
19fb0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
19fc0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
19fd0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
19fe0 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
19ff0 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
1a000 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
1a010 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
1a020 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
1a030 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
1a040 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
1a050 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
1a060 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
1a070 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1a080 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
1a090 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
1a0a0 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
1a0b0 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
1a0c0 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
1a0d0 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
1a0e0 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
1a0f0 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
1a100 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
1a110 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
1a120 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
1a130 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61  r */.  int  nCha
1a140 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
1a150 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
1a160 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
1a170 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  int  nAlloc;    
1a180 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
1a190 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
1a1a0 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
1a1b0 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  int  mxAlloc;   
1a1c0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1a1d0 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c  allowed string l
1a1e0 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20  ength */.  u8   
1a1f0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
1a200 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65 20  /* Becomes true 
1a210 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61 6c  if any memory al
1a220 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20 2a  location fails *
1a230 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c  /.  u8   useMall
1a240 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e  oc;      /* 0: n
1a250 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33  one,  1: sqlite3
1a260 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71  DbMalloc,  2: sq
1a270 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  lite3_malloc */.
1a280 20 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20 20    u8   tooBig;  
1a290 20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d 65         /* Become
1a2a0 73 20 74 72 75 65 20 69 66 20 73 74 72 69 6e 67  s true if string
1a2b0 20 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c 69   size exceeds li
1a2c0 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mits */.};../*.*
1a2d0 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
1a2e0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1a2f0 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
1a300 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
1a310 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
1a320 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
1a330 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
1a340 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1a350 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
1a360 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
1a370 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1a380 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
1a390 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
1a3a0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  d */.  int iDb; 
1a3b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
1a3c0 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
1a3d0 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
1a3e0 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
1a3f0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
1a400 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
1a410 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
1a420 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
1a430 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1a440 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
1a450 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
1a460 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
1a470 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
1a480 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
1a490 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
1a4a0 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
1a4b0 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
1a4c0 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
1a4d0 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
1a4e0 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
1a4f0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
1a500 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
1a510 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a530 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1a540 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
1a550 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
1a560 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1a570 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1a580 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
1a590 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1a5a0 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a5c0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1a5d0 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
1a5e0 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
1a5f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a600 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1a610 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
1a620 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
1a630 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
1a660 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
1a670 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
1a680 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1a690 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1a6a0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1a6b0 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
1a6c0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1a6e0 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1a6f0 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
1a700 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
1a710 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
1a720 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1a730 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
1a740 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
1a750 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1a760 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
1a770 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1a780 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
1a790 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
1a7a0 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
1a7b0 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
1a7c0 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
1a7d0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1a7e0 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
1a810 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
1a820 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a840 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
1a850 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
1a860 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
1a870 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
1a880 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
1a890 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
1a8a0 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b   void *pScratch;
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65     /* Scratch me
1a8d0 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
1a8e0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1a900 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61  ize of each scra
1a910 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  tch buffer */.  
1a920 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20  int nScratch;   
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a940 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1a950 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a  cratch buffers *
1a960 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
1a990 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
1a9a0 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9c0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1a9d0 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
1a9e0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
1a9f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1aa00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1aa10 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
1aa20 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1aa30 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aa50 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
1aa60 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
1aa70 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
1aa80 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
1aa90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
1aaa0 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
1aab0 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
1aac0 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65  /.  /* The above
1aad0 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61   might be initia
1aae0 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72  lized to non-zer
1aaf0 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  o.  The followin
1ab00 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73  g need to always
1ab10 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  .  ** initially 
1ab20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72  be zero, however
1ab30 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69  . */.  int isIni
1ab40 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1ab50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ab60 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a   after initializ
1ab70 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68  ation has finish
1ab80 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72  ed */.  int inPr
1ab90 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20  ogress;         
1aba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1abb0 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69  e while initiali
1abc0 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  zation in progre
1abd0 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75  ss */.  int isMu
1abe0 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20  texInit;        
1abf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ac00 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20  e after mutexes 
1ac10 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
1ac20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f  */.  int isMallo
1ac30 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  cInit;          
1ac40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1ac50 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1ac60 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1ac70 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74  int isPCacheInit
1ac80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ac90 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1aca0 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1acb0 6c 69 7a 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74  lized */.  sqlit
1acc0 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d  e3_mutex *pInitM
1acd0 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  utex;        /* 
1ace0 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71  Mutex used by sq
1acf0 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
1ad00 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  () */.  int nRef
1ad10 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1ad20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1ad30 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
1ad40 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
1ad50 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69  void (*xLog)(voi
1ad60 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
1ad70 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e  r*); /* Function
1ad80 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a   for logging */.
1ad90 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b    void *pLogArg;
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1adc0 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67  argument to xLog
1add0 28 29 20 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63  () */.  int bLoc
1ade0 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
1adf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ae00 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
1ae10 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d  ime() calls */.}
1ae20 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  ;../*.** Context
1ae30 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
1ae40 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
1ae50 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
1ae60 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
1ae70 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
1ae80 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
1ae90 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
1aea0 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
1aeb0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
1aec0 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
1aed0 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
1aee0 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
1aef0 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1af00 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1af10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1af30 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
1af40 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af70 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
1af80 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
1af90 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1afa0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1afc0 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
1afd0 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20  /.    int i;    
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
1b010 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  e */.  } u;.};..
1b020 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
1b030 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
1b040 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
1b050 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
1b060 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
1b070 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
1b080 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
1b090 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1b0a0 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
1b0b0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1b0c0 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
1b0d0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1b0e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1b0f0 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
1b100 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1b110 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f  ./*.** Return co
1b120 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73  de from the pars
1b130 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70  e-tree walking p
1b140 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68  rimitives and th
1b150 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73  eir.** callbacks
1b160 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  ..*/.#define WRC
1b170 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20  _Continue    0  
1b180 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77   /* Continue dow
1b190 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20  n into children 
1b1a0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50  */.#define WRC_P
1b1b0 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f  rune       1   /
1b1c0 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20  * Omit children 
1b1d0 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c  but continue wal
1b1e0 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f  king siblings */
1b1f0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f  .#define WRC_Abo
1b200 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20  rt       2   /* 
1b210 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65  Abandon the tree
1b220 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   walk */../*.** 
1b230 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69  Assuming zIn poi
1b240 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
1b250 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38   byte of a UTF-8
1b260 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61   character,.** a
1b270 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f  dvance zIn to po
1b280 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74  int to the first
1b290 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78   byte of the nex
1b2a0 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  t UTF-8 characte
1b2b0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
1b2c0 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a  LITE_SKIP_UTF8(z
1b2d0 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20  In) {           
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
1b2f0 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e   if( (*(zIn++))>
1b300 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20  =0xc0 ){        
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c        \.    whil
1b330 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29  e( (*zIn & 0xc0)
1b340 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b  ==0x80 ){ zIn++;
1b350 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c   }             \
1b360 0a 20 20 7d 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 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b390 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a          \.}../*.
1b3a0 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f  ** The SQLITE_*_
1b3b0 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20  BKPT macros are 
1b3c0 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
1b3d0 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20  the error codes 
1b3e0 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65  with.** the same
1b3f0 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75   name but withou
1b400 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66  t the _BKPT suff
1b410 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f  ix.  These macro
1b420 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74  s invoke.** rout
1b430 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74  ines that report
1b440 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72   the line-number
1b450 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72   on which the er
1b460 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a  ror originated.*
1b470 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  * using sqlite3_
1b480 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74  log().  The rout
1b490 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64  ines also provid
1b4a0 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70  e a convenient p
1b4b0 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61  lace.** to set a
1b4c0 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70   debugger breakp
1b4d0 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oint..*/.int sql
1b4e0 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
1b4f0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1b500 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e  e3MisuseError(in
1b510 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  t);.int sqlite3C
1b520 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74  antopenError(int
1b530 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
1b540 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73  E_CORRUPT_BKPT s
1b550 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
1b560 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
1b570 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  fine SQLITE_MISU
1b580 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d  SE_BKPT sqlite3M
1b590 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e  isuseError(__LIN
1b5a0 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
1b5b0 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50  ITE_CANTOPEN_BKP
1b5c0 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65  T sqlite3Cantope
1b5d0 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  nError(__LINE__)
1b5e0 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73  .../*.** FTS4 is
1b5f0 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e   really an exten
1b600 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20  sion for FTS3.  
1b610 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73  It is enabled us
1b620 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54  ing the.** SQLIT
1b630 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61  E_ENABLE_FTS3 ma
1b640 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f  cro.  But to avo
1b650 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20  id confusion we 
1b660 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  also all.** the 
1b670 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1b680 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76  S4 macro to serv
1b690 65 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66  e as an alisse f
1b6a0 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  or SQLITE_ENABLE
1b6b0 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65  _FTS3..*/.#if de
1b6c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1b6d0 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65  BLE_FTS4) && !de
1b6e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
1b6f0 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69  BLE_FTS3).# defi
1b700 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
1b710 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _FTS3.#endif../*
1b720 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20  .** The ctype.h 
1b730 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64  header is needed
1b740 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73   for non-ASCII s
1b750 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61  ystems.  It is a
1b760 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79  lso.** needed by
1b770 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20   FTS3 when FTS3 
1b780 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
1b790 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e  he amalgamation.
1b7a0 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1b7b0 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c  (SQLITE_ASCII) |
1b7c0 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
1b7d0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
1b7e0 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28  TS3) && defined(
1b7f0 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
1b800 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20  ION)).# include 
1b810 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66  <ctype.h>.#endif
1b820 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1b830 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d  owing macros mim
1b840 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  ic the standard 
1b850 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
1b860 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20  s toupper(),.** 
1b870 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e  isspace(), isaln
1b880 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20  um(), isdigit() 
1b890 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20  and isxdigit(), 
1b8a0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68  respectively. Th
1b8b0 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73  e.** sqlite vers
1b8c0 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
1b8d0 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
1b8e0 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ers, regardless 
1b8f0 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69  of locale..*/.#i
1b900 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49  fdef SQLITE_ASCI
1b910 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  I.# define sqlit
1b920 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28  e3Toupper(x)  ((
1b930 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70  x)&~(sqlite3Ctyp
1b940 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1b950 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a  har)(x)]&0x20)).
1b960 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1b970 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71  Isspace(x)   (sq
1b980 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1b990 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1b9a0 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65  ]&0x01).# define
1b9b0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
1b9c0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1b9d0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1b9e0 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a  char)(x)]&0x06).
1b9f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1ba00 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71  Isalpha(x)   (sq
1ba10 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1ba20 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1ba30 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65  ]&0x02).# define
1ba40 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1ba50 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
1ba60 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
1ba70 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a  char)(x)]&0x04).
1ba80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1ba90 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71  Isxdigit(x)  (sq
1baa0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
1bab0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bac0 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65  ]&0x08).# define
1bad0 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
1bae0 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70  x)   (sqlite3Upp
1baf0 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67  erToLower[(unsig
1bb00 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23  ned char)(x)]).#
1bb10 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1bb20 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
1bb30 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
1bb40 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
1bb50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
1bb60 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
1bb70 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
1bb80 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
1bb90 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1bba0 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
1bbb0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
1bbc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1bbd0 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
1bbe0 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
1bbf0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1bc00 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
1bc10 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
1bc20 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1bc30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1bc40 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
1bc50 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
1bc60 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1bc70 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
1bc80 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
1bc90 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1bca0 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (x)).#endif../*.
1bcb0 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
1bcc0 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
1bcd0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  */.int sqlite3St
1bce0 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72  rICmp(const char
1bcf0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
1bd00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
1bd10 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
1bd20 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
1bd30 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
1bd40 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
1bd50 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
1bd60 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
1bd70 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
1bd80 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
1bd90 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74  qlite3Malloc(int
1bda0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1bdb0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69 6e 74 29 3b  MallocZero(int);
1bdc0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1bdd0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
1bde0 65 33 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  e3*, int);.void 
1bdf0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
1be00 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Raw(sqlite3*, in
1be10 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
1be20 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
1be30 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
1be40 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
1be50 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
1be60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1be70 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
1be80 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
1be90 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1bea0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
1beb0 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
1bec0 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  id *, int);.void
1bed0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1bee0 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
1bef0 69 64 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  id *, int);.void
1bf00 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
1bf10 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
1bf20 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
1bf30 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
1bf40 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
1bf50 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
1bf60 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
1bf70 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c  qlite3ScratchMal
1bf80 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
1bf90 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65  qlite3ScratchFre
1bfa0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  e(void*);.void *
1bfb0 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f  sqlite3PageMallo
1bfc0 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
1bfd0 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69  ite3PageFree(voi
1bfe0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
1bff0 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76  3MemSetDefault(v
1c000 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1c010 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
1c020 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
1c030 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
1c040 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d));.int sqlite3
1c050 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
1c060 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
1c070 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
1c080 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
1c090 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
1c0a0 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
1c0b0 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
1c0c0 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
1c0d0 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
1c0e0 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
1c0f0 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
1c100 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
1c110 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
1c120 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
1c130 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
1c140 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
1c150 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
1c160 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
1c170 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
1c180 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
1c190 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
1c1a0 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
1c1b0 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
1c1c0 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
1c1d0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
1c1e0 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
1c1f0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1c200 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
1c210 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
1c220 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
1c230 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c240 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
1c250 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65       .#else.# de
1c260 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
1c270 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
1c280 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1c290 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
1c2a0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1c2b0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
1c2c0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
1c2d0 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
1c2e0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
1c2f0 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
1c300 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
1c310 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
1c320 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
1c330 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
1c340 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
1c350 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
1c360 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
1c370 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1c380 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
1c390 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
1c3a0 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
1c3b0 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
1c3c0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
1c3d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
1c3e0 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
1c3f0 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1c400 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
1c410 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
1c420 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
1c430 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
1c440 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
1c450 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
1c460 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
1c470 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
1c480 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
1c490 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
1c4a0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
1c4b0 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
1c4c0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
1c4d0 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74  3StatusValue(int
1c4e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1c4f0 74 61 74 75 73 41 64 64 28 69 6e 74 2c 20 69 6e  tatusAdd(int, in
1c500 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1c510 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69  StatusSet(int, i
1c520 6e 74 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  nt);..#ifndef SQ
1c530 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
1c540 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
1c550 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
1c560 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
1c570 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
1c580 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 76  (X)  0.#endif..v
1c590 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69  oid sqlite3VXPri
1c5a0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 69  ntf(StrAccum*, i
1c5b0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
1c5c0 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 6e 64   va_list);.#ifnd
1c5d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
1c5e0 52 41 43 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  RACE.void sqlite
1c5f0 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  3XPrintf(StrAccu
1c600 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  m*, const char*,
1c610 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 63 68   ...);.#endif.ch
1c620 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
1c630 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
1c640 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
1c650 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
1c660 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
1c670 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
1c680 73 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  st);.char *sqlit
1c690 65 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74  e3MAppendf(sqlit
1c6a0 65 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20  e3*,char*,const 
1c6b0 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20  char*,...);.#if 
1c6c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1c6d0 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  EST) || defined(
1c6e0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
1c6f0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75  void sqlite3Debu
1c700 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68  gPrintf(const ch
1c710 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
1c720 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1c730 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69  LITE_TEST).  voi
1c740 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65  d *sqlite3TestTe
1c750 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68  xtToPtr(const ch
1c760 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
1c770 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
1c780 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
1c790 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
1c7a0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
1c7b0 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
1c7c0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1c7d0 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c  *, ...);.int sql
1c7e0 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
1c7f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  *);.int sqlite3K
1c800 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
1c810 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c   unsigned char*,
1c820 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
1c830 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73  e3RunParser(Pars
1c840 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
1c850 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20   char **);.void 
1c860 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64  sqlite3FinishCod
1c870 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  ing(Parse*);.int
1c880 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
1c890 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  eg(Parse*);.void
1c8a0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
1c8b0 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e  empReg(Parse*,in
1c8c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
1c8d0 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  etTempRange(Pars
1c8e0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
1c8f0 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
1c900 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
1c910 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1c920 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43  te3ClearTempRegC
1c930 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78  ache(Parse*);.Ex
1c940 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
1c950 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
1c960 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
1c970 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
1c980 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
1c990 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1c9a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1c9b0 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
1c9c0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
1c9d0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
1c9e0 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
1c9f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
1ca00 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  pr*, Expr*, cons
1ca10 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  t Token*);.Expr 
1ca20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
1ca30 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20  sqlite3*,Expr*, 
1ca40 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
1ca50 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f  lite3ExprFunctio
1ca60 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
1ca70 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  t*, Token*);.voi
1ca80 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
1ca90 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
1caa0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
1cab0 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c  d sqlite3ExprDel
1cac0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
1cad0 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
1cae0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
1caf0 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  ppend(Parse*,Exp
1cb00 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76  rList*,Expr*);.v
1cb10 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
1cb20 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65  istSetName(Parse
1cb30 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65  *,ExprList*,Toke
1cb40 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
1cb50 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
1cb60 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  Span(Parse*,Expr
1cb70 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29  List*,ExprSpan*)
1cb80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1cb90 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
1cba0 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
1cbb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
1cbc0 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  it(sqlite3*, cha
1cbd0 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
1cbe0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
1cbf0 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  id*, int, char**
1cc00 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20  , char**);.void 
1cc10 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61  sqlite3Pragma(Pa
1cc20 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
1cc30 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  n*,Token*,int);.
1cc40 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
1cc50 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
1cc60 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
1cc70 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
1cc80 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e  nParse(Parse*,in
1cc90 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1cca0 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
1ccb0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
1ccc0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52  .Table *sqlite3R
1ccd0 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74  esultSetOfSelect
1cce0 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29  (Parse*,Select*)
1ccf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
1cd00 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61  enMasterTable(Pa
1cd10 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  rse *, int);.voi
1cd20 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
1cd30 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
1cd40 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
1cd50 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
1cd60 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
1cd70 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
1cd80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1cd90 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
1cda0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1cdb0 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
1cdc0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
1cdd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1cde0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1cdf0 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
1ce00 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
1ce10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1ce20 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73  dColumnType(Pars
1ce30 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
1ce40 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
1ce50 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
1ce60 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
1ce70 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
1ce80 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
1ce90 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1cea0 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
1ceb0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1cec0 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
1ced0 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
1cee0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
1cef0 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
1cf00 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
1cf10 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1cf20 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
1cf30 68 61 72 20 2a 2a 29 3b 0a 0a 42 69 74 76 65 63  har **);..Bitvec
1cf40 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
1cf50 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
1cf60 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
1cf70 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
1cf80 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1cf90 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
1cfa0 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
1cfb0 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
1cfc0 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
1cfd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1cfe0 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
1cff0 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
1d000 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
1d010 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  vec*);.int sqlit
1d020 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
1d030 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a  est(int,int*);..
1d040 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
1d050 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
1d060 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
1d070 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
1d080 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
1d090 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
1d0a0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
1d0b0 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
1d0c0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1d0d0 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
1d0e0 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69 36  *, u8 iBatch, i6
1d0f0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1d100 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
1d110 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
1d120 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
1d130 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
1d140 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1d150 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
1d160 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1d170 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1d180 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
1d190 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1d1a0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
1d1b0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1d1c0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
1d1d0 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
1d1e0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
1d1f0 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
1d200 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  ,B) 0.#endif..vo
1d210 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
1d220 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
1d230 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
1d240 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1d250 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
1d260 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1d270 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d280 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
1d290 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
1d2a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d2b0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1d2c0 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
1d2d0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
1d2e0 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
1d2f0 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
1d300 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
1d310 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
1d320 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1d330 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
1d340 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
1d350 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1d360 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1d370 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
1d380 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
1d390 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
1d3a0 78 70 72 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  xprList*, Select
1d3b0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
1d3c0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
1d3d0 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
1d3e0 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
1d3f0 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 69 6e  int,int*,int*,in
1d400 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
1d410 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
1d420 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
1d430 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
1d440 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
1d450 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
1d460 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
1d470 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1d480 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
1d490 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1d4a0 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
1d4b0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1d4c0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
1d4d0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
1d4e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
1d4f0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1d500 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
1d510 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1d520 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1d530 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
1d560 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
1d570 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
1d580 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
1d590 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
1d5a0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
1d5b0 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
1d5c0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
1d5d0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
1d5e0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
1d5f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1d600 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1d610 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
1d620 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1d630 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
1d640 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
1d650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
1d660 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
1d670 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
1d680 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1d690 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1d6a0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
1d6b0 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61  dex *sqlite3Crea
1d6c0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
1d6d0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
1d6e0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
1d6f0 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c      Token*, int,
1d720 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1d730 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
1d740 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
1d750 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1d760 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
1d770 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
1d780 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
1d790 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
1d7a0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1d7b0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
1d7c0 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7e0 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
1d7f0 74 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  t*,int,Expr*,Exp
1d800 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1d810 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
1d820 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
1d830 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1d840 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
1d850 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
1d860 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
1d870 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
1d880 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
1d890 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
1d8a0 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
1d8b0 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
1d8c0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
1d8d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1d8e0 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
1d8f0 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
1d900 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1d910 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
1d920 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
1d930 68 65 72 65 28 50 61 72 73 65 20 2a 2c 20 53 72  here(Parse *, Sr
1d940 63 4c 69 73 74 20 2a 2c 20 45 78 70 72 20 2a 2c  cList *, Expr *,
1d950 20 45 78 70 72 4c 69 73 74 20 2a 2c 20 45 78 70   ExprList *, Exp
1d960 72 20 2a 2c 20 45 78 70 72 20 2a 2c 20 63 68 61  r *, Expr *, cha
1d970 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  r *);.#endif.voi
1d980 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
1d990 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
1d9a0 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
1d9b0 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
1d9c0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1d9d0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
1d9e0 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
1d9f0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
1da00 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 20  reBegin(Parse*, 
1da10 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  SrcList*, Expr*,
1da20 20 45 78 70 72 4c 69 73 74 2a 2a 2c 45 78 70 72   ExprList**,Expr
1da30 4c 69 73 74 2a 2c 75 31 36 29 3b 0a 76 6f 69 64  List*,u16);.void
1da40 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
1da50 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1da60 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1da70 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
1da80 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1da90 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1daa0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
1dab0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
1dac0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
1dad0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1dae0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1daf0 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
1db00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1db10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1db20 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c  CodeCopy(Parse*,
1db30 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1db40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1db50 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73  rCacheStore(Pars
1db60 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1db70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1db80 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61  ExprCachePush(Pa
1db90 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1dba0 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28  te3ExprCachePop(
1dbb0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1dbc0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
1dbd0 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a  cheRemove(Parse*
1dbe0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1dbf0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1dc00 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b  heClear(Parse*);
1dc10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1dc20 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68  rCacheAffinityCh
1dc30 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  ange(Parse*, int
1dc40 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1dc50 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73  te3ExprCode(Pars
1dc60 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1dc70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1dc80 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c  CodeTemp(Parse*,
1dc90 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69   Expr*, int*);.i
1dca0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
1dcb0 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c  deTarget(Parse*,
1dcc0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
1dcd0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1dce0 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
1dcf0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
1dd00 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1dd10 6f 64 65 43 6f 6e 73 74 61 6e 74 73 28 50 61 72  odeConstants(Par
1dd20 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  se*, Expr*);.int
1dd30 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1dd40 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
1dd50 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
1dd60 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1dd70 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
1dd80 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1dd90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1dda0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
1ddb0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1ddc0 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20  nt, int);.Table 
1ddd0 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c  *sqlite3FindTabl
1dde0 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
1ddf0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1de00 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
1de10 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
1de20 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
1de30 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  w,const char*, c
1de40 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 49 6e 64  onst char*);.Ind
1de50 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
1de60 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
1de70 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1de80 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1de90 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1dea0 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
1deb0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1dec0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1ded0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1dee0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
1def0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1df00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
1df10 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
1df20 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
1df30 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
1df40 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
1df50 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
1df60 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
1df70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1df80 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
1df90 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1dfa0 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
1dfb0 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
1dfc0 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  xprList*);.void 
1dfd0 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
1dfe0 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
1dff0 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
1e000 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e010 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
1e020 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
1e030 78 70 72 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  xprList*);.Vdbe 
1e040 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
1e050 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1e060 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
1e070 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1e080 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
1e090 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
1e0a0 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65  id sqlite3PrngRe
1e0b0 73 65 74 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  setState(void);.
1e0c0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
1e0d0 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
1e0e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1e0f0 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
1e100 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
1e110 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
1e120 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
1e130 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1e140 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
1e150 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
1e160 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
1e170 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e180 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69  3CommitTransacti
1e190 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
1e1a0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1e1b0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
1e1c0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1e1d0 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
1e1e0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
1e1f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
1e200 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
1e210 69 74 65 33 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  ite3 *);.int sql
1e220 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1e230 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
1e240 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
1e250 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
1e260 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1e270 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
1e280 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a  unction(Expr*);.
1e290 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
1e2a0 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
1e2b0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
1e2c0 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
1e2d0 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f  const Expr*);.vo
1e2e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1e2f0 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62  deIsNullJump(Vdb
1e300 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  e*, const Expr*,
1e310 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1e320 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
1e330 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
1e340 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
1e350 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
1e360 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
1e370 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1e380 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
1e390 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
1e3a0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1e3b0 74 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e  t, Trigger *, in
1e3c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e3d0 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
1e3e0 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
1e3f0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a  able*, int, int*
1e400 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
1e410 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
1e420 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
1e430 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1e440 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
1e450 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
1e460 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
1e470 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  *,int,int,.     
1e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4a0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
1e4b0 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
1e4c0 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
1e4d0 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
1e4e0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
1e4f0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c 20 69  nt, int*, int, i
1e500 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1e510 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
1e520 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
1e530 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1e540 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e550 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
1e560 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
1e570 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e580 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
1e590 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1e5a0 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
1e5b0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1e5c0 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
1e5d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 68 61  Parse*, int, cha
1e5e0 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  r*, int);.Expr *
1e5f0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
1e600 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
1e610 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
1e620 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
1e630 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
1e640 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
1e650 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1e660 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
1e670 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
1e680 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
1e690 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
1e6a0 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
1e6b0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
1e6c0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
1e6d0 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
1e6e0 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65  lite3FuncDefInse
1e6f0 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c  rt(FuncDefHash*,
1e700 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63   FuncDef*);.Func
1e710 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
1e720 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
1e730 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
1e740 74 2c 69 6e 74 2c 75 38 2c 69 6e 74 29 3b 0a 76  t,int,u8,int);.v
1e750 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
1e760 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
1e770 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ons(sqlite3*);.v
1e780 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
1e790 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
1e7a0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
1e7b0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1e7c0 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28  GlobalFunctions(
1e7d0 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
1e7e0 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
1e7f0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
1e800 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
1e810 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
1e820 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
1e830 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
1e840 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
1e850 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1e860 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
1e870 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1e880 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
1e890 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
1e8a0 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
1e8b0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
1e8c0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
1e8d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1e8e0 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
1e8f0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
1e900 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
1e910 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
1e920 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
1e930 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e950 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
1e960 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
1e970 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
1e980 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
1e990 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
1e9a0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
1e9b0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
1e9c0 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
1e9d0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
1e9e0 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
1e9f0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
1ea00 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
1ea10 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
1ea20 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
1ea30 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
1ea40 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
1ea50 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
1ea60 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
1ea70 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
1ea80 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
1ea90 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
1eaa0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
1eab0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
1eac0 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
1eaf0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
1eb00 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
1eb10 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
1eb20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
1eb30 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
1eb40 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
1eb50 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
1eb60 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1eb70 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
1eb80 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
1eb90 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
1eba0 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
1ebb0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
1ebc0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
1ebd0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
1ebe0 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
1ebf0 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54  3*,Select*);.  T
1ec00 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
1ec10 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74  te3TriggerInsert
1ec20 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
1ec30 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20  ken*, IdList*,. 
1ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 2a         ExprList*
1ec70 2c 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20  ,Select*,u8);.  
1ec80 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
1ec90 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
1eca0 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
1ecb0 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
1ecc0 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54   Expr*, u8);.  T
1ecd0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
1ece0 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65  te3TriggerDelete
1ecf0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
1ed00 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20  ken*, Expr*);.  
1ed10 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
1ed20 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
1ed30 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
1ed40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
1ed50 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
1ed60 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
1ed70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
1ed80 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
1ed90 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
1eda0 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
1edb0 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
1edc0 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
1edd0 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
1ede0 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
1edf0 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
1ee00 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
1ee10 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  )).#else.# defin
1ee20 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
1ee30 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
1ee40 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
1ee50 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
1ee60 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
1ee70 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
1ee80 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
1ee90 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
1eea0 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
1eeb0 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
1eec0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
1eed0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
1eee0 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
1eef0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
1ef00 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
1ef10 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
1ef20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
1ef30 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
1ef40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ef50 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
1ef60 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
1ef70 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
1ef80 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
1ef90 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
1efa0 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
1efb0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
1efc0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
1efd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
1efe0 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
1eff0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
1f000 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
1f010 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
1f020 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
1f030 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
1f040 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
1f050 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
1f060 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
1f070 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
1f080 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
1f090 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
1f0a0 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
1f0b0 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
1f0c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1f0d0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1f0e0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
1f0f0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
1f100 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
1f110 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
1f120 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
1f130 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
1f140 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
1f150 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
1f160 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
1f170 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1f180 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
1f190 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
1f1a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1f1b0 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
1f1c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1f1d0 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
1f1e0 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
1f1f0 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
1f200 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
1f210 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
1f220 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
1f230 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
1f240 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
1f250 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
1f260 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
1f270 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
1f280 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
1f290 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
1f2a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1f2b0 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
1f2c0 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
1f2d0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1f2e0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
1f2f0 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
1f300 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
1f310 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f320 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
1f330 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1f340 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
1f350 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
1f360 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1f370 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
1f380 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
1f390 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
1f3a0 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
1f3b0 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
1f3c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
1f3d0 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
1f3e0 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
1f3f0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
1f400 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
1f410 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
1f420 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
1f430 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
1f440 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
1f450 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
1f460 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
1f470 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
1f480 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
1f490 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
1f4a0 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
1f4b0 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
1f4c0 73 74 20 75 38 2a 2c 20 63 6f 6e 73 74 20 75 38  st u8*, const u8
1f4d0 2a 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  **);../*.** Rout
1f4e0 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64  ines to read and
1f4f0 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d   write variable-
1f500 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
1f510 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a    These used to.
1f520 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f  ** be defined lo
1f530 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77  cally, but now w
1f540 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74  e use the varint
1f550 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
1f560 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e   util.c.** file.
1f570 20 20 43 6f 64 65 20 73 68 6f 75 6c 64 20 75 73    Code should us
1f580 65 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d  e the MACRO form
1f590 73 20 62 65 6c 6f 77 2c 20 61 73 20 74 68 65 20  s below, as the 
1f5a0 56 61 72 69 6e 74 33 32 20 76 65 72 73 69 6f 6e  Varint32 version
1f5b0 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64 20 74  s.** are coded t
1f5c0 6f 20 61 73 73 75 6d 65 20 74 68 65 20 73 69 6e  o assume the sin
1f5d0 67 6c 65 20 62 79 74 65 20 63 61 73 65 20 69 73  gle byte case is
1f5e0 20 61 6c 72 65 61 64 79 20 68 61 6e 64 6c 65 64   already handled
1f5f0 20 28 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20   (which .** the 
1f600 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29  MACRO form does)
1f610 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1f620 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
1f630 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
1f640 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
1f650 72 69 6e 74 33 32 28 75 6e 73 69 67 6e 65 64 20  rint32(unsigned 
1f660 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a 75 38 20  char*, u32);.u8 
1f670 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
1f680 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
1f690 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
1f6a0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
1f6b0 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
1f6c0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
1f6d0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
1f6e0 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
1f6f0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65 61  ;../*.** The hea
1f700 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72 64 20  der of a record 
1f710 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 65  consists of a se
1f720 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c 65 2d  quence variable-
1f730 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
1f740 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65 67 65  .** These intege
1f750 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c  rs are almost al
1f760 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20 61  ways small and a
1f770 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 61 20  re encoded as a 
1f780 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a 20  single byte..** 
1f790 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
1f7a0 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61 6e 74  cros take advant
1f7b0 61 67 65 20 74 68 69 73 20 66 61 63 74 20 74 6f  age this fact to
1f7c0 20 70 72 6f 76 69 64 65 20 61 20 66 61 73 74 20   provide a fast 
1f7d0 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20 64 65  encode.** and de
1f7e0 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e 74 65  code of the inte
1f7f0 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f 72 64  gers in a record
1f800 20 68 65 61 64 65 72 2e 20 20 49 74 20 69 73 20   header.  It is 
1f810 66 61 73 74 65 72 20 66 6f 72 20 74 68 65 20 63  faster for the c
1f820 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20 77 68  ommon.** case wh
1f830 65 72 65 20 74 68 65 20 69 6e 74 65 67 65 72 20  ere the integer 
1f840 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  is a single byte
1f850 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74 74 6c  .  It is a littl
1f860 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20 74 68  e slower when th
1f870 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 73 20  e.** integer is 
1f880 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65  two or more byte
1f890 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c 6c 20  s.  But overall 
1f8a0 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a 2a 2a  it is faster..**
1f8b0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1f8c0 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  g expressions ar
1f8d0 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a  e equivalent:.**
1f8e0 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69  .**     x = sqli
1f8f0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 20  te3GetVarint32( 
1f900 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20 20 20  A, &B );.**     
1f910 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74 56 61  x = sqlite3PutVa
1f920 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a  rint32( A, B );.
1f930 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 67 65  **.**     x = ge
1f940 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
1f950 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 70 75  );.**     x = pu
1f960 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
1f970 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  );.**.*/.#define
1f980 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
1f990 29 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  )  (u8)((*(A)<(u
1f9a0 38 29 30 78 38 30 29 20 3f 20 28 28 42 29 20 3d  8)0x80) ? ((B) =
1f9b0 20 28 75 33 32 29 2a 28 41 29 29 2c 31 20 3a 20   (u32)*(A)),1 : 
1f9c0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
1f9d0 33 32 28 28 41 29 2c 20 28 75 33 32 20 2a 29 26  32((A), (u32 *)&
1f9e0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
1f9f0 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
1fa00 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28  (u8)(((u32)(B)<(
1fa10 75 33 32 29 30 78 38 30 29 20 3f 20 28 2a 28 41  u32)0x80) ? (*(A
1fa20 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68  ) = (unsigned ch
1fa30 61 72 29 28 42 29 29 2c 31 20 3a 20 73 71 6c 69  ar)(B)),1 : sqli
1fa40 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 28  te3PutVarint32((
1fa50 41 29 2c 20 28 42 29 29 29 0a 23 64 65 66 69 6e  A), (B))).#defin
1fa60 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
1fa70 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
1fa80 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
1fa90 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
1faa0 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
1fab0 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
1fac0 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65  AffinityStr(Vdbe
1fad0 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f   *, Index *);.vo
1fae0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
1faf0 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20  ffinityStr(Vdbe 
1fb00 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63 68 61  *, Table *);.cha
1fb10 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
1fb20 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
1fb30 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
1fb40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
1fb50 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
1fb60 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
1fb70 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
1fb80 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66  ar sqlite3ExprAf
1fb90 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
1fba0 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
1fbb0 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61  Atoi64(const cha
1fbc0 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75  r*, i64*, int, u
1fbd0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
1fbe0 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 20  Error(sqlite3*, 
1fbf0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
1fc00 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,...);.void *sql
1fc10 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
1fc20 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
1fc30 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
1fc40 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
1fc50 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
1fc60 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
1fc70 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
1fc80 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
1fc90 6e 20 2a 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  n **);.const cha
1fca0 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
1fcb0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1fcc0 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
1fcd0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
1fce0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
1fcf0 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
1fd00 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
1fd10 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
1fd20 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
1fd30 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
1fd40 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
1fd50 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
1fd60 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
1fd70 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
1fd80 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
1fd90 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
1fda0 65 33 45 78 70 72 53 65 74 43 6f 6c 6c 28 45 78  e3ExprSetColl(Ex
1fdb0 70 72 2a 2c 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a  pr*, CollSeq*);.
1fdc0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1fdd0 72 53 65 74 43 6f 6c 6c 42 79 54 6f 6b 65 6e 28  rSetCollByToken(
1fde0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
1fdf0 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  xpr*, Token*);.i
1fe00 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
1fe10 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
1fe20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
1fe30 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
1fe40 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
1fe50 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
1fe60 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
1fe70 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
1fe80 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  3 *, int);.int s
1fe90 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69  qlite3AddInt64(i
1fea0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
1feb0 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36  lite3SubInt64(i6
1fec0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
1fed0 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34  ite3MulInt64(i64
1fee0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
1fef0 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29  te3AbsInt32(int)
1ff00 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1ff10 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
1ff20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
1ff30 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
1ff40 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65  har*, char*);.#e
1ff50 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1ff60 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
1ff70 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73  X,Y).#endif.u8 s
1ff80 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
1ff90 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 3b  (const char *z);
1ffa0 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
1ffb0 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
1ffc0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
1ffd0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
1ffe0 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
1fff0 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
20000 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
20010 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
20020 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
20030 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20  t void *,u8, .  
20040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20050 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
20060 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
20070 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
20080 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
20090 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
200a0 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
200b0 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
200c0 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
200d0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
200e0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
200f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
20100 4e 41 42 4c 45 5f 53 54 41 54 33 0a 63 68 61 72  NABLE_STAT3.char
20110 20 2a 73 71 6c 69 74 65 33 55 74 66 38 74 6f 31   *sqlite3Utf8to1
20120 36 28 73 71 6c 69 74 65 33 20 2a 2c 20 75 38 2c  6(sqlite3 *, u8,
20130 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
20140 74 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  t *);.#endif.int
20150 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
20160 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
20170 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
20180 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
20190 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
201a0 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
201b0 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
201c0 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
201d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
201e0 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
201f0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
20200 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
20210 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
20220 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
20230 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
20240 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
20250 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
20260 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
20270 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
20280 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
20290 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
202a0 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
202b0 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
202c0 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
202d0 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
202e0 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
202f0 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
20300 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
20310 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20320 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
20330 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
20340 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
20350 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
20360 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
20370 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
20380 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
20390 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
203a0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
203b0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
203c0 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
203d0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
203e0 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
203f0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
20400 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
20410 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
20420 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
20430 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
20440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
20450 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
20460 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
20470 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
20480 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
20490 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
204a0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
204b0 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
204c0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
204d0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
204e0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
204f0 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
20500 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
20510 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
20520 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61  olveExprNames(Na
20530 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
20540 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20550 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
20560 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(Parse*, Selec
20570 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
20580 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
20590 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
205a0 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
205b0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
205c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
205d0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
205e0 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
205f0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
20600 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
20610 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
20620 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
20630 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
20640 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
20650 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
20660 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
20670 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
20680 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 20  llSeq(sqlite3*, 
20690 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
206a0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
206b0 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
206c0 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
206d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
206e0 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
206f0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
20700 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
20710 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
20720 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
20730 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
20740 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
20750 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
20760 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
20770 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
20780 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
20790 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
207a0 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
207b0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
207c0 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
207d0 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
207e0 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
207f0 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
20800 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
20810 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
20820 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
20830 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
20840 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
20850 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
20860 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
20870 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65  lite3MinimumFile
20880 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69  Format(Parse*, i
20890 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
208a0 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
208b0 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d  r(void *);.Schem
208c0 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61  a *sqlite3Schema
208d0 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42  Get(sqlite3 *, B
208e0 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  tree *);.int sql
208f0 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65  ite3SchemaToInde
20900 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53  x(sqlite3 *db, S
20910 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66  chema *);.KeyInf
20920 6f 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 4b  o *sqlite3IndexK
20930 65 79 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c 20  eyinfo(Parse *, 
20940 49 6e 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73 71  Index *);.int sq
20950 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
20960 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
20970 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
20980 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f  t, void *, .  vo
20990 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
209a0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
209b0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
209c0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
209d0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
209e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
209f0 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74  , void (*)(sqlit
20a00 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
20a10 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
20a20 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69  pDestructor.);.i
20a30 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
20a40 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
20a50 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
20a60 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
20a70 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
20a80 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
20a90 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
20aa0 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
20ab0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
20ac0 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72  rAccumAppend(Str
20ad0 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
20ae0 72 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73  r*,int);.char *s
20af0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
20b00 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
20b10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
20b20 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
20b30 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
20b40 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
20b50 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
20b60 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
20b70 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
20b80 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
20b90 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
20ba0 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
20bb0 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
20bc0 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
20bd0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
20be0 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
20bf0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
20c00 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
20c10 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  );../*.** The in
20c20 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
20c30 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
20c40 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73  arser.*/.void *s
20c50 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
20c60 63 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f  c(void*(*)(size_
20c70 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t));.void sqlite
20c80 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
20c90 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
20ca0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
20cb0 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
20cc0 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
20cd0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
20ce0 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
20cf0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
20d00 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
20d10 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
20d20 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
20d30 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
20d40 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
20d50 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
20d60 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
20d70 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
20d80 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
20d90 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
20da0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
20db0 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
20dc0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
20dd0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
20de0 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
20df0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
20e00 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
20e10 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
20e20 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
20e30 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
20e40 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
20e50 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
20e60 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
20e70 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
20e80 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
20e90 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
20ea0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
20eb0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
20ec0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
20ed0 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
20ee0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
20ef0 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
20f00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
20f10 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
20f20 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
20f30 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
20f40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
20f50 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
20f60 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
20f70 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20  3VtabLock(X) .# 
20f80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
20f90 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20  tabUnlock(X).#  
20fa0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
20fb0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a  abUnlockList(X).
20fc0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
20fd0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58  3VtabSavepoint(X
20fe0 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f  , Y, Z) SQLITE_O
20ff0 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
21000 74 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59  te3GetVTable(X,Y
21010 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a  )  ((VTable*)0).
21020 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71  #else.   void sq
21030 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73  lite3VtabClear(s
21040 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
21050 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
21060 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
21070 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a  te3 *db, char **
21080 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
21090 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
210a0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
210b0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
210c0 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
210d0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
210e0 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
210f0 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
21100 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
21110 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
21120 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
21130 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
21140 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
21150 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
21160 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
21170 69 6e 74 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  int);.   VTable 
21180 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
21190 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
211a0 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  e*);.#  define s
211b0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
211c0 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
211d0 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
211e0 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
211f0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  f.void sqlite3Vt
21200 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
21210 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
21220 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
21230 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
21240 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
21250 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
21260 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
21270 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
21280 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
21290 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
212a0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
212b0 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
212c0 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
212d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
212e0 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
212f0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
21300 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
21310 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
21320 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
21330 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
21340 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
21350 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
21360 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
21370 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
21380 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
21390 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
213a0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
213b0 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
213c0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
213d0 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
213e0 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
213f0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
21400 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
21410 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
21420 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
21430 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
21440 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
21450 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
21460 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
21470 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
21480 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
21490 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
214a0 74 6d 74 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tmt *);.int sqli
214b0 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
214c0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
214d0 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
214e0 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
214f0 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
21500 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
21510 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
21520 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
21530 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
21540 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
21550 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
21560 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
21570 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
21580 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
21590 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
215a0 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c  e3Checkpoint(sql
215b0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
215c0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e   int*, int*);.in
215d0 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
215e0 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
215f0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
21600 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 20 44 65 63  r*,int);../* Dec
21610 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75  larations for fu
21620 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e  nctions in fkey.
21630 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20  c. All of these 
21640 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a  are replaced by.
21650 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20  ** no-op macros 
21660 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  if OMIT_FOREIGN_
21670 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20  KEY is defined. 
21680 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20  In this case no 
21690 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66  foreign.** key f
216a0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
216b0 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d  available. If OM
216c0 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65  IT_TRIGGER is de
216d0 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49  fined but.** OMI
216e0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
216f0 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20   not, only some 
21700 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  of the functions
21710 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e   are no-oped. In
21720 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f  .** this case fo
21730 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70  reign keys are p
21740 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74  arsed, but no ot
21750 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  her functionalit
21760 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65  y is .** provide
21770 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
21780 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
21790 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
217a0 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
217b0 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
217c0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
217d0 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
217e0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
217f0 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
21800 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
21810 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
21820 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  e*, int, int);. 
21830 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
21840 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
21850 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c   SrcList *, Tabl
21860 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  e*);.  void sqli
21870 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72  te3FkActions(Par
21880 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
21890 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  rList*, int);.  
218a0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
218b0 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
218c0 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
218d0 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
218e0 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
218f0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
21900 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
21910 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
21920 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
21930 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
21940 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64 65 66  (a,b,c,d).  #def
21950 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
21960 63 6b 28 61 2c 62 2c 63 2c 64 29 0a 20 20 23 64  ck(a,b,c,d).  #d
21970 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
21980 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
21990 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
219a0 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
219b0 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65       0.  #define
219c0 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
219d0 65 64 28 61 2c 62 2c 63 2c 64 29 20 30 0a 23 65  ed(a,b,c,d) 0.#e
219e0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
219f0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
21a00 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
21a10 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
21a20 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
21a30 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
21a40 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
21a50 61 2c 62 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  a,b).#endif.../*
21a60 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
21a70 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
21a80 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
21a90 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
21aa0 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
21ab0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
21ac0 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
21ad0 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
21ae0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
21af0 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
21b00 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
21b10 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
21b20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
21b30 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
21b40 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
21b50 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
21b60 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
21b70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
21b80 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
21b90 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
21ba0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21bb0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
21bc0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
21bd0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
21be0 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
21bf0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
21c00 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
21c10 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
21c20 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
21c30 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
21c40 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
21c50 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
21c60 69 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  if..#define IN_I
21c70 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
21c80 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49       1.#define I
21c90 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
21ca0 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e          2.#defin
21cb0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
21cc0 20 20 20 20 20 20 20 20 20 20 20 33 0a 69 6e 74             3.int
21cd0 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
21ce0 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70  dex(Parse *, Exp
21cf0 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66  r *, int*);..#if
21d00 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
21d10 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20  E_ATOMIC_WRITE. 
21d20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
21d30 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
21d40 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
21d50 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
21d60 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
21d70 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
21d80 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
21d90 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73  _vfs *);.  int s
21da0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
21db0 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
21dc0 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
21dd0 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
21de0 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28  nalSize(pVfs) ((
21df0 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29  pVfs)->szOsFile)
21e00 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
21e10 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
21e20 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
21e30 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
21e40 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76  MemJournalSize(v
21e50 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
21e60 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71  3IsMemJournal(sq
21e70 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
21e80 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
21e90 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f  XPR_DEPTH>0.  vo
21ea0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
21eb0 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a 70  tHeight(Parse *p
21ec0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
21ed0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
21ee0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
21ef0 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
21f00 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
21f10 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
21f20 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
21f30 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
21f40 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20  SetHeight(x,y). 
21f50 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
21f60 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
21f70 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
21f80 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
21f90 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
21fa0 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
21fb0 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
21fc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21fd0 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
21fe0 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
21ff0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
22000 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
22010 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
22020 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
22030 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
22040 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
22050 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
22060 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
22070 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
22080 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
22090 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
220a0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
220b0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
220c0 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
220d0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
220e0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
220f0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22100 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
22110 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
22120 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
22130 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
22140 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
22150 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
22160 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
22170 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
22180 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
22190 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
221a0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
221b0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
221c0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
221d0 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
221e0 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
221f0 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
22200 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
22210 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
22220 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
22230 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
22240 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
22250 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
22260 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
22270 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
22280 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
22290 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73  _EXTERN void (*s
222a0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
222b0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
222c0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
222d0 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
222e0 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
222f0 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
22300 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
22310 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
22320 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
22330 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
22340 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
22350 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
22360 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
22370 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
22380 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
22390 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
223a0 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
223b0 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
223c0 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
223d0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
223e0 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
223f0 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
22400 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
22410 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
22420 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
22430 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
22440 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
22450 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
22460 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
22470 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
22480 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
22490 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
224a0 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
224b0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
224c0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
224d0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
224e0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
224f0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
22500 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
22510 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
22520 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
22530 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
22540 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
22550 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
22560 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
22570 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
22580 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
22590 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
225a0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
225b0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
225c0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
225d0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
225e0 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
225f0 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
22600 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
22610 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
22620 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
22630 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
22640 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
22650 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
22660 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
22670 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
22680 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
22690 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
226a0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
226b0 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
226c0 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
226d0 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
226e0 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
226f0 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
22700 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
22710 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
22720 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
22730 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
22740 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
22750 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
22760 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
22770 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
22780 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
22790 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
227a0 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
227b0 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
227c0 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
227d0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
227e0 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
227f0 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
22800 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
22810 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
22820 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
22830 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
22840 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
22850 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
22860 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
22870 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
22880 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
22890 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
228a0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
228b0 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
228c0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
228d0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
228e0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
228f0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
22900 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
22910 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
22920 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
22930 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
22940 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
22950 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
22960 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
22970 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
22980 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
22990 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
229a0 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
229b0 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
229c0 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
229d0 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
229e0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
229f0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
22a00 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68  0x02  /* Might h
22a10 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
22a20 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65  de memory */.#de
22a30 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
22a40 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
22a50 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
22a60 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
22a70 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
22a80 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
22a90 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
22aa0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
22ab0 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20 20  MTYPE_DB        
22ac0 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73   0x10  /* Uses s
22ad0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
22ae0 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  not sqlite_mallo
22af0 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  c */..#endif /* 
22b00 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
22b10 0a                                               .