/ Hex Artifact Content
Login

Artifact 259d999abebf4498615e9237a18c0815257a1f2f:


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 23 69 66 20 64 65 66 69 6e  endif..#if defin
08a0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
08b0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44  && !defined(_BSD
08c0: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
08d0: 65 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65  e _BSD_SOURCE.#e
08e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
08f0: 75 64 65 20 73 74 61 6e 64 61 72 64 20 68 65 61  ude standard hea
0900: 64 65 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63  der files as nec
0910: 65 73 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66  essary.*/.#ifdef
0920: 20 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23   HAVE_STDINT_H.#
0930: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e  include <stdint.
0940: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  h>.#endif.#ifdef
0950: 20 48 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48   HAVE_INTTYPES_H
0960: 0a 23 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79  .#include <intty
0970: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  pes.h>.#endif../
0980: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
0990: 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73  ng macros are us
09a0: 65 64 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74  ed to cast point
09b0: 65 72 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20  ers to integers 
09c0: 61 6e 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20  and.** integers 
09d0: 74 6f 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68  to pointers.  Th
09e0: 65 20 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69  e way you do thi
09f0: 73 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e  s varies from on
0a00: 65 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  e compiler.** to
0a10: 20 74 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65   the next, so we
0a20: 20 68 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20   have developed 
0a30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
0a40: 74 20 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65  t of #if stateme
0a50: 6e 74 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61  nts.** to genera
0a60: 74 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d  te appropriate m
0a70: 61 63 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65  acros for a wide
0a80: 20 72 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c   range of compil
0a90: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ers..**.** The c
0aa0: 6f 72 72 65 63 74 20 22 41 4e 53 49 22 20 77 61  orrect "ANSI" wa
0ab0: 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20  y to do this is 
0ac0: 74 6f 20 75 73 65 20 74 68 65 20 69 6e 74 70 74  to use the intpt
0ad0: 72 5f 74 20 74 79 70 65 2e 20 0a 2a 2a 20 55 6e  r_t type. .** Un
0ae0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 74 68 61  fortunately, tha
0af0: 74 20 74 79 70 65 64 65 66 20 69 73 20 6e 6f 74  t typedef is not
0b00: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c   available on al
0b10: 6c 20 63 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a  l compilers, or.
0b20: 2a 2a 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ** if it is avai
0b30: 6c 61 62 6c 65 2c 20 69 74 20 72 65 71 75 69 72  lable, it requir
0b40: 65 73 20 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f  es an #include o
0b50: 66 20 73 70 65 63 69 66 69 63 20 68 65 61 64 65  f specific heade
0b60: 72 73 0a 2a 2a 20 74 68 61 74 20 76 61 72 79 20  rs.** that vary 
0b70: 66 72 6f 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65  from one machine
0b80: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a   to the next..**
0b90: 0a 2a 2a 20 54 69 63 6b 65 74 20 23 33 38 36 30  .** Ticket #3860
0ba0: 3a 20 20 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d  :  The llvm-gcc-
0bb0: 34 2e 32 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f  4.2 compiler fro
0bc0: 6d 20 41 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f  m Apple chokes o
0bd0: 6e 0a 2a 2a 20 74 68 65 20 28 28 76 6f 69 64 2a  n.** the ((void*
0be0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0bf0: 20 63 6f 6e 73 74 72 75 63 74 2e 20 20 42 75 74   construct.  But
0c00: 20 4d 53 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20   MSVC chokes on 
0c10: 28 28 76 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a  ((void*)(X))..**
0c20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 64   So we have to d
0c30: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
0c40: 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 77 61   in different wa
0c50: 79 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ys depending on 
0c60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e  the.** compiler.
0c70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0c80: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0c90: 29 20 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20  )  /* This case 
0ca0: 73 68 6f 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20  should work for 
0cb0: 47 43 43 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  GCC */.# define 
0cc0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
0cd0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 5f  R(X)  ((void*)(_
0ce0: 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29  _PTRDIFF_TYPE__)
0cf0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
0d00: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
0d10: 58 29 20 20 28 28 69 6e 74 29 28 5f 5f 50 54 52  X)  ((int)(__PTR
0d20: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
0d30: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
0d40: 5f 5f 47 4e 55 43 5f 5f 29 20 20 20 20 20 20 20  __GNUC__)       
0d50: 2f 2a 20 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d  /* Works for com
0d60: 70 69 6c 65 72 73 20 6f 74 68 65 72 20 74 68 61  pilers other tha
0d70: 6e 20 4c 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69  n LLVM */.# defi
0d80: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
0d90: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
0da0: 29 26 28 28 63 68 61 72 2a 29 30 29 5b 58 5d 29  )&((char*)0)[X])
0db0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0dc0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
0dd0: 28 28 69 6e 74 29 28 28 28 63 68 61 72 2a 29 58  ((int)(((char*)X
0de0: 29 2d 28 63 68 61 72 2a 29 30 29 29 0a 23 65 6c  )-(char*)0)).#el
0df0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f  if defined(HAVE_
0e00: 53 54 44 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55  STDINT_H)   /* U
0e10: 73 65 20 74 68 69 73 20 63 61 73 65 20 69 66 20  se this case if 
0e20: 77 65 20 68 61 76 65 20 41 4e 53 49 20 68 65 61  we have ANSI hea
0e30: 64 65 72 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  ders */.# define
0e40: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
0e50: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
0e60: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 20  intptr_t)(X)).# 
0e70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
0e80: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
0e90: 6e 74 29 28 69 6e 74 70 74 72 5f 74 29 28 58 29  nt)(intptr_t)(X)
0ea0: 29 0a 23 65 6c 73 65 20 20 20 20 20 20 20 20 20  ).#else         
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 2f 2a 20 47 65 6e 65 72 61 74 65 73 20 61 20   /* Generates a 
0ed0: 77 61 72 6e 69 6e 67 20 2d 20 62 75 74 20 69 74  warning - but it
0ee0: 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f   always works */
0ef0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0f00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
0f10: 28 28 76 6f 69 64 2a 29 28 58 29 29 0a 23 20 64  ((void*)(X)).# d
0f20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
0f30: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
0f40: 74 29 28 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  t)(X)).#endif../
0f50: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
0f60: 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f  THREADSAFE macro
0f70: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
0f80: 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a   as 0, 1, or 2..
0f90: 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78  ** 0 means mutex
0fa0: 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74  es are permanent
0fb0: 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74  ly disable and t
0fc0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65  he library is ne
0fd0: 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  ver.** threadsaf
0fe0: 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20  e.  1 means the 
0ff0: 6c 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61  library is seria
1000: 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74  lized which is t
1010: 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65  he highest.** le
1020: 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66  vel of threadsaf
1030: 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68  ety.  2 means th
1040: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c  e library is mul
1050: 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c  tithreaded - mul
1060: 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73  tiple.** threads
1070: 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20   can use SQLite 
1080: 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77  as long as no tw
1090: 6f 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f  o threads try to
10a0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a   use the same.**
10b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10c0: 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65  tion at the same
10d0: 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64   time..**.** Old
10e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10f0: 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70  QLite used an op
1100: 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46  tional THREADSAF
1110: 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73  E macro..** We s
1120: 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20  upport that for 
1130: 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21  legacy..*/.#if !
1140: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1150: 48 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20  HREADSAFE).# if 
1160: 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1170: 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  FE).#   define S
1180: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1190: 20 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c   THREADSAFE.# el
11a0: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
11b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
11c0: 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37  1 /* IMP: R-0727
11d0: 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64  2-22309 */.# end
11e0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
11f0: 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77   Powersafe overw
1200: 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65  rite is on by de
1210: 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20  fault.  But can 
1220: 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73  be turned off us
1230: 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c  ing.** the -DSQL
1240: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1250: 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e  ERWRITE=0 comman
1260: 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a  d-line option..*
1270: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1280: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1290: 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51  RITE.# define SQ
12a0: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
12b0: 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69  VERWRITE 1.#endi
12c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
12d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
12e0: 54 41 54 55 53 20 6d 61 63 72 6f 20 6d 75 73 74  TATUS macro must
12f0: 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 65   be defined as e
1300: 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
1310: 20 49 74 20 64 65 74 65 72 6d 69 6e 65 73 20 77   It determines w
1320: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1330: 65 20 66 65 61 74 75 72 65 73 20 72 65 6c 61 74  e features relat
1340: 65 64 20 74 6f 20 0a 2a 2a 20 53 51 4c 49 54 45  ed to .** SQLITE
1350: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
1360: 53 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  S are available 
1370: 62 79 20 64 65 66 61 75 6c 74 20 6f 72 20 6e 6f  by default or no
1380: 74 2e 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  t. This value ca
1390: 6e 0a 2a 2a 20 62 65 20 6f 76 65 72 72 69 64 64  n.** be overridd
13a0: 65 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  en at runtime us
13b0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13c0: 63 6f 6e 66 69 67 28 29 20 41 50 49 2e 0a 2a 2f  config() API..*/
13d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13e0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
13f0: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
1400: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
1410: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
1420: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
1430: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
1440: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
1450: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
1460: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
1470: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
1480: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
1490: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
14a0: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
14b0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
14c0: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
14d0: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
14e0: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
14f0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
1500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
1510: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
1520: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
1530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
1540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
1550: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
1560: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
1570: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
1580: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
1590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
15a0: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
15b0: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
15c0: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
15d0: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
15e0: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
15f0: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
1600: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
1610: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
1620: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
1630: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
1640: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
1650: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
1660: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
1670: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
1680: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
1690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
16a0: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
16b0: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
16c0: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
16d0: 2a 20 28 48 69 73 74 6f 72 69 63 61 6c 20 6e 6f  * (Historical no
16e0: 74 65 3a 20 20 54 68 65 72 65 20 75 73 65 64 20  te:  There used 
16f0: 74 6f 20 62 65 20 73 65 76 65 72 61 6c 20 6f 74  to be several ot
1700: 68 65 72 20 6f 70 74 69 6f 6e 73 2c 20 62 75 74  her options, but
1710: 20 77 65 27 76 65 0a 2a 2a 20 70 61 72 65 64 20   we've.** pared 
1720: 69 74 20 64 6f 77 6e 20 74 6f 20 6a 75 73 74 20  it down to just 
1730: 74 68 65 73 65 20 74 68 72 65 65 2e 29 0a 2a 2a  these three.).**
1740: 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .** If none of t
1750: 68 65 20 61 62 6f 76 65 20 61 72 65 20 64 65 66  he above are def
1760: 69 6e 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53  ined, then set S
1770: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
1780: 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65  LOC as.** the de
1790: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  fault..*/.#if de
17a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
17b0: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
17c0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
17d0: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
17e0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
17f0: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
1800: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
1810: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e  QLITE_MEMDEBUG)>
1820: 31 0a 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f  1.# error "Two o
1830: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
1840: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d  llowing compile-
1850: 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
1860: 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65  on options\. are
1870: 20 64 65 66 69 6e 65 64 20 62 75 74 20 61 74 20   defined but at 
1880: 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f  most one is allo
1890: 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59  wed:\. SQLITE_SY
18a0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  STEM_MALLOC, SQL
18b0: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
18c0: 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  , SQLITE_MEMDEBU
18d0: 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f  G,\. SQLITE_ZERO
18e0: 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a  _MALLOC".#endif.
18f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1900: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
1910: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1920: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1930: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
1940: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
1950: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
1960: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
1970: 45 42 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e  EBUG)==0.# defin
1980: 65 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  e SQLITE_SYSTEM_
1990: 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a  MALLOC 1.#endif.
19a0: 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  ./*.** If SQLITE
19b0: 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d  _MALLOC_SOFT_LIM
19c0: 49 54 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  IT is not zero, 
19d0: 74 68 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70  then try to keep
19e0: 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66   the.** sizes of
19f0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1a00: 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76  ons below this v
1a10: 61 6c 75 65 20 77 68 65 72 65 20 70 6f 73 73 69  alue where possi
1a20: 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ble..*/.#if !def
1a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c  ined(SQLITE_MALL
1a40: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23  OC_SOFT_LIMIT).#
1a50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
1a60: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
1a70: 20 31 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1024.#endif../*
1a80: 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64  .** We need to d
1a90: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1aa0: 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69  RCE as follows i
1ab0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
1ac0: 65 0a 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d  e.** recursive m
1ad0: 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55  utexes on most U
1ae0: 6e 69 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20  nix systems and 
1af0: 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e  fchmod() on Open
1b00: 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50  BSD..** But _XOP
1b10: 45 4e 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65  EN_SOURCE define
1b20: 20 63 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73   causes problems
1b30: 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73   for Mac OS X, s
1b40: 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f  o omit.** it..*/
1b50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58  .#if !defined(_X
1b60: 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20  OPEN_SOURCE) && 
1b70: 21 64 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49  !defined(__DARWI
1b80: 4e 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  N__) && !defined
1b90: 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64  (__APPLE__).#  d
1ba0: 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55  efine _XOPEN_SOU
1bb0: 52 43 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a  RCE 600.#endif..
1bc0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 43 4c 20 68 65  /*.** The TCL he
1bd0: 61 64 65 72 73 20 61 72 65 20 6f 6e 6c 79 20 6e  aders are only n
1be0: 65 65 64 65 64 20 77 68 65 6e 20 63 6f 6d 70 69  eeded when compi
1bf0: 6c 69 6e 67 20 74 68 65 20 54 43 4c 20 62 69 6e  ling the TCL bin
1c00: 64 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  dings..*/.#if de
1c10: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 43 4c  fined(SQLITE_TCL
1c20: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 54 43 4c  ) || defined(TCL
1c30: 53 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 74  SH).# include <t
1c40: 63 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  cl.h>.#endif../*
1c50: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
1c60: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
1c70: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
1c80: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
1c90: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
1ca0: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
1cb0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1cc0: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
1cd0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1ce0: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
1cf0: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
1d00: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
1d10: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
1d20: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
1d30: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
1d40: 6c 65 72 20 61 6e 64 20 72 75 6e 20 66 61 73 74  ler and run fast
1d50: 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67 20  er by disabling 
1d60: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 61 73  the.** number as
1d70: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1d80: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20  s in the code.  
1d90: 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64  So we want the d
1da0: 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a  efault action.**
1db0: 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55   to be for NDEBU
1dc0: 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20  G to be set and 
1dd0: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64  NDEBUG to be und
1de0: 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53  efined only if S
1df0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69  QLITE_DEBUG.** i
1e00: 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45  s set.  Thus NDE
1e10: 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f  BUG becomes an o
1e20: 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61  pt-in rather tha
1e30: 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20  n an opt-out.** 
1e40: 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20  feature..*/.#if 
1e50: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
1e60: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1e70: 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65  ITE_DEBUG) .# de
1e80: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
1e90: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
1ea0: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
1eb0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1ec0: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
1ed0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1ee0: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
1ef0: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61  cro is used to a
1f00: 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74  id in coverage t
1f10: 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a  esting.  When .*
1f20: 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  * doing coverage
1f30: 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f   testing, the co
1f40: 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74  ndition inside t
1f50: 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a  he argument to.*
1f60: 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73  * testcase() mus
1f70: 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62  t be evaluated b
1f80: 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c  oth true and fal
1f90: 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  se in order to.*
1fa0: 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63  * get full branc
1fb0: 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65  h coverage.  The
1fc0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
1fd0: 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a  o is inserted.**
1fe0: 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20   to help ensure 
1ff0: 61 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f  adequate test co
2000: 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73  verage in places
2010: 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a   where simple.**
2020: 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73   condition/decis
2030: 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20  ion coverage is 
2040: 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72  inadequate.  For
2050: 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61   example, testca
2060: 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75  se().** can be u
2070: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
2080: 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73   boundary values
2090: 20 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f   are tested.  Fo
20a0: 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73  r.** bitmask tes
20b0: 74 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63  ts, testcase() c
20c0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
20d0: 6b 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74  ke sure each bit
20e0: 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61  .** is significa
20f0: 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c  nt and used at l
2100: 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73  east once.  On s
2110: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73  witch statements
2120: 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70  .** where multip
2130: 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74  le cases go to t
2140: 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66  he same block of
2150: 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28   code, testcase(
2160: 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20  ).** can insure 
2170: 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61  that all cases a
2180: 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a  re evaluated..**
2190: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
21a0: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a  E_COVERAGE_TEST.
21b0: 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
21c0: 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64  verage(int);.# d
21d0: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
21e0: 29 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69  )  if( X ){ sqli
21f0: 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49  te3Coverage(__LI
2200: 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23  NE__); }.#else.#
2210: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2220: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2230: 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d  * The TESTONLY m
2240: 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20  acro is used to 
2250: 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65  enclose variable
2260: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72   declarations or
2270: 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f  .** other bits o
2280: 66 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20  f code that are 
2290: 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72  needed to suppor
22a0: 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a  t the arguments.
22b0: 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61  ** within testca
22c0: 73 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28  se() and assert(
22d0: 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66  ) macros..*/.#if
22e0: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
22f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2300: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2310: 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  T).# define TEST
2320: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
2330: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
2340: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
2350: 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65  .** Sometimes we
2360: 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d   need a small am
2370: 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63  ount of code suc
2380: 68 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20  h as a variable 
2390: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
23a0: 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61  * to setup for a
23b0: 20 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20   later assert() 
23c0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64  statement.  We d
23d0: 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20  o not want this 
23e0: 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61  code to.** appea
23f0: 72 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20  r when assert() 
2400: 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68  is disabled.  Th
2410: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2420: 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a  o is therefore.*
2430: 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69  * used to contai
2440: 6e 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64  n that setup cod
2450: 65 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63  e.  The "VVA" ac
2460: 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72  ronym stands for
2470: 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f  .** "Verificatio
2480: 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61  n, Validation, a
2490: 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
24a0: 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  ".  In other wor
24b0: 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20  ds, the.** code 
24c0: 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28  within VVA_ONLY(
24d0: 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20  ) will only run 
24e0: 64 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74  during verificat
24f0: 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a  ion processes..*
2500: 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
2510: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
2520: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
2530: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
2540: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2550: 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64  * The ALWAYS and
2560: 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75   NEVER macros su
2570: 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65  rround boolean e
2580: 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68  xpressions which
2590: 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65   .** are intende
25a0: 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74  d to always be t
25b0: 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65  rue or false, re
25c0: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63  spectively.  Suc
25d0: 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  h.** expressions
25e0: 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65   could be omitte
25f0: 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20  d from the code 
2600: 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74  completely.  But
2610: 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63   they.** are inc
2620: 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63  luded in a few c
2630: 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  ases in order to
2640: 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73   enhance the res
2650: 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51  ilience.** of SQ
2660: 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74  Lite to unexpect
2670: 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f  ed behavior - to
2680: 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22   make the code "
2690: 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a  self-healing".**
26a0: 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61   or "ductile" ra
26b0: 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20  ther than being 
26c0: 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72  "brittle" and cr
26d0: 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69  ashing at the fi
26e0: 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75  rst.** hint of u
26f0: 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f  nplanned behavio
2700: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  r..**.** In othe
2710: 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20  r words, ALWAYS 
2720: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64  and NEVER are ad
2730: 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76  ded for defensiv
2740: 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  e code..**.** Wh
2750: 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67  en doing coverag
2760: 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53  e testing ALWAYS
2770: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68   and NEVER are h
2780: 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20  ard-coded to.** 
2790: 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  be true and fals
27a0: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e  e so that the un
27b0: 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74  reachable code t
27c0: 68 65 6e 20 73 70 65 63 69 66 79 20 77 69 6c 6c  hen specify will
27d0: 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74  .** not be count
27e0: 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63  ed as untested c
27f0: 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ode..*/.#if defi
2800: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2810: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2820: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
2830: 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e    (1).# define N
2840: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30  EVER(X)       (0
2850: 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
2860: 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  (NDEBUG).# defin
2870: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2880: 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28   ((X)?1:(assert(
2890: 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0),0)).# define 
28a0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
28b0: 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31  (X)?(assert(0),1
28c0: 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ):0).#else.# def
28d0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
28e0: 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20     (X).# define 
28f0: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
2900: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2910: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
2920: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
2930: 6e 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65  nput is a intege
2940: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
2950: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
2960: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
2970: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
2980: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
2990: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
29a0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
29b0: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
29c0: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
29d0: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
29e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
29f0: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
2a00: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
2a10: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
2a20: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
2a30: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
2a40: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
2a50: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
2a60: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
2a70: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
2a80: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
2a90: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
2aa0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
2ab0: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
2ac0: 75 65 2e 20 20 47 43 43 20 69 73 20 61 62 6c 65  ue.  GCC is able
2ad0: 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 73 65   to.** use these
2ae0: 20 68 69 6e 74 73 20 74 6f 20 67 65 6e 65 72 61   hints to genera
2af0: 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20  te better code, 
2b00: 73 6f 6d 65 74 69 6d 65 73 2e 0a 2a 2f 0a 23 69  sometimes..*/.#i
2b10: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
2b20: 5f 5f 29 20 26 26 20 30 0a 23 20 64 65 66 69 6e  __) && 0.# defin
2b30: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 5f  e likely(X)    _
2b40: 5f 62 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28  _builtin_expect(
2b50: 28 58 29 2c 31 29 0a 23 20 64 65 66 69 6e 65 20  (X),1).# define 
2b60: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 5f 5f 62  unlikely(X)  __b
2b70: 75 69 6c 74 69 6e 5f 65 78 70 65 63 74 28 28 58  uiltin_expect((X
2b80: 29 2c 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ),0).#else.# def
2b90: 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20  ine likely(X)   
2ba0: 20 21 21 28 58 29 0a 23 20 64 65 66 69 6e 65 20   !!(X).# define 
2bb0: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 21 21 28  unlikely(X)  !!(
2bc0: 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c  X).#endif..#incl
2bd0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
2be0: 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68  #include "hash.h
2bf0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73  ".#include "pars
2c00: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73  e.h".#include <s
2c10: 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  tdio.h>.#include
2c20: 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63   <stdlib.h>.#inc
2c30: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
2c40: 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74  #include <assert
2c50: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
2c60: 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49  ddef.h>../*.** I
2c70: 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20  f compiling for 
2c80: 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74  a processor that
2c90: 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20   lacks floating 
2ca0: 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a  point support,.*
2cb0: 2a 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74  * substitute int
2cc0: 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e  eger for floatin
2cd0: 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65  g-point.*/.#ifde
2ce0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
2cf0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64  OATING_POINT.# d
2d00: 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c  efine double sql
2d10: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
2d20: 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f  ne float sqlite_
2d30: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c  int64.# define L
2d40: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73  ONGDOUBLE_TYPE s
2d50: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66  qlite_int64.# if
2d60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d70: 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53  DBL.#   define S
2d80: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28  QLITE_BIG_DBL ((
2d90: 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31  (sqlite3_int64)1
2da0: 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23  )<<50).# endif.#
2db0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
2dc0: 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e  MIT_DATETIME_FUN
2dd0: 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  CS 1.# define SQ
2de0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
2df0: 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  1.# undef SQLITE
2e00: 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34  _MIXED_ENDIAN_64
2e10: 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65  BIT_FLOAT.# unde
2e20: 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53  f SQLITE_HAVE_IS
2e30: 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  NAN.#endif.#ifnd
2e40: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
2e50: 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  L.# define SQLIT
2e60: 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29  E_BIG_DBL (1e99)
2e70: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
2e80: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65  MIT_TEMPDB is se
2e90: 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45  t to 1 if SQLITE
2ea0: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20  _OMIT_TEMPDB is 
2eb0: 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a  defined, or 0.**
2ec0: 20 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69   afterward. Havi
2ed0: 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c  ng this macro al
2ee0: 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65  lows us to cause
2ef0: 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20   the C compiler 
2f00: 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65  .** to omit code
2f10: 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74 61   used by TEMP ta
2f20: 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73  bles without mes
2f30: 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74 65  sy #ifndef state
2f40: 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  ments..*/.#ifdef
2f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2f60: 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  PDB.#define OMIT
2f70: 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a  _TEMPDB 1.#else.
2f80: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
2f90: 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  PDB 0.#endif../*
2fa0: 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f  .** The "file fo
2fb0: 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20  rmat" number is 
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
2fd0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  is incremented w
2fe0: 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56  henever.** the V
2ff0: 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66  DBE-level file f
3000: 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20  ormat changes.  
3010: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3020: 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a  cros define the.
3030: 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  ** the default f
3040: 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e  ile format for n
3050: 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ew databases and
3060: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c   the maximum fil
3070: 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74  e format.** that
3080: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
3090: 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e   read..*/.#defin
30a0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  e SQLITE_MAX_FIL
30b0: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64  E_FORMAT 4.#ifnd
30c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
30d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20  T_FILE_FORMAT.# 
30e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
30f0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
3100: 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 4.#endif../*.*
3110: 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
3120: 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72 65  her triggers are
3130: 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64 65   recursive by de
3140: 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e  fault.  This can
3150: 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61   be.** changed a
3160: 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67  t run-time using
3170: 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69   a pragma..*/.#i
3180: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
3190: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
31a0: 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65  RIGGERS.# define
31b0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
31c0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
31d0: 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RS 0.#endif../*.
31e0: 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65 66  ** Provide a def
31f0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53  ault value for S
3200: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3210: 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e   in case it is n
3220: 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  ot specified.** 
3230: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  on the command-l
3240: 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine.*/.#ifndef S
3250: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3260: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3270: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20  _TEMP_STORE 1.# 
3280: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
3290: 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f  MP_STORE_xc 1  /
32a0: 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63  * Exclude from c
32b0: 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66  time.c */.#endif
32c0: 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73  ../*.** GCC does
32d0: 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20   not define the 
32e0: 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f  offsetof() macro
32f0: 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74   so we'll have t
3300: 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65  o do it.** ourse
3310: 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  lves..*/.#ifndef
3320: 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e   offsetof.#defin
3330: 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43  e offsetof(STRUC
3340: 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e  TURE,FIELD) ((in
3350: 74 29 28 28 63 68 61 72 2a 29 26 28 28 53 54 52  t)((char*)&((STR
3360: 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c  UCTURE*)0)->FIEL
3370: 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D)).#endif../*.*
3380: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
3390: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
33a0: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
33b0: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
33c0: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
33d0: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
33e0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
33f0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
3400: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
3410: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
3420: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
3430: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
3440: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
3450: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
3460: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
3470: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
3480: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
3490: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
34a0: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
34b0: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
34c0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
34d0: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
34e0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
34f0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
3500: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
3510: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
3520: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
3530: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
3540: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
3550: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
3560: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
3570: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
3580: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
3590: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
35a0: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
35b0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
35c0: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
35d0: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
35e0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
35f0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
3600: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
3610: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
3620: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
3630: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
3640: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
3650: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
3660: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3670: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
3680: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
3690: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
36a0: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
36b0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
36c0: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
36d0: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
36e0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
36f0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
3700: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
3710: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
3720: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
3730: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
3740: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
3750: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
3760: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
3770: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3780: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
3790: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
37a0: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
37b0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
37c0: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
37d0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
37e0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
37f0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
3800: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
3810: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
3820: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
3830: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
3840: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
3850: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3860: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
3870: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
3880: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
3890: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
38a0: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
38b0: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
38c0: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
38d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
38e0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
38f0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
3900: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
3910: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
3920: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
3930: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
3940: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
3950: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
3960: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
3970: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
3980: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
3990: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
39a0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
39b0: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
39c0: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
39d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
39e0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
39f0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
3a00: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
3a10: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
3a20: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
3a30: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
3a40: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
3a50: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
3a60: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
3a70: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
3a80: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
3a90: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
3aa0: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
3ab0: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
3ac0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
3ad0: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
3ae0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
3af0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
3b00: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
3b10: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
3b20: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
3b30: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
3b40: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
3b50: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
3b60: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
3b70: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
3b80: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
3b90: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
3ba0: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
3bb0: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
3bc0: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
3bd0: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
3be0: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
3bf0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
3c00: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
3c10: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
3c20: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
3c30: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
3c40: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
3c50: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
3c60: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
3c70: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
3c80: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
3c90: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
3ca0: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
3cb0: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
3cc0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
3cd0: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3ce0: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
3cf0: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
3d00: 64 69 61 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74  dian,.** evaluat
3d10: 65 64 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  ed at runtime..*
3d20: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3d30: 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e  AMALGAMATION.con
3d40: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
3d50: 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74  e = 1;.#else.ext
3d60: 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  ern const int sq
3d70: 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66  lite3one;.#endif
3d80: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 69 33 38  .#if defined(i38
3d90: 36 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  6) || defined(__
3da0: 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  i386__) || defin
3db0: 65 64 28 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20  ed(_M_IX86)\.   
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 64 65 66            || def
3de0: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
3df0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
3e00: 36 34 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  64__).# define S
3e10: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
3e20: 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51     0.# define SQ
3e30: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
3e40: 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 1.# define SQL
3e50: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
3e60: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a   SQLITE_UTF16LE.
3e70: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
3e80: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
3e90: 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73     (*(char *)(&s
3ea0: 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23  qlite3one)==0).#
3eb0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c   define SQLITE_L
3ec0: 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63  ITTLEENDIAN (*(c
3ed0: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
3ee0: 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65  ne)==1).# define
3ef0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
3f00: 49 56 45 20 28 53 51 4c 49 54 45 5f 42 49 47 45  IVE (SQLITE_BIGE
3f10: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
3f20: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
3f30: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
3f40: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
3f50: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
3f60: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
3f70: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
3f80: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
3f90: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
3fa0: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
3fb0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
3fc0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
3fd0: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
3fe0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
3ff0: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
4000: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
4010: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
4020: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
4030: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
4040: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
4050: 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e  64)../* .** Roun
4060: 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f  d up a number to
4070: 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72   the next larger
4080: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20   multiple of 8. 
4090: 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a   This is used.**
40a0: 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65   to force 8-byte
40b0: 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34   alignment on 64
40c0: 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72  -bit architectur
40d0: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  es..*/.#define R
40e0: 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28  OUND8(x)     (((
40f0: 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a  x)+7)&~7)../*.**
4100: 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74   Round down to t
4110: 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69  he nearest multi
4120: 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66  ple of 8.*/.#def
4130: 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78  ine ROUNDDOWN8(x
4140: 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  ) ((x)&~7)../*.*
4150: 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
4160: 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61  e pointer X is a
4170: 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62  ligned to an 8-b
4180: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54  yte boundary.  T
4190: 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  his.** macro is 
41a0: 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e  used only within
41b0: 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72   assert() to ver
41c0: 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64  ify that the cod
41d0: 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c  e gets.** all al
41e0: 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74  ignment restrict
41f0: 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a  ions correct..**
4200: 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53  .** Except, if S
4210: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
4220: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64  GNED_MALLOC is d
4230: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
4240: 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  .** underlying m
4250: 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e  alloc() implemen
4260: 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72  tion might retur
4270: 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67  n us 4-byte alig
4280: 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e  ned.** pointers.
4290: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
42a0: 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79  only verify 4-by
42b0: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f  te alignment..*/
42c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34  .#ifdef SQLITE_4
42d0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
42e0: 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49  LLOC.# define EI
42f0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
4300: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
4310: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
4320: 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  )&3)==0).#else.#
4330: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
4340: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
4350: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
4360: 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d  - (char*)0)&7)==
4370: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
4380: 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e   Disable MMAP on
4390: 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65   platforms where
43a0: 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20   it is known to 
43b0: 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20  not work.*/.#if 
43c0: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
43d0: 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D__) || defined(
43e0: 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e  __QNXNTO__).# un
43f0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
4400: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
4410: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
4420: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
4430: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d  ./*.** Default m
4440: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d  aximum size of m
4450: 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65  emory used by me
4460: 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20  mory-mapped I/O 
4470: 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69  in the VFS.*/.#i
4480: 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23  fdef __APPLE__.#
4490: 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74   include <Target
44a0: 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a  Conditionals.h>.
44b0: 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49  # if TARGET_OS_I
44c0: 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20  PHONE.#   undef 
44d0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
44e0: 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20  SIZE.#   define 
44f0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4500: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4510: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4520: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
4530: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
4540: 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c  __linux__) \.  |
4550: 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  | defined(_WIN32
4560: 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65  ) \.  || (define
4570: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20  d(__APPLE__) && 
4580: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f  defined(__MACH__
4590: 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  )) \.  || define
45a0: 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64 65 66  d(__sun).#   def
45b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
45c0: 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30  MAP_SIZE 0x7fff0
45d0: 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31  000  /* 21474181
45e0: 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20  12 */.# else.#  
45f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4600: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4610: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
4620: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4630: 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63  SIZE_xc 1 /* exc
4640: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
4650: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
4660: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d  ** The default M
4670: 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f  MAP_SIZE is zero
4680: 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d   on all platform
4690: 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20  s.  Or, even if 
46a0: 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61  a larger.** defa
46b0: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
46c0: 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f   specified at co
46d0: 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65  mpile-time, make
46e0: 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f   sure that it do
46f0: 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64  es.** not exceed
4700: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61   the maximum mma
4710: 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64  p size..*/.#ifnd
4720: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4730: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
4740: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4750: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  ULT_MMAP_SIZE 0.
4760: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4770: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
4780: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
4790: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
47a0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  */.#endif.#if SQ
47b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
47c0: 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41  P_SIZE>SQLITE_MA
47d0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e  X_MMAP_SIZE.# un
47e0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
47f0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
4800: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4810: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53  AULT_MMAP_SIZE S
4820: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4830: 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  IZE.#endif../*.*
4840: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
4850: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
4860: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
4870: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
4880: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
4890: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
48a0: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
48b0: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  . .**.** The sql
48c0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
48d0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
48e0: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
48f0: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
4900: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
4910: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
4920: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
4930: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
4940: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
4950: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
4960: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
4970: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
4980: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4990: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
49a0: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
49b0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
49c0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
49d0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
49e0: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
49f0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
4a00: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
4a10: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
4a20: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
4a30: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
4a40: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
4a50: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
4a60: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
4a70: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
4a80: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
4a90: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
4aa0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
4ab0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
4ac0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
4ad0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
4ae0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
4af0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
4b00: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
4b10: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
4b20: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
4b30: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
4b40: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
4b50: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
4b60: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
4b70: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
4b80: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
4b90: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
4ba0: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
4bb0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
4bc0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
4bd0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
4be0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
4bf0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
4c00: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
4c10: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
4c20: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
4c30: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
4c40: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
4c50: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
4c60: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
4c70: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
4c80: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
4c90: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
4ca0: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
4cb0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
4cc0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
4cd0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
4ce0: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
4cf0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
4d00: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
4d10: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
4d20: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
4d30: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
4d40: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
4d50: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
4d60: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
4d70: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
4d80: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
4d90: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
4da0: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
4db0: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
4dc0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
4dd0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
4de0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
4df0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
4e00: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
4e10: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
4e20: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
4e30: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
4e40: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
4e50: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
4e60: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
4e70: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
4e80: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
4e90: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
4ea0: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
4eb0: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
4ec0: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
4ed0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
4ee0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
4ef0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
4f00: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
4f10: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
4f20: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
4f30: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
4f40: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
4f50: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
4f60: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
4f70: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
4f80: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
4f90: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
4fa0: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
4fb0: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
4fc0: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
4fd0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
4fe0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
4ff0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
5000: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
5010: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
5020: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
5030: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
5040: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
5050: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
5060: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
5070: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
5080: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
5090: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
50a0: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
50b0: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
50c0: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
50d0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
50e0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
50f0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
5100: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
5110: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
5120: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
5130: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
5140: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
5150: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
5160: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
5170: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
5180: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
5190: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
51a0: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
51b0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
51c0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
51d0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
51e0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
51f0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
5200: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
5210: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
5220: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
5230: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
5240: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
5250: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
5260: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5270: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
5280: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
5290: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
52a0: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
52b0: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
52c0: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
52d0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
52e0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
52f0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
5300: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
5310: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
5320: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
5330: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
5340: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
5350: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
5360: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
5370: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
5380: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
5390: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
53a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
53b0: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
53c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
53d0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
53e0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
53f0: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
5400: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
5410: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
5420: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
5430: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
5440: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
5450: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
5460: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
5470: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
5480: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
5490: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
54a0: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
54b0: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
54c0: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
54d0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
54e0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
54f0: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
5500: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
5510: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
5520: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
5530: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
5540: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
5550: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
5560: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
5570: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
5580: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
5590: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
55a0: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
55b0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
55c0: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
55d0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
55e0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
55f0: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
5600: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
5610: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
5620: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
5630: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
5640: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
5650: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
5660: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
5670: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
5680: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
5690: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
56a0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
56b0: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
56c0: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
56d0: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
56e0: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
56f0: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
5700: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
5710: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
5720: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
5730: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
5740: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
5750: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
5760: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
5770: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
5780: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
5790: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
57a0: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
57b0: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
57c0: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
57d0: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
57e0: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
57f0: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
5800: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
5810: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
5820: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
5830: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
5840: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5850: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
5860: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
5870: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
5880: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
5890: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
58a0: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
58b0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
58c0: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
58d0: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
58e0: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
58f0: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
5900: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
5910: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
5920: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
5930: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5940: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
5950: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
5960: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
5970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5980: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
5990: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
59a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
59b0: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
59c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
59d0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
59e0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
59f0: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
5a00: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
5a10: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
5a20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5a30: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
5a40: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
5a50: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
5a60: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
5a70: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
5a80: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
5a90: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
5aa0: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
5ab0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
5ac0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
5ad0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
5ae0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
5af0: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
5b00: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
5b10: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
5b20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5b30: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
5b40: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
5b50: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
5b60: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
5b70: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
5b80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
5b90: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
5ba0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
5bb0: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
5bc0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
5bd0: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
5be0: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
5bf0: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
5c00: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
5c10: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
5c20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c30: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
5c40: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
5c50: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
5c60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c70: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
5c80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5c90: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
5ca0: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
5cb0: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
5cc0: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
5cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
5ce0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
5cf0: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
5d00: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
5d10: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
5d20: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
5d30: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
5d40: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
5d50: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
5d60: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e  f struct WhereIn
5d70: 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79  fo WhereInfo;.ty
5d80: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65  pedef struct Whe
5d90: 72 65 4c 65 76 65 6c 20 57 68 65 72 65 4c 65 76  reLevel WhereLev
5da0: 65 6c 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  el;../*.** Defer
5db0: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
5dc0: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
5dd0: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
5de0: 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48  " and .** "BusyH
5df0: 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73  andler" typedefs
5e00: 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65  . vdbe.h also re
5e10: 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20  quires a few of 
5e20: 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f  the opaque.** po
5e30: 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65  inter types (i.e
5e40: 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e  . FuncDef) defin
5e50: 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e  ed above..*/.#in
5e60: 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a  clude "btree.h".
5e70: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
5e80: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65  ".#include "page
5e90: 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  r.h".#include "p
5ea0: 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75  cache.h"..#inclu
5eb0: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
5ec0: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f  de "mutex.h".../
5ed0: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
5ee0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
5ef0: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
5f00: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
5f10: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
5f20: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
5f30: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
5f40: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
5f50: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
5f60: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
5f70: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
5f80: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
5f90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
5fa0: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
5fb0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
5fc0: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
5fd0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
5fe0: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
5ff0: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
6000: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
6010: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
6020: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
6030: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
6040: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42   database */.  B
6050: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
6060: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
6070: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
6080: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
6090: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
60a0: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
60b0: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
60c0: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
60d0: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65  o disk */.  Sche
60e0: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
60f0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
6100: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
6110: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
6120: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
6130: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
6140: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6150: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
6160: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
6170: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
6180: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
6190: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
61a0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
61b0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
61c0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
61d0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
61e0: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
61f0: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
6200: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
6210: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
6220: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
6230: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
6240: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
6250: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
6260: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
6270: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
6280: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a  red object..** .
6290: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
62a0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
62b0: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
62c0: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
62d0: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
62e0: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
62f0: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
6300: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
6310: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
6320: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
6330: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
6340: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
6350: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
6360: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
6370: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
6380: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
6390: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
63a0: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
63b0: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
63c0: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
63d0: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
63e0: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
63f0: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
6400: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
6410: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
6420: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
6430: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
6440: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
6450: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
6460: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
6470: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
6480: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
6490: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
64a0: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
64b0: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
64c0: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
64d0: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
64e0: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
64f0: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
6500: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
6510: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
6520: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
6530: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
6540: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
6550: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
6560: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
6570: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
6580: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
6590: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
65a0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
65b0: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
65c0: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
65d0: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
65e0: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
65f0: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
6600: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
6610: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
6620: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
6630: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
6640: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
6650: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
6660: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
6670: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
6680: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
6690: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
66a0: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
66b0: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
66c0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
66d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
66e0: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
66f0: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
6700: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
6710: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
6720: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
6730: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
6740: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
6750: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
6760: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
6770: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
6780: 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e  s in the .** Db.
6790: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
67a0: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
67b0: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
67c0: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
67d0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
67e0: 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
67f0: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
6800: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
6810: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
6820: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26  .pSchema->flags&
6830: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
6840: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
6850: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
6860: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66  Db[I].pSchema->f
6870: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
6880: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
6890: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
68a0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
68b0: 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  flags&=~(P)../*.
68c0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
68d0: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
68e0: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
68f0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
6900: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
6910: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
6920: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
6930: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
6940: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
6950: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
6960: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
6970: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
6980: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
6990: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
69a0: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
69b0: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
69c0: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
69d0: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
69e0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
69f0: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
6a00: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
6a10: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
6a20: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
6a30: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
6a40: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
6a50: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
6a60: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
6a70: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
6a80: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
6a90: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
6aa0: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
6ab0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
6ac0: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
6ad0: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
6ae0: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
6af0: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
6b00: 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  s) */../*.** The
6b10: 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65   number of diffe
6b20: 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68  rent kinds of th
6b30: 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  ings that can be
6b40: 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e   limited.** usin
6b50: 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69  g the sqlite3_li
6b60: 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e  mit() interface.
6b70: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
6b80: 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49  TE_N_LIMIT (SQLI
6b90: 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
6ba0: 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a 0a 2a 2a  _DEPTH+1)../*.**
6bb0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
6bc0: 63 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69  c is a set of fi
6bd0: 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73  xed-size buffers
6be0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
6bf0: 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20  d.** to satisfy 
6c00: 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20  small transient 
6c10: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
6c20: 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f  n requests for o
6c30: 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69  bjects.** associ
6c40: 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74  ated with a part
6c50: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
6c60: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
6c70: 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61   use of.** looka
6c80: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76  side malloc prov
6c90: 69 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61  ides a significa
6ca0: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65  nt performance e
6cb0: 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61  nhancement.** (a
6cc0: 70 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76  pprox 10%) by av
6cd0: 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20  oiding numerous 
6ce0: 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75  malloc/free requ
6cf0: 65 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69  ests while parsi
6d00: 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ng.** SQL statem
6d10: 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
6d20: 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74  Lookaside struct
6d30: 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67  ure holds config
6d40: 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  uration informat
6d50: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a  ion about the.**
6d60: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
6d70: 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61  c subsystem.  Ea
6d80: 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d  ch available mem
6d90: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
6da0: 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69  n.** the lookasi
6db0: 64 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  de subsystem is 
6dc0: 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b  stored on a link
6dd0: 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61  ed list of Looka
6de0: 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65  sideSlot.** obje
6df0: 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61  cts..**.** Looka
6e00: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
6e10: 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65   are only allowe
6e20: 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68  d for objects th
6e30: 61 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  at are associate
6e40: 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74  d.** with a part
6e50: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
6e60: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e  connection.  Hen
6e70: 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  ce, schema infor
6e80: 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a  mation cannot.**
6e90: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f   be stored in lo
6ea0: 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20  okaside because 
6eb0: 69 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20  in shared cache 
6ec0: 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20  mode the schema 
6ed0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69  information.** i
6ee0: 73 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  s shared by mult
6ef0: 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f  iple database co
6f00: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72  nnections.  Ther
6f10: 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72  efore, while par
6f20: 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69  sing.** schema i
6f30: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  nformation, the 
6f40: 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c  Lookaside.bEnabl
6f50: 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ed flag is clear
6f60: 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f  ed so that.** lo
6f70: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
6f80: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64  ons are not used
6f90: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
6fa0: 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  e schema objects
6fb0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  ..*/.struct Look
6fc0: 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a  aside {.  u16 sz
6fd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
6fe0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
6ff0: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
7000: 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c  s */.  u8 bEnabl
7010: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ed;            /
7020: 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62  * False to disab
7030: 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65  le new lookaside
7040: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
7050: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
7060: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
7070: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
7080: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
7090: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
70a0: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
70b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
70c0: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
70d0: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
70e0: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
70f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
7100: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
7110: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
7120: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
7130: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
7140: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
7150: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
7160: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
7170: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
7180: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
7190: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
71a0: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
71b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
71c0: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
71d0: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
71e0: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
71f0: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
7200: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
7210: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
7220: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
7230: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
7240: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
7250: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
7260: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
7270: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
7280: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
7290: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
72a0: 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63  h table for func
72b0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  tion definitions
72c0: 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ..**.** Hash eac
72d0: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
72e0: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
72f0: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
7300: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
7310: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
7320: 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73  the FuncDef.pHas
7330: 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75  h chain..*/.stru
7340: 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b  ct FuncDefHash {
7350: 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33  .  FuncDef *a[23
7360: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  ];       /* Hash
7370: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
7380: 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ions */.};../*.*
7390: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
73a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e  connection is an
73b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
73c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
73d0: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
73e0: 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69  sqlite3 {.  sqli
73f0: 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20  te3_vfs *pVfs;  
7400: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20            /* OS 
7410: 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  Interface */.  s
7420: 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62  truct Vdbe *pVdb
7430: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
7440: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76  List of active v
7450: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20  irtual machines 
7460: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44  */.  CollSeq *pD
7470: 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  fltColl;        
7480: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c     /* The defaul
7490: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  t collating sequ
74a0: 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f  ence (BINARY) */
74b0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
74c0: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
74d0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
74e0: 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44  utex */.  Db *aD
74f0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
7500: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62          /* All b
7510: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74  ackends */.  int
7520: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
7530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7540: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
7550: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
7560: 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  e */.  int flags
7570: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7580: 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61       /* Miscella
7590: 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65  neous flags. See
75a0: 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20   below */.  i64 
75b0: 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20  lastRowid;      
75c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57            /* ROW
75d0: 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e  ID of most recen
75e0: 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62  t insert (see ab
75f0: 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a  ove) */.  i64 sz
7600: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
7610: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
7620: 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74  lt mmap_size set
7630: 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ting */.  unsign
7640: 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  ed int openFlags
7650: 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  ;       /* Flags
7660: 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
7670: 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a  e3_vfs.xOpen() *
7680: 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b  /.  int errCode;
7690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76a0: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
76b0: 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c   error code (SQL
76c0: 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20  ITE_*) */.  int 
76d0: 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20  errMask;        
76e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72            /* & r
76f0: 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68  esult codes with
7700: 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74   this before ret
7710: 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36 20  urning */.  u16 
7720: 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20  dbOptFlags;     
7730: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
7740: 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  gs to enable/dis
7750: 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  able optimizatio
7760: 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ns */.  u8 autoC
7770: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
7780: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
7790: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
77a0: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
77b0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
77c0: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
77d0: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
77e0: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
77f0: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
7800: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
7810: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
7820: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
7830: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
7840: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
7850: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
7860: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
7870: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
7880: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
7890: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
78a0: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
78b0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
78c0: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
78d0: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
78e0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
78f0: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
7900: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
7910: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
7920: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
7930: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
7940: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
7950: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
7960: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
7970: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
7980: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
7990: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
79a0: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
79b0: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
79c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
79d0: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
79e0: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
79f0: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a10: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
7a20: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
7a30: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
7a40: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7a60: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
7a70: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
7a80: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
7a90: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
7aa0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
7ab0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7ac0: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
7ad0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
7ae0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
7af0: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
7b00: 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  s */.  struct sq
7b10: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
7b20: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
7b30: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
7b40: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
7b50: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
7b60: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
7b70: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
7b80: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
7b90: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
7ba0: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
7bc0: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
7bd0: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
7be0: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
7bf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7c00: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
7c10: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
7c20: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
7c30: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
7c40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
7c50: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
7c60: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
7c70: 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  gger */.  } init
7c80: 3b 0a 20 20 69 6e 74 20 61 63 74 69 76 65 56 64  ;.  int activeVd
7c90: 62 65 43 6e 74 3b 20 20 20 20 20 20 20 20 20 20  beCnt;          
7ca0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
7cb0: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 65  DBEs currently e
7cc0: 78 65 63 75 74 69 6e 67 20 2a 2f 0a 20 20 69 6e  xecuting */.  in
7cd0: 74 20 77 72 69 74 65 56 64 62 65 43 6e 74 3b 20  t writeVdbeCnt; 
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7cf0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
7d00: 56 44 42 45 73 20 74 68 61 74 20 61 72 65 20 77  VDBEs that are w
7d10: 72 69 74 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  riting */.  int 
7d20: 76 64 62 65 45 78 65 63 43 6e 74 3b 20 20 20 20  vdbeExecCnt;    
7d30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7d40: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
7d50: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
7d60: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  ) */.  int nExte
7d70: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
7d80: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7d90: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
7da0: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
7db0: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
7dc0: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
7dd0: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
7de0: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76  y handles */.  v
7df0: 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f  oid (*xTrace)(vo
7e00: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  id*,const char*)
7e10: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63  ;        /* Trac
7e20: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
7e30: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7e60: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
7e70: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
7e80: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
7e90: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
7ea0: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
7eb0: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
7ec0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
7ed0: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
7ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ef0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
7f00: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
7f10: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
7f20: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
7f30: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
7f40: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
7f50: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
7f60: 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c  int (*xCommitCal
7f70: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20  lback)(void*);  
7f80: 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20    /* Invoked at 
7f90: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
7fa0: 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61  .  void *pRollba
7fb0: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
7fc0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
7fd0: 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c   to xRollbackCal
7fe0: 6c 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20  lback() */   .  
7ff0: 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b  void (*xRollback
8000: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29  Callback)(void*)
8010: 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20  ; /* Invoked at 
8020: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
8030: 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65  .  void *pUpdate
8040: 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55  Arg;.  void (*xU
8050: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76  pdateCallback)(v
8060: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
8070: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8080: 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b  *,sqlite_int64);
8090: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
80a0: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
80b0: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
80c0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
80d0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
80e0: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
80f0: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
8100: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
8110: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
8120: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
8130: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
8140: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
8150: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
8160: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
8170: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
8180: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
8190: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
81a0: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
81b0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
81c0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
81d0: 67 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  ge */.  char *zE
81e0: 72 72 4d 73 67 3b 20 20 20 20 20 20 20 20 20 20  rrMsg;          
81f0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
8200: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
8210: 67 65 20 28 55 54 46 2d 38 20 65 6e 63 6f 64 65  ge (UTF-8 encode
8220: 64 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  d) */.  char *zE
8230: 72 72 4d 73 67 31 36 3b 20 20 20 20 20 20 20 20  rrMsg16;        
8240: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
8250: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
8260: 67 65 20 28 55 54 46 2d 31 36 20 65 6e 63 6f 64  ge (UTF-16 encod
8270: 65 64 29 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ed) */.  union {
8280: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
8290: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
82a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
82b0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
82c0: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
82d0: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
82e0: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
82f0: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
8300: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
8310: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
8320: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
8330: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
8340: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
8350: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
8360: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69  UTHORIZATION.  i
8370: 6e 74 20 28 2a 78 41 75 74 68 29 28 76 6f 69 64  nt (*xAuth)(void
8380: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
8390: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
83a0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
83b0: 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 20 20  char*);.        
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
83e0: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
83f0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
8400: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
8410: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
8420: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
8430: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
8440: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
8450: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
8460: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
8470: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
8480: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
8490: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
84a0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
84b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
84c0: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
84d0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
84e0: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
84f0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e  callback */.  in
8500: 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  t nProgressOps; 
8510: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8520: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
8530: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
8540: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
8550: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8560: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
8570: 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b  E.  int nVTrans;
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8590: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73    /* Allocated s
85a0: 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a  ize of aVTrans *
85b0: 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  /.  Hash aModule
85c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
85d0: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
85e0: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
85f0: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56  _module() */.  V
8600: 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78  tabCtx *pVtabCtx
8610: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8620: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
8630: 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f  ve vtab connect/
8640: 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62  create */.  VTab
8650: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
8660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
8670: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
8680: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
8690: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
86a0: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
86b0: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
86c0: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
86d0: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
86e0: 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44 65  .#endif.  FuncDe
86f0: 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20  fHash aFunc;    
8700: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
8710: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
8720: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
8730: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
8740: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8750: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
8760: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
8770: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
8780: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
8790: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
87a0: 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69  */.  Db aDbStati
87b0: 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20  c[2];           
87c0: 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61     /* Static spa
87d0: 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66  ce for the 2 def
87e0: 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ault backends */
87f0: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
8800: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
8810: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
8820: 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  ve savepoints */
8830: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
8840: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
8850: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
8860: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
8870: 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  c */.  int nSave
8880: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
8890: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
88a0: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
88b0: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
88c0: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
88d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
88e0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
88f0: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
8900: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
8910: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
8920: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ns;            /
8930: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63  * Net deferred c
8940: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
8950: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a  transaction. */.
8960: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
8970: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
8980: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
8990: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
89a0: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23  n DbFree() */..#
89b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
89c0: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
89d0: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
89e0: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
89f0: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
8a00: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
8a10: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
8a20: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
8a30: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
8a40: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
8a50: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
8a60: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
8a70: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
8a80: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
8a90: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
8aa0: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
8ab0: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
8ac0: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
8ad0: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
8ae0: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
8af0: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
8b00: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
8b10: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
8b20: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
8b30: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
8b40: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
8b50: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
8b60: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
8b70: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
8b80: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
8b90: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
8ba0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
8bb0: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
8bc0: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
8bd0: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
8be0: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
8bf0: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
8c00: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
8c10: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
8c20: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8c40: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
8c50: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
8c60: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
8c70: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
8c80: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
8c90: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
8ca0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
8cb0: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
8cc0: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
8cd0: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
8ce0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
8cf0: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
8d00: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
8d10: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
8d20: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
8d30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e 43 28  .*/.#define ENC(
8d40: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
8d50: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
8d60: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
8d70: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
8d80: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f  qlite3.flags..*/
8d90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
8da0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
8db0: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
8dc0: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
8dd0: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
8de0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
8df0: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
8e00: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
8e10: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
8e20: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
8e30: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
8e40: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
8e50: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
8e60: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
8e70: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
8e80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
8e90: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
8ea0: 30 30 30 30 30 38 20 20 2f 2a 20 53 68 6f 77 20  000008  /* Show 
8eb0: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
8ec0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
8ed0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
8ee0: 20 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20       0x00000010 
8ef0: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
8f00: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
8f10: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8f40: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
8f50: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
8f60: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8f90: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
8fa0: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
8fb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8fc0: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
8fd0: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 49  0x00000020  /* I
8fe0: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
8ff0: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
9000: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9020: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
9030: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
9040: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
9050: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
9060: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34 30        0x00000040
9070: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
9080: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
9090: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
90a0: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
90b0: 67 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20  g    0x00000080 
90c0: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
90d0: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
90e0: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
90f0: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
9100: 61 20 20 20 20 30 78 30 30 30 30 30 31 30 30 20  a    0x00000100 
9110: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
9120: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
9130: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9140: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
9150: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 54  0x00000200  /* T
9160: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
9170: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
9180: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9190: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
91a0: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 6f  x00000400  /* Do
91b0: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
91c0: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
91d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
91e0: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
91f0: 20 30 78 30 30 30 30 38 30 30 20 20 2f 2a 20 46   0x0000800  /* F
9200: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
9210: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
9220: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
9230: 65 46 6d 74 20 20 30 78 30 30 30 30 31 30 30 30  eFmt  0x00001000
9240: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
9250: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
9260: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
9270: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
9280: 63 20 20 20 20 20 20 30 78 30 30 30 30 32 30 30  c      0x0000200
9290: 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  0  /* Use full f
92a0: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
92b0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
92c0: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
92d0: 79 6e 63 20 20 30 78 30 30 30 30 34 30 30 30 20  ync  0x00004000 
92e0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
92f0: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
9300: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
9310: 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65  ITE_RecoveryMode
9320: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
9330: 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20  * Ignore schema 
9340: 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
9350: 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  e SQLITE_Reverse
9360: 4f 72 64 65 72 20 20 20 30 78 30 30 30 31 30 30  Order   0x000100
9370: 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75  00  /* Reverse u
9380: 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54 73  nordered SELECTs
9390: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
93a0: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 20  TE_RecTriggers  
93b0: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
93c0: 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76   Enable recursiv
93d0: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
93e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72  efine SQLITE_For
93f0: 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30  eignKeys    0x00
9400: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72  040000  /* Enfor
9410: 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ce foreign key c
9420: 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23  onstraints  */.#
9430: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75  define SQLITE_Au
9440: 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78 30  toIndex      0x0
9450: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0080000  /* Enab
9460: 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64  le automatic ind
9470: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
9480: 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69  SQLITE_PreferBui
9490: 6c 74 69 6e 20 20 30 78 30 30 31 30 30 30 30 30  ltin  0x00100000
94a0: 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20    /* Preference 
94b0: 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  to built-in func
94c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
94d0: 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
94e0: 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f  n  0x00200000  /
94f0: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
9500: 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  tension */.#defi
9510: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
9520: 54 72 69 67 67 65 72 20 20 30 78 30 30 34 30 30  Trigger  0x00400
9530: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
9540: 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  enable triggers 
9550: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  */../*.** Bits o
9560: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
9570: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
9580: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
9590: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
95a0: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
95b0: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
95c0: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
95d0: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
95e0: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
95f0: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
9600: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
9610: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
9620: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
9630: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
9640: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
9650: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
9660: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
9670: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
9680: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
9690: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
96a0: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
96b0: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
96c0: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
96d0: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
96e0: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
96f0: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
9700: 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ctoring */.#defi
9710: 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61  ne SQLITE_IdxRea
9720: 6c 41 73 49 6e 74 20 20 20 30 78 30 30 31 30 20  lAsInt   0x0010 
9730: 20 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c 20    /* Store REAL 
9740: 61 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63 65  as INT in indice
9750: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9760: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
9770: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
9780: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
9790: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
97a0: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
97b0: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
97c0: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
97d0: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
97e0: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
97f0: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
9800: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
9810: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
9820: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9830: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
9840: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
9850: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
9860: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
9870: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9880: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
9890: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
98a0: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
98b0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
98c0: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
98d0: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
98e0: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
98f0: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
9900: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
9910: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
9920: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
9930: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
9940: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
9950: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
9960: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
9970: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
9980: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
9990: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
99a0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
99b0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
99c0: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
99d0: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
99e0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
99f0: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
9a00: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
9a10: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
9a20: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
9a30: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
9a40: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
9a50: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
9a60: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
9a70: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
9a80: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
9a90: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
9aa0: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
9ab0: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
9ac0: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
9ad0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
9ae0: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
9af0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
9b00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9b10: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
9b20: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
9b30: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
9b40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9b50: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
9b60: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
9b70: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
9b80: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
9b90: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
9ba0: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
9bb0: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
9bc0: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
9bd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
9be0: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
9bf0: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
9c00: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
9c10: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
9c20: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
9c30: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
9c40: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
9c50: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
9c60: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
9c70: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
9c80: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
9c90: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
9ca0: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
9cb0: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
9cc0: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
9cd0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
9ce0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9cf0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
9d00: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
9d10: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
9d20: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
9d30: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
9d40: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
9d50: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
9d60: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
9d70: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
9d80: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
9d90: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
9da0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
9db0: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
9dc0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
9dd0: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
9de0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9df0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
9e00: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
9e10: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 38 20 69  imited */.  u8 i
9e20: 50 72 65 66 45 6e 63 3b 20 20 20 20 20 20 20 20  PrefEnc;        
9e30: 20 2f 2a 20 50 72 65 66 65 72 72 65 64 20 74 65   /* Preferred te
9e40: 78 74 20 65 6e 63 6f 64 69 6e 67 20 28 53 51 4c  xt encoding (SQL
9e50: 49 54 45 5f 55 54 46 38 2c 20 31 36 4c 45 2c 20  ITE_UTF8, 16LE, 
9e60: 31 36 42 45 29 20 2a 2f 0a 20 20 75 38 20 66 6c  16BE) */.  u8 fl
9e70: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
9e80: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
9e90: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
9ea0: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
9eb0: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
9ec0: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
9ed0: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
9ee0: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
9ef0: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
9f00: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
9f10: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
9f20: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
9f30: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
9f40: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
9f50: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
9f60: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
9f70: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9f80: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
9f90: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
9fa0: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
9fb0: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
9fc0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9fd0: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
9fe0: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
9ff0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
a000: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
a010: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
a020: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
a030: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
a040: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
a050: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
a060: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
a070: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
a080: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
a090: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
a0a0: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
a0b0: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
a0c0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
a0d0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
a0e0: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
a0f0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
a100: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
a110: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
a120: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
a130: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
a140: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
a150: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
a160: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
a170: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
a180: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
a190: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
a1a0: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
a1b0: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
a1c0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
a1d0: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
a1e0: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
a1f0: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
a200: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
a210: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
a220: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
a230: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
a240: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
a250: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
a260: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
a270: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
a280: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
a290: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
a2a0: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
a2b0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
a2c0: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
a2d0: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
a2e0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
a2f0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
a300: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
a310: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
a320: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
a330: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
a340: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
a350: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
a360: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
a370: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
a380: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
a390: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
a3a0: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
a3b0: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
a3c0: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
a3d0: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
a3e0: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
a3f0: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
a400: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
a410: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
a420: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
a430: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
a440: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
a450: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
a460: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
a470: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
a480: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
a490: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
a4a0: 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20  FARG.  There.** 
a4b0: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
a4c0: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
a4d0: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
a4e0: 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  is..*/.#define S
a4f0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
a500: 20 20 20 20 30 78 30 31 20 2f 2a 20 43 61 6e 64      0x01 /* Cand
a510: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
a520: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
a530: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a540: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
a550: 30 78 30 32 20 2f 2a 20 43 61 73 65 2d 73 65 6e  0x02 /* Case-sen
a560: 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65  sitive LIKE-type
a570: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
a580: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
a590: 5f 45 50 48 45 4d 20 20 20 20 30 78 30 34 20 2f  _EPHEM    0x04 /
a5a0: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
a5b0: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
a5c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a5d0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
a5e0: 78 30 38 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  x08 /* sqlite3Ge
a5f0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
a600: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
a610: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a620: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
a630: 78 31 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  x10 /* Built-in 
a640: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
a650: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
a660: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
a670: 43 45 20 30 78 32 30 20 2f 2a 20 42 75 69 6c 74  CE 0x20 /* Built
a680: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
a690: 72 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  r ifnull() funct
a6a0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
a6b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
a6c0: 48 20 20 20 30 78 34 30 20 2f 2a 20 42 75 69 6c  H   0x40 /* Buil
a6d0: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
a6e0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
a6f0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
a700: 50 45 4f 46 20 20 20 30 78 38 30 20 2f 2a 20 42  PEOF   0x80 /* B
a710: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
a720: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
a730: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
a740: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
a750: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
a760: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
a770: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
a780: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
a790: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
a7a0: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
a7b0: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
a7c0: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
a7d0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
a7e0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
a7f0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
a800: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
a810: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
a820: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
a830: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
a840: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
a850: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
a860: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
a870: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
a880: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
a890: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
a8a0: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
a8b0: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
a8c0: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
a8d0: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
a8e0: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
a8f0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
a900: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
a910: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
a920: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
a930: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
a940: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
a950: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
a960: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
a970: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
a980: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
a990: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
a9a0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
a9b0: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
a9c0: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
a9d0: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
a9e0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
a9f0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
aa00: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
aa10: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
aa20: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
aa30: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
aa40: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
aa50: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
aa60: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
aa70: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
aa80: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
aa90: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
aaa0: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
aab0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
aac0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
aad0: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
aae0: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
aaf0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
ab00: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
ab10: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
ab20: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
ab30: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
ab40: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
ab50: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
ab60: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
ab70: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
ab80: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
ab90: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
aba0: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
abb0: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
abc0: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
abd0: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
abe0: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
abf0: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
ac00: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
ac10: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
ac20: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
ac30: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
ac40: 51 4c 49 54 45 5f 55 54 46 38 2c 20 28 62 4e 43  QLITE_UTF8, (bNC
ac50: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ac60: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
ac70: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
ac80: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
ac90: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
aca0: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
acb0: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
acc0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
acd0: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
ace0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
acf0: 54 45 5f 55 54 46 38 2c 20 28 62 4e 43 2a 53 51  TE_UTF8, (bNC*SQ
ad00: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ad10: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
ad20: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
ad30: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
ad40: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
ad50: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
ad60: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
ad70: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
ad80: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
ad90: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
ada0: 45 5f 55 54 46 38 2c 20 62 4e 43 2a 53 51 4c 49  E_UTF8, bNC*SQLI
adb0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
adc0: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
add0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
ade0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
adf0: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
ae00: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
ae10: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
ae20: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 66 6c 61  SQLITE_UTF8, fla
ae30: 67 73 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c  gs, (void *)arg,
ae40: 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c   0, likeFunc, 0,
ae50: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
ae60: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
ae70: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
ae80: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
ae90: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
aea0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
aeb0: 20 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f   nc*SQLITE_FUNC_
aec0: 4e 45 45 44 43 4f 4c 4c 2c 20 5c 0a 20 20 20 53  NEEDCOLL, \.   S
aed0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
aee0: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
aef0: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
af00: 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ,0,0}../*.** All
af10: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
af20: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
af30: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
af40: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
af50: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
af60: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
af70: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
af80: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
af90: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
afa0: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
afb0: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
afc0: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
afd0: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
afe0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
aff0: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
b000: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
b010: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b030: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
b040: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
b050: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
b060: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
b070: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b080: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
b090: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
b0a0: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
b0b0: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
b0c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
b0d0: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
b0e0: 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
b0f0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
b100: 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
b110: 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
b120: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
b130: 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
b140: 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
b150: 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
b160: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
b170: 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
b180: 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
b190: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
b1a0: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
b1b0: 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
b1c0: 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
b1d0: 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
b1e0: 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
b1f0: 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
b200: 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
b210: 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
b220: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
b230: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
b240: 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
b250: 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
b260: 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
b270: 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
b280: 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
b290: 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
b2a0: 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
b2b0: 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
b2c0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
b2d0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
b2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
b2f0: 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
b300: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
b310: 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b330: 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
b340: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
b350: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
b360: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
b370: 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
b380: 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
b390: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
b3a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
b3b0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
b3c0: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
b3d0: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
b3e0: 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
b3f0: 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
b400: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
b410: 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
b420: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
b430: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
b440: 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  lumn */.  Expr *
b450: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
b460: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
b470: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
b480: 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20  char *zDflt;    
b490: 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
b4a0: 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  t of the default
b4b0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72   value */.  char
b4c0: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
b4d0: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
b4e0: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
b4f0: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
b500: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
b510: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
b520: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
b530: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
b540: 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
b550: 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
b560: 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
b570: 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
b580: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
b590: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
b5a0: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
b5b0: 65 73 20 2a 2f 0a 20 20 75 31 36 20 63 6f 6c 46  es */.  u16 colF
b5c0: 6c 61 67 73 3b 20 20 20 20 2f 2a 20 42 6f 6f 6c  lags;    /* Bool
b5d0: 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
b5e0: 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
b5f0: 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
b600: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
b610: 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
b620: 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
b630: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
b640: 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
b650: 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
b660: 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
b670: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
b680: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
b690: 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
b6a0: 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
b6b0: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
b6c0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
b6d0: 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
b6e0: 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
b6f0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
b700: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
b710: 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
b720: 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
b730: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
b740: 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
b750: 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
b760: 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
b770: 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
b780: 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
b790: 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
b7a0: 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
b7b0: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
b7c0: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
b7d0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
b7e0: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
b7f0: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
b800: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
b810: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
b820: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
b830: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
b840: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
b850: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
b860: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
b870: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
b880: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
b890: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
b8a0: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
b8b0: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
b8c0: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
b8d0: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
b8e0: 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
b8f0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
b900: 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
b910: 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
b920: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
b930: 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
b940: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
b950: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
b960: 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
b970: 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
b980: 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
b990: 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
b9a0: 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
b9b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b9c0: 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
b9d0: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
b9e0: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
b9f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
ba00: 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
ba10: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
ba20: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a  ng order */../*.
ba30: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
ba40: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
ba50: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
ba60: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
ba70: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
ba80: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
ba90: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
baa0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
bab0: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
bac0: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
bad0: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
bae0: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
baf0: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
bb00: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
bb10: 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a  cutively.  .**.*
bb20: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
bb30: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
bb40: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
bb50: 74 68 20 27 61 27 2e 20 20 54 68 61 74 20 77 61  th 'a'.  That wa
bb60: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
bb70: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
bb80: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
bb90: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
bba0: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
bbb0: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
bbc0: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
bbd0: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
bbe0: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
bbf0: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
bc00: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
bc10: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
bc20: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
bc30: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
bc40: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
bc50: 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rison..*/.#defin
bc60: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  e SQLITE_AFF_TEX
bc70: 54 20 20 20 20 20 27 61 27 0a 23 64 65 66 69 6e  T     'a'.#defin
bc80: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  e SQLITE_AFF_NON
bc90: 45 20 20 20 20 20 27 62 27 0a 23 64 65 66 69 6e  E     'b'.#defin
bca0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  e SQLITE_AFF_NUM
bcb0: 45 52 49 43 20 20 27 63 27 0a 23 64 65 66 69 6e  ERIC  'c'.#defin
bcc0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  e SQLITE_AFF_INT
bcd0: 45 47 45 52 20 20 27 64 27 0a 23 64 65 66 69 6e  EGER  'd'.#defin
bce0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  e SQLITE_AFF_REA
bcf0: 4c 20 20 20 20 20 27 65 27 0a 0a 23 64 65 66 69  L     'e'..#defi
bd00: 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65  ne sqlite3IsNume
bd10: 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20  ricAffinity(X)  
bd20: 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ((X)>=SQLITE_AFF
bd30: 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a  _NUMERIC)../*.**
bd40: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
bd50: 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b  MASK values mask
bd60: 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66  s off the signif
bd70: 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e  icant bits of an
bd80: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c  .** affinity val
bd90: 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ue. .*/.#define 
bda0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
bdb0: 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20      0x67../*.** 
bdc0: 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
bdd0: 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
bde0: 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
bdf0: 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
be00: 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
be10: 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a 23 64 65  affinity..*/.#de
be20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50  fine SQLITE_JUMP
be30: 49 46 4e 55 4c 4c 20 20 20 30 78 30 38 20 20 2f  IFNULL   0x08  /
be40: 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65  * jumps if eithe
be50: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
be60: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
be70: 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20  ITE_STOREP2     
be80: 20 30 78 31 30 20 20 2f 2a 20 53 74 6f 72 65 20   0x10  /* Store 
be90: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32  result in reg[P2
bea0: 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  ] rather than ju
beb0: 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  mp */.#define SQ
bec0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20  LITE_NULLEQ     
bed0: 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d    0x80  /* NULL=
bee0: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
bef0: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
bf00: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
bf10: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
bf20: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
bf30: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
bf40: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
bf50: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
bf60: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
bf70: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
bf80: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
bf90: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
bfa0: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
bfb0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
bfc0: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
bfd0: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
bfe0: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
bff0: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
c000: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c010: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
c020: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
c030: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
c040: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
c050: 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
c060: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
c070: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
c080: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
c090: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
c0a0: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
c0b0: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
c0c0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
c0d0: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
c0e0: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
c0f0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
c100: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
c110: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
c120: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
c130: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
c140: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
c150: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
c160: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
c170: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
c180: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
c190: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
c1a0: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
c1b0: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
c1c0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
c1d0: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
c1e0: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
c1f0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
c200: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
c210: 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
c220: 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  es .** within th
c230: 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
c240: 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
c250: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
c260: 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73  allers .** trans
c270: 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
c280: 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
c290: 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
c2a0: 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ame database .**
c2b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
c2c0: 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
c2d0: 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
c2e0: 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
c2f0: 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
c300: 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
c310: 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
c320: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
c330: 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
c340: 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
c350: 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
c360: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
c370: 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
c380: 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
c390: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
c3a0: 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
c3b0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
c3c0: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
c3d0: 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
c3e0: 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
c3f0: 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
c400: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
c410: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
c420: 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
c430: 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
c440: 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
c450: 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
c460: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
c470: 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
c480: 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
c490: 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
c4a0: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
c4b0: 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
c4c0: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
c4d0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
c4e0: 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
c4f0: 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
c500: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
c510: 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
c520: 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
c530: 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
c540: 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
c550: 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20  objects are not 
c560: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
c570: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
c580: 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
c590: 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
c5a0: 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  d .** immediatel
c5b0: 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
c5c0: 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
c5d0: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
c5e0: 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
c5f0: 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
c600: 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
c610: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
c620: 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
c630: 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
c640: 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
c650: 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
c660: 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
c670: 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78  onnected .** nex
c680: 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
c690: 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
c6a0: 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
c6b0: 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
c6c0: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
c6d0: 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
c6e0: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
c6f0: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
c700: 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
c710: 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
c720: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
c730: 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
c740: 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
c750: 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
c760: 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
c770: 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
c780: 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
c790: 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
c7a0: 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
c7b0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
c7c0: 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
c7d0: 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
c7e0: 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
c7f0: 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
c800: 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
c810: 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69  ated by .** sqli
c820: 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
c830: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
c840: 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
c850: 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
c860: 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  s .** the first 
c870: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
c880: 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
c890: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
c8a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
c8b0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
c8c0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c8d0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
c8e0: 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
c8f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
c900: 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
c910: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
c920: 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
c930: 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
c940: 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
c950: 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
c960: 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
c970: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c980: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
c990: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
c9a0: 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
c9b0: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
c9c0: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
c9d0: 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
c9e0: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
c9f0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
ca00: 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
ca10: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
ca20: 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
ca30: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
ca40: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
ca50: 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
ca60: 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
ca70: 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65  * Each SQL table
ca80: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
ca90: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20  in memory by an 
caa0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
cab0: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  ** following str
cac0: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  ucture..**.** Ta
cad0: 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65  ble.zName is the
cae0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
caf0: 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66  le.  The case of
cb00: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
cb10: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
cb20: 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65  atement is store
cb30: 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e  d, but case is n
cb40: 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66  ot significant f
cb50: 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  or.** comparison
cb60: 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e  s..**.** Table.n
cb70: 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65  Col is the numbe
cb80: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
cb90: 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62  this table.  Tab
cba0: 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20  le.aCol is a.** 
cbb0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72  pointer to an ar
cbc0: 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74  ray of Column st
cbd0: 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f  ructures, one fo
cbe0: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a  r each column..*
cbf0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  *.** If the tabl
cc00: 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52  e has an INTEGER
cc10: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
cc20: 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  en Table.iPKey i
cc30: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a  s the index of.*
cc40: 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61  * the column tha
cc50: 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20  t is that key.  
cc60: 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65   Otherwise Table
cc70: 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69  .iPKey is negati
cc80: 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61  ve.  Note.** tha
cc90: 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  t the datatype o
cca0: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
ccb0: 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45  Y must be INTEGE
ccc0: 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64  R for this field
ccd0: 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20   to.** be set.  
cce0: 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  An INTEGER PRIMA
ccf0: 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61  RY KEY is used a
cd00: 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  s the rowid for 
cd10: 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74  each row of.** t
cd20: 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20  he table.  If a 
cd30: 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54  table has no INT
cd40: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
cd50: 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20  , then a random 
cd60: 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65  rowid.** is gene
cd70: 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  rated for each r
cd80: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  ow of the table.
cd90: 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b    TF_HasPrimaryK
cda0: 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20  ey is set if.** 
cdb0: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
cdc0: 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49  y PRIMARY KEY, I
cdd0: 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77  NTEGER or otherw
cde0: 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ise..**.** Table
cdf0: 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67  .tnum is the pag
ce00: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
ce10: 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   root BTree page
ce20: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
ce30: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
ce40: 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65   file.  If Table
ce50: 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65  .iDb is the inde
ce60: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
ce70: 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a  e table backend.
ce80: 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62  ** in sqlite.aDb
ce90: 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68  [].  0 is for th
cea0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
ceb0: 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65  and 1 is for the
cec0: 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f   file that.** ho
ced0: 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61  lds temporary ta
cee0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
cef0: 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72  .  If TF_Ephemer
cf00: 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65  al is set.** the
cf10: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73  n the table is s
cf20: 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20  tored in a file 
cf30: 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69  that is automati
cf40: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a  cally deleted.**
cf50: 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63   when the VDBE c
cf60: 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62  ursor to the tab
cf70: 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49  le is closed.  I
cf80: 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c  n this case Tabl
cf90: 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72  e.tnum .** refer
cfa0: 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  s VDBE cursor nu
cfb0: 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  mber that holds 
cfc0: 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20  the table open, 
cfd0: 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a  not to the root.
cfe0: 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20  ** page number. 
cff0: 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   Transient table
d000: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  s are used to ho
d010: 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ld the results o
d020: 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79  f a.** sub-query
d030: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e   that appears in
d040: 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20  stead of a real 
d050: 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  table name in th
d060: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a  e FROM clause .*
d070: 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  * of a SELECT st
d080: 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
d090: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
d0a0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
d0b0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
d0c0: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
d0d0: 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
d0e0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
d0f0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
d100: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
d110: 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
d120: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
d130: 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
d140: 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
d150: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
d160: 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
d170: 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
d180: 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
d190: 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
d1a0: 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
d1b0: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
d1c0: 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
d1d0: 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
d1e0: 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
d1f0: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
d200: 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
d210: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
d220: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
d230: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d240: 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72  MIT_CHECK.  Expr
d250: 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
d260: 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
d270: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e  nstraints */.#en
d280: 64 69 66 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52  dif.  tRowcnt nR
d290: 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a 20 45 73  owEst;     /* Es
d2a0: 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20  timated rows in 
d2b0: 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c  table - from sql
d2c0: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
d2d0: 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
d2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
d2f0: 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72  t BTree node for
d300: 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65 65   this table (see
d310: 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a   note above) */.
d320: 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
d330: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
d340: 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
d350: 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
d360: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
d370: 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
d380: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
d390: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
d3a0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
d3b0: 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u16 nRef;       
d3c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d3d0: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
d3e0: 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75 38  is Table */.  u8
d3f0: 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20   tabFlags;      
d400: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
d410: 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  _* values */.  u
d420: 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
d430: 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
d440: 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
d450: 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
d460: 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
d470: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d480: 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
d490: 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
d4a0: 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
d4b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
d4c0: 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
d4d0: 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
d4e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d4f0: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
d500: 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
d510: 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
d520: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
d530: 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
d540: 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
d550: 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f  eArg;  /* Text o
d560: 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67  f all module arg
d570: 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65  s. [0] is module
d580: 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c   name */.  VTabl
d590: 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
d5a0: 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
d5b0: 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
d5c0: 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
d5d0: 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
d5e0: 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
d5f0: 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
d600: 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
d610: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
d620: 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
d630: 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
d640: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
d650: 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
d660: 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
d670: 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
d680: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
d690: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
d6a0: 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a  be.tabFlags..*/.
d6b0: 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
d6c0: 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20  nly        0x01 
d6d0: 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
d6e0: 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
d6f0: 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
d700: 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20  eral       0x02 
d710: 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72     /* An ephemer
d720: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
d730: 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72  ine TF_HasPrimar
d740: 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f  yKey   0x04    /
d750: 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72  * Table has a pr
d760: 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
d770: 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72  fine TF_Autoincr
d780: 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20  ement   0x08    
d790: 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61  /* Integer prima
d7a0: 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e  ry key is autoin
d7b0: 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69  crement */.#defi
d7c0: 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20  ne TF_Virtual   
d7d0: 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a        0x10    /*
d7e0: 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   Is a virtual ta
d7f0: 62 6c 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  ble */.../*.** T
d800: 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
d810: 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
d820: 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
d830: 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
d840: 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
d850: 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
d860: 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
d870: 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
d880: 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
d890: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
d8a0: 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
d8b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d8c0: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
d8d0: 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
d8e0: 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58  ual(X)      (((X
d8f0: 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
d900: 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20  _Virtual)!=0).# 
d910: 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
d920: 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
d930: 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
d940: 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
d950: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
d960: 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
d970: 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
d980: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
d990: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
d9a0: 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
d9b0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
d9c0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
d9d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
d9e0: 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
d9f0: 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
da00: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
da10: 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
da20: 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
da30: 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
da40: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
da50: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
da60: 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
da70: 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
da80: 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
da90: 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
daa0: 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
dab0: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
dac0: 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
dad0: 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
dae0: 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
daf0: 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
db00: 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
db10: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
db20: 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
db30: 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
db40: 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
db50: 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
db60: 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
db70: 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
db80: 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
db90: 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
dba0: 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a 2a 2a 20  is "ex2"..**.** 
dbb0: 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
dbc0: 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
dbd0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
dbe0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
dbf0: 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
dc00: 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
dc10: 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
dc20: 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
dc30: 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
dc40: 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
dc50: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
dc60: 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
dc70: 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
dc80: 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
dc90: 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
dca0: 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
dcb0: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
dcc0: 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
dcd0: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
dce0: 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
dcf0: 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
dd00: 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69 67    /* Next foreig
dd10: 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f 6d 20 2a  n key in pFrom *
dd20: 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
dd30: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
dd40: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
dd50: 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
dd60: 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
dd70: 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
dd80: 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72 65 69     /* Next forei
dd90: 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20  gn key on table 
dda0: 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 46  named zTo */.  F
ddb0: 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20  Key *pPrevTo;   
ddc0: 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 66 6f 72   /* Previous for
ddd0: 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62 6c  eign key on tabl
dde0: 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20  e named zTo */. 
ddf0: 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
de00: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
de10: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
de20: 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
de30: 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
de40: 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
de50: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
de60: 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
de70: 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
de80: 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
de90: 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
dea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44           /* ON D
deb0: 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
dec0: 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
ded0: 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
dee0: 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
def0: 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69 67 67 65  r[2];  /* Trigge
df00: 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
df10: 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
df20: 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
df30: 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
df40: 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
df50: 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
df60: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
df70: 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  m;         /* In
df80: 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
df90: 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
dfa0: 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
dfb0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
dfc0: 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 30  mn in zTo.  If 0
dfd0: 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
dfe0: 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
dff0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
e000: 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
e010: 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20 73 20 2a   nCol column s *
e020: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
e030: 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
e040: 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
e050: 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
e060: 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
e070: 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
e080: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
e090: 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
e0a0: 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
e0b0: 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
e0c0: 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
e0d0: 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
e0e0: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
e0f0: 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
e100: 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
e110: 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
e120: 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
e130: 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
e140: 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
e150: 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
e160: 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
e170: 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
e180: 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
e190: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
e1a0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
e1b0: 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
e1c0: 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
e1d0: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
e1e0: 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
e1f0: 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
e200: 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
e210: 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
e220: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
e230: 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
e240: 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
e250: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
e260: 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
e270: 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
e280: 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
e290: 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
e2a0: 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
e2b0: 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
e2c0: 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
e2d0: 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
e2e0: 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
e2f0: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
e300: 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
e310: 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
e320: 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
e330: 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
e340: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
e350: 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
e360: 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
e370: 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
e380: 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
e390: 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
e3a0: 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
e3b0: 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
e3c0: 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
e3d0: 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
e3e0: 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
e3f0: 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
e400: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
e410: 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
e420: 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
e430: 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
e440: 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
e450: 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
e460: 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
e470: 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
e480: 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
e490: 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
e4a0: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
e4b0: 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
e4c0: 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
e4d0: 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
e4e0: 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
e4f0: 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
e500: 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
e510: 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
e520: 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
e530: 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  .** .** The foll
e540: 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
e550: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
e560: 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
e570: 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
e580: 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
e590: 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
e5a0: 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
e5b0: 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
e5c0: 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
e5d0: 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
e5e0: 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
e5f0: 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
e600: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
e610: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
e620: 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
e630: 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
e640: 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
e650: 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
e660: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
e670: 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
e680: 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
e690: 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
e6a0: 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
e6b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
e6c0: 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
e6d0: 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
e6e0: 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
e6f0: 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
e700: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
e710: 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
e720: 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
e730: 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
e740: 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
e750: 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
e760: 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
e770: 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
e780: 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
e790: 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
e7a0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
e7b0: 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
e7c0: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
e7d0: 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
e7e0: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
e7f0: 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
e800: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
e810: 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
e820: 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
e830: 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
e840: 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
e850: 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
e860: 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
e870: 39 39 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  99  /* Do whatev
e880: 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
e890: 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
e8a0: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
e8b0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e8c0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
e8d0: 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
e8e0: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
e8f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
e900: 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
e910: 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
e920: 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  e .** comparison
e930: 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65   of the two inde
e940: 78 20 6b 65 79 73 2e 0a 2a 2f 0a 73 74 72 75 63  x keys..*/.struc
e950: 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 73 71  t KeyInfo {.  sq
e960: 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
e970: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
e980: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
e990: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
e9a0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
e9b0: 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
e9c0: 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
e9d0: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
e9e0: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
e9f0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
ea00: 72 69 65 73 20 69 6e 20 61 43 6f 6c 6c 5b 5d 20  ries in aColl[] 
ea10: 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
ea20: 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
ea30: 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
ea40: 63 6f 6c 75 6d 6e 2e 20 20 4d 61 79 20 62 65 20  column.  May be 
ea50: 4e 55 4c 4c 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  NULL */.  CollSe
ea60: 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
ea70: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
ea80: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
ea90: 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
eaa0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
eab0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
eac0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
ead0: 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
eae0: 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69  on about a.** si
eaf0: 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72  ngle index recor
eb00: 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
eb10: 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f  dy been parsed o
eb20: 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75  ut into individu
eb30: 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  al.** values..**
eb40: 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20  .** A record is 
eb50: 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63  an object that c
eb60: 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
eb70: 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61  ore fields of da
eb80: 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61  ta..** Records a
eb90: 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  re used to store
eba0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
ebb0: 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
ebc0: 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  to store.** the 
ebd0: 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e  key of an index.
ebe0: 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e    A blob encodin
ebf0: 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73  g of a record is
ec00: 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74   created by.** t
ec10: 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
ec20: 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56   opcode of the V
ec30: 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73  DBE and is disas
ec40: 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a  sembled by the.*
ec50: 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  * OP_Column opco
ec60: 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73  de..**.** This s
ec70: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61  tructure holds a
ec80: 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73   record that has
ec90: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69   already been di
eca0: 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e  sassembled.** in
ecb0: 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65  to its constitue
ecc0: 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a 73 74  nt fields..*/.st
ecd0: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
ece0: 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
ecf0: 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
ed00: 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
ed10: 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
ed20: 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ion */.  u16 nFi
ed30: 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
ed40: 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
ed50: 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
ed60: 20 20 75 38 20 66 6c 61 67 73 3b 20 20 20 20 20    u8 flags;     
ed70: 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e        /* Boolean
ed80: 20 73 65 74 74 69 6e 67 73 2e 20 20 55 4e 50 41   settings.  UNPA
ed90: 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77 20 2a  CKED_... below *
eda0: 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
edb0: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
edc0: 62 79 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  by UNPACKED_PREF
edd0: 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a 20 20 4d  IX_SEARCH */.  M
ede0: 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
edf0: 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
ee00: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
ee10: 64 20 76 61 6c 75 65 73 20 6f 66 20 55 6e 70 61  d values of Unpa
ee20: 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c 61 67 73  ckedRecord.flags
ee30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41  .*/.#define UNPA
ee40: 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 20 20 20  CKED_INCRKEY    
ee50: 20 20 20 30 78 30 31 20 20 2f 2a 20 4d 61 6b 65     0x01  /* Make
ee60: 20 74 68 69 73 20 6b 65 79 20 61 6e 20 65 70 73   this key an eps
ee70: 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a 2f 0a 23  ilon larger */.#
ee80: 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f  define UNPACKED_
ee90: 50 52 45 46 49 58 5f 4d 41 54 43 48 20 20 30 78  PREFIX_MATCH  0x
eea0: 30 32 20 20 2f 2a 20 41 20 70 72 65 66 69 78 20  02  /* A prefix 
eeb0: 6d 61 74 63 68 20 69 73 20 63 6f 6e 73 69 64 65  match is conside
eec0: 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65 66 69 6e  red OK */.#defin
eed0: 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  e UNPACKED_PREFI
eee0: 58 5f 53 45 41 52 43 48 20 30 78 30 34 20 20 2f  X_SEARCH 0x04  /
eef0: 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61 6c 20 28  * Ignore final (
ef00: 72 6f 77 69 64 29 20 66 69 65 6c 64 20 2a 2f 0a  rowid) field */.
ef10: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
ef20: 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
ef30: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
ef40: 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
ef50: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
ef60: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
ef70: 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
ef80: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
ef90: 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
efa0: 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
efb0: 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
efc0: 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
efd0: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
efe0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
eff0: 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
f000: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
f010: 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
f020: 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
f030: 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
f040: 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
f050: 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
f060: 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
f070: 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
f080: 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
f090: 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
f0a0: 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
f0b0: 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
f0c0: 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
f0d0: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
f0e0: 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
f0f0: 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
f100: 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
f110: 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
f120: 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
f130: 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
f140: 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
f150: 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
f160: 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
f170: 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
f180: 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
f190: 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
f1a0: 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
f1b0: 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
f1c0: 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
f1d0: 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
f1e0: 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
f1f0: 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
f200: 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
f210: 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
f220: 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
f230: 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
f240: 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
f250: 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
f260: 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
f270: 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
f280: 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
f290: 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
f2a0: 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
f2b0: 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
f2c0: 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
f2d0: 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
f2e0: 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
f2f0: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
f300: 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
f310: 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
f320: 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
f330: 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
f340: 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
f350: 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
f360: 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
f370: 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
f380: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
f390: 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
f3a0: 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
f3b0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
f3c0: 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
f3d0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
f3e0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
f3f0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  ndex */.  int *a
f400: 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
f410: 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
f420: 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
f430: 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
f440: 20 69 73 20 30 20 2a 2f 0a 20 20 74 52 6f 77 63   is 0 */.  tRowc
f450: 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
f460: 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
f470: 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
f480: 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
f490: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
f4a0: 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
f4b0: 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
f4c0: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
f4d0: 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
f4e0: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
f4f0: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
f500: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
f510: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
f520: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
f530: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
f540: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
f550: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
f560: 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
f570: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
f580: 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
f590: 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
f5a0: 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
f5b0: 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
f5c0: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
f5d0: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
f5e0: 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
f5f0: 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72  e==ASC */.  char
f600: 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20   **azColl;      
f610: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
f620: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
f630: 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
f640: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  dex */.  int tnu
f650: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
f660: 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e    /* DB Page con
f670: 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20  taining root of 
f680: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
f690: 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
f6a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f6b0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
f6c0: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 74   table used by t
f6d0: 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
f6e0: 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20  8 onError;      
f6f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62          /* OE_Ab
f700: 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ort, OE_Ignore, 
f710: 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f  OE_Replace, or O
f720: 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69  E_None */.  unsi
f730: 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78 3a 32  gned autoIndex:2
f740: 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55  ;    /* 1==UNIQU
f750: 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45  E, 2==PRIMARY KE
f760: 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44  Y, 0==CREATE IND
f770: 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  EX */.  unsigned
f780: 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20   bUnordered:1;  
f790: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64   /* Use this ind
f7a0: 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20  ex for == or IN 
f7b0: 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a  queries only */.
f7c0: 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e    unsigned uniqN
f7d0: 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72  otNull:1;  /* Tr
f7e0: 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64  ue if UNIQUE and
f7f0: 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c   NOT NULL for al
f800: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 69 66  l columns */.#if
f810: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
f820: 45 5f 53 54 41 54 33 0a 20 20 69 6e 74 20 6e 53  E_STAT3.  int nS
f830: 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
f840: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f850: 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
f860: 70 6c 65 5b 5d 20 2a 2f 0a 20 20 74 52 6f 77 63  ple[] */.  tRowc
f870: 6e 74 20 61 76 67 45 71 3b 20 20 20 20 20 20 20  nt avgEq;       
f880: 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
f890: 45 71 20 76 61 6c 75 65 20 66 6f 72 20 6b 65 79  Eq value for key
f8a0: 20 76 61 6c 75 65 73 20 6e 6f 74 20 69 6e 20 61   values not in a
f8b0: 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
f8c0: 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
f8d0: 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
f8e0: 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
f8f0: 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d   key */.#endif.}
f900: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  ;../*.** Each sa
f910: 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
f920: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
f930: 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
f940: 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a  nted in memory .
f950: 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
f960: 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
f970: 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
f980: 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
f990: 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
f9a0: 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
f9b0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
f9c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
f9d0: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
f9e0: 6c 65 20 7b 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  le {.  union {. 
f9f0: 20 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20     char *z;     
fa00: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fa10: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 54  Type is SQLITE_T
fa20: 45 58 54 20 6f 72 20 53 51 4c 49 54 45 5f 42 4c  EXT or SQLITE_BL
fa30: 4f 42 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65  OB */.    double
fa40: 20 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c   r;       /* Val
fa50: 75 65 20 69 66 20 65 54 79 70 65 20 69 73 20 53  ue if eType is S
fa60: 51 4c 49 54 45 5f 46 4c 4f 41 54 20 2a 2f 0a 20  QLITE_FLOAT */. 
fa70: 20 20 20 69 36 34 20 69 3b 20 20 20 20 20 20 20     i64 i;       
fa80: 20 20 20 2f 2a 20 56 61 6c 75 65 20 69 66 20 65     /* Value if e
fa90: 54 79 70 65 20 69 73 20 53 51 4c 49 54 45 5f 49  Type is SQLITE_I
faa0: 4e 54 45 47 45 52 20 2a 2f 0a 20 20 7d 20 75 3b  NTEGER */.  } u;
fab0: 0a 20 20 75 38 20 65 54 79 70 65 3b 20 20 20 20  .  u8 eType;    
fac0: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
fad0: 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 49 4e 54 45  ULL, SQLITE_INTE
fae0: 47 45 52 20 2e 2e 2e 20 65 74 63 2e 20 2a 2f 0a  GER ... etc. */.
faf0: 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
fb00: 20 20 20 20 2f 2a 20 53 69 7a 65 20 69 6e 20 62      /* Size in b
fb10: 79 74 65 20 6f 66 20 74 65 78 74 20 6f 72 20 62  yte of text or b
fb20: 6c 6f 62 2e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  lob. */.  tRowcn
fb30: 74 20 6e 45 71 3b 20 20 20 20 20 20 2f 2a 20 45  t nEq;      /* E
fb40: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
fb50: 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
fb60: 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
fb70: 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
fb80: 20 6e 4c 74 3b 20 20 20 20 20 20 2f 2a 20 45 73   nLt;      /* Es
fb90: 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
fba0: 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
fbb0: 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
fbc0: 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
fbd0: 74 20 6e 44 4c 74 3b 20 20 20 20 20 2f 2a 20 45  t nDLt;     /* E
fbe0: 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
fbf0: 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
fc00: 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
fc10: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  e */.};../*.** E
fc20: 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
fc30: 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
fc40: 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
fc50: 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
fc60: 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
fc70: 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
fc80: 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
fc90: 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
fca0: 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
fcb0: 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
fcc0: 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
fcd0: 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
fce0: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
fcf0: 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
fd00: 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
fd10: 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f  mptions about To
fd20: 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54  ken.dyn.** and T
fd30: 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65  oken.n when Toke
fd40: 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63  n.z==0..*/.struc
fd50: 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
fd60: 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
fd70: 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
fd80: 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
fd90: 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
fda0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
fdb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
fdc0: 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
fdd0: 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
fde0: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
fdf0: 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
fe00: 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
fe10: 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
fe20: 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
fe30: 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
fe40: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
fe50: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
fe60: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
fe70: 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
fe80: 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
fe90: 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
fea0: 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
feb0: 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
fec0: 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
fed0: 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
fee0: 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
fef0: 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
ff00: 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
ff10: 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
ff20: 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
ff30: 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
ff40: 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
ff50: 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
ff60: 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
ff70: 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
ff80: 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
ff90: 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
ffa0: 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
ffb0: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
ffc0: 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
ffd0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
ffe0: 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
fff0: 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
10000 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
10010 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
10020 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
10030 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
10040 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
10050 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
10060 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
10070 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
10080 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
10090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
100a0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
100b0 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
100c0 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
100d0 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
100e0 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
100f0 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
10100 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
10110 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
10120 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
10130 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
10140 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
10150 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
10160 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
10170 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
10180 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
10190 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
101a0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
101b0 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
101c0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
101d0 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
101e0 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
101f0 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
10200 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10210 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
10220 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
10230 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
10240 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
10250 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
10260 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
10270 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
10280 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
10290 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
102a0 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
102b0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
102c0 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
102d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
102e0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
102f0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
10300 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
10310 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10320 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
10330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
10340 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
10350 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
10360 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
10370 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
10380 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
10390 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
103a0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
103b0 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
103c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
103d0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
103e0 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
103f0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
10400 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
10410 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
10420 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
10430 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
10440 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
10450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10460 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
10470 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
10480 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
10490 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
104a0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
104b0 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
104c0 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
104d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
104e0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
104f0 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
10500 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
10510 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10530 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
10540 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
10550 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
10560 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
10570 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
10580 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
10590 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
105a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
105b0 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
105c0 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
105d0 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
105e0 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
105f0 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
10600 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
10610 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
10620 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
10630 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
10640 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
10650 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
10660 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
10670 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
10680 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
10690 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
106a0 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
106b0 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
106c0 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
106d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
106e0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
106f0 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
10700 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
10710 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
10720 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
10730 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
10740 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
10750 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
10760 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
10770 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
10780 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
10790 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
107a0 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
107b0 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
107c0 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
107d0 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
107e0 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
107f0 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
10800 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
10810 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
10820 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
10830 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
10840 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
10850 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
10860 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
10870 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
10880 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
10890 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
108a0 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
108b0 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
108c0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
108d0 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
108e0 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
108f0 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
10900 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
10910 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
10920 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
10930 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
10940 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
10950 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
10960 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
10970 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
10980 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
10990 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
109a0 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
109b0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
109c0 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
109d0 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
109e0 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
109f0 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
10a00 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
10a10 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
10a20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
10a30 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
10a40 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
10a50 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
10a60 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
10a70 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
10a80 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
10a90 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
10aa0 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
10ab0 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
10ac0 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
10ad0 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
10ae0 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
10af0 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
10b00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
10b10 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
10b20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
10b30 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
10b40 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20  T, TK_BLOB, .** 
10b50 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
10b60 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
10b70 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
10b80 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
10b90 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
10ba0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
10bb0 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
10bc0 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
10bd0 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10be0 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65  the .** variable
10bf0 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
10c00 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10c10 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10c20 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
10c30 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
10c40 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
10c50 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
10c60 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
10c70 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
10c80 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
10c90 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
10ca0 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
10cb0 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
10cc0 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
10cd0 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
10ce0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
10cf0 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
10d00 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
10d10 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
10d20 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
10d30 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
10d40 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
10d50 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
10d60 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
10d70 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
10d80 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
10d90 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
10da0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10db0 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
10dc0 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
10dd0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
10de0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
10df0 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
10e00 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
10e10 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
10e20 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
10e30 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
10e40 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
10e50 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
10e60 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a  r.x.pList is .**
10e70 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
10e80 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
10e90 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
10ea0 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
10eb0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
10ec0 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
10ed0 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
10ee0 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
10ef0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
10f00 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
10f10 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
10f20 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
10f30 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
10f40 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
10f50 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
10f60 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
10f70 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
10f80 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
10f90 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
10fa0 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
10fb0 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
10fc0 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
10fd0 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
10fe0 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
10ff0 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
11000 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
11010 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
11020 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
11030 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
11040 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
11050 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
11060 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
11070 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
11080 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
11090 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
110a0 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63   mark .** charac
110b0 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
110c0 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
110d0 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
110e0 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
110f0 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  x .** number for
11100 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
11110 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
11120 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
11130 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
11140 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
11150 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
11160 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
11170 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
11180 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
11190 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
111a0 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
111b0 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
111c0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
111d0 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
111e0 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
111f0 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
11200 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
11210 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
11220 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
11230 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
11240 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
11250 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
11260 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
11270 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
11280 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
11290 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
112a0 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
112b0 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
112c0 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
112d0 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
112e0 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
112f0 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
11300 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
11310 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
11320 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
11330 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
11340 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
11350 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
11360 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
11370 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
11380 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
11390 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
113a0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
113b0 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
113c0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
113d0 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
113e0 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
113f0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
11400 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
11410 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
11420 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
11430 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
11440 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
11450 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
11460 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
11470 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
11480 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
11490 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
114a0 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
114b0 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
114c0 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
114d0 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
114e0 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
114f0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
11500 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
11510 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
11520 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
11530 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
11540 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
11550 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
11560 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
11570 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
11580 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
11590 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
115a0 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
115b0 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
115c0 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
115d0 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
115e0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
115f0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
11600 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
11610 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
11620 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
11630 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
11640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
11650 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
11660 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
11670 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
11680 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
11690 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
116a0 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
116b0 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
116c0 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
116d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
116e0 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
116f0 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
11700 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
11710 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
11720 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
11730 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
11740 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
11750 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
11760 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
11770 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
11780 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
11790 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
117a0 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
117b0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
117c0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
117d0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
117e0 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
117f0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
11800 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
11810 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
11820 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
11830 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
11840 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
11850 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
11860 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20  malfunction. .  
11870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
118b0 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a  *****/..  Expr *
118c0 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20  pLeft;          
118d0 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65   /* Left subnode
118e0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67   */.  Expr *pRig
118f0 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ht;          /* 
11900 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f  Right subnode */
11910 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
11920 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
11930 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20      /* Function 
11940 61 72 67 75 6d 65 6e 74 73 20 6f 72 20 69 6e 20  arguments or in 
11950 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 65 78 70  "<expr> IN (<exp
11960 72 2d 6c 69 73 74 29 22 20 2a 2f 0a 20 20 20 20  r-list)" */.    
11970 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
11980 20 20 20 20 20 2f 2a 20 55 73 65 64 20 66 6f 72       /* Used for
11990 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e 64   sub-selects and
119a0 20 22 3c 65 78 70 72 3e 20 49 4e 20 28 3c 73 65   "<expr> IN (<se
119b0 6c 65 63 74 3e 29 22 20 2a 2f 0a 20 20 7d 20 78  lect>)" */.  } x
119c0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
119d0 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69  P_Reduced flag i
119e0 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70  s set in the Exp
119f0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
11a00 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65  en no.  ** space
11a10 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f   is allocated fo
11a20 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c  r the fields bel
11a30 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41  ow this point. A
11a40 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a  n attempt to.  *
11a50 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69  * access them wi
11a60 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ll result in a s
11a70 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75  egfault or malfu
11a80 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  nction..  ******
11a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11ac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
11ad0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
11ae0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
11af0 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
11b00 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74         /* Height
11b10 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61   of the tree hea
11b20 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  ded by this node
11b30 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
11b40 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
11b50 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
11b60 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  : cursor number 
11b70 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67  of table holding
11b80 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20   column.        
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   ** TK_REGISTER:
11bb0 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
11bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11bd0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
11be0 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65  TRIGGER: 1 -> ne
11bf0 77 2c 20 30 20 2d 3e 20 6f 6c 64 20 2a 2f 0a 20  w, 0 -> old */. 
11c00 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20   ynVar iColumn; 
11c10 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
11c20 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64  LUMN: column ind
11c30 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69  ex.  -1 for rowi
11c40 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
11c50 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
11c60 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69  K_VARIABLE: vari
11c70 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77  able number (alw
11c80 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20  ays >= 1). */.  
11c90 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
11ca0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
11cb0 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
11cc0 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
11cd0 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
11ce0 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
11cf0 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
11d00 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
11d10 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
11d20 6e 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 32  n */.  u8 flags2
11d30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11d40 20 53 65 63 6f 6e 64 20 73 65 74 20 6f 66 20 66   Second set of f
11d50 6c 61 67 73 2e 20 20 45 50 32 5f 2e 2e 2e 20 2a  lags.  EP2_... *
11d60 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
11d70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
11d80 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
11d90 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
11da0 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
11dc0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
11dd0 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
11de0 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e00 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
11e10 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
11e20 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
11e30 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
11e40 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
11e50 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
11e60 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
11e70 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
11e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
11e90 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
11ea0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f   expressions. */
11eb0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
11ec0 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
11ed0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
11ee0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
11ef0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
11f00 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
11f10 6e 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f  n   0x0001  /* O
11f20 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20  riginated in ON 
11f30 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  or USING clause 
11f40 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  of a join */.#de
11f50 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
11f60 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 43 6f     0x0002  /* Co
11f70 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
11f80 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
11f90 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
11fa0 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 20  e EP_Resolved   
11fb0 30 78 30 30 30 34 20 20 2f 2a 20 49 44 73 20 68  0x0004  /* IDs h
11fc0 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
11fd0 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
11fe0 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
11ff0 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a        0x0008  /*
12000 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
12010 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
12020 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
12030 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
12040 20 30 78 30 30 31 30 20 20 2f 2a 20 41 67 67 72   0x0010  /* Aggr
12050 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
12060 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
12070 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
12080 45 50 5f 56 61 72 53 65 6c 65 63 74 20 20 30 78  EP_VarSelect  0x
12090 30 30 32 30 20 20 2f 2a 20 70 53 65 6c 65 63 74  0020  /* pSelect
120a0 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
120b0 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
120c0 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
120d0 6f 74 65 64 20 20 30 78 30 30 34 30 20 20 2f 2a  oted  0x0040  /*
120e0 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
120f0 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
12100 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
12110 6e 66 69 78 46 75 6e 63 20 20 30 78 30 30 38 30  nfixFunc  0x0080
12120 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e    /* True for an
12130 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
12140 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
12150 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
12160 6f 6c 6c 61 74 65 20 20 20 20 30 78 30 31 30 30  ollate    0x0100
12170 20 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69    /* Tree contai
12180 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
12190 6f 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64 65 66  opeartor */.#def
121a0 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73 74  ine EP_FixedDest
121b0 20 20 30 78 30 32 30 30 20 20 2f 2a 20 52 65 73    0x0200  /* Res
121c0 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61 20  ult needed in a 
121d0 73 70 65 63 69 66 69 63 20 72 65 67 69 73 74 65  specific registe
121e0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
121f0 49 6e 74 56 61 6c 75 65 20 20 20 30 78 30 34 30  IntValue   0x040
12200 30 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  0  /* Integer va
12210 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
12220 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
12230 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
12240 74 20 20 30 78 30 38 30 30 20 20 2f 2a 20 78 2e  t  0x0800  /* x.
12250 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
12260 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
12270 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
12280 6e 65 20 45 50 5f 48 69 6e 74 20 20 20 20 20 20  ne EP_Hint      
12290 20 30 78 31 30 30 30 20 20 2f 2a 20 4e 6f 74 20   0x1000  /* Not 
122a0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
122b0 45 50 5f 52 65 64 75 63 65 64 20 20 20 20 30 78  EP_Reduced    0x
122c0 32 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74  2000  /* Expr st
122d0 72 75 63 74 20 69 73 20 45 58 50 52 5f 52 45 44  ruct is EXPR_RED
122e0 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
122f0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
12300 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 20 30 78 34  P_TokenOnly  0x4
12310 30 30 30 20 20 2f 2a 20 45 78 70 72 20 73 74 72  000  /* Expr str
12320 75 63 74 20 69 73 20 45 58 50 52 5f 54 4f 4b 45  uct is EXPR_TOKE
12330 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
12340 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
12350 45 50 5f 53 74 61 74 69 63 20 20 20 20 20 30 78  EP_Static     0x
12360 38 30 30 30 20 20 2f 2a 20 48 65 6c 64 20 69 6e  8000  /* Held in
12370 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
12380 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
12390 28 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  () */../*.** The
123a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
123b0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
123c0 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
123d0 66 6c 61 67 73 32 20 66 69 65 6c 64 2e 0a 2a 2f  flags2 field..*/
123e0 0a 23 64 65 66 69 6e 65 20 45 50 32 5f 4d 61 6c  .#define EP2_Mal
123f0 6c 6f 63 65 64 54 6f 6b 65 6e 20 20 30 78 30 30  locedToken  0x00
12400 30 31 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  01  /* Need to s
12410 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
12420 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
12430 65 66 69 6e 65 20 45 50 32 5f 49 72 72 65 64 75  efine EP2_Irredu
12440 63 69 62 6c 65 20 20 20 20 30 78 30 30 30 32 20  cible    0x0002 
12450 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
12460 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
12470 78 70 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  xpr */../*.** Th
12480 65 20 70 73 65 75 64 6f 2d 72 6f 75 74 69 6e 65  e pseudo-routine
12490 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 49   sqlite3ExprSetI
124a0 72 72 65 64 75 63 69 62 6c 65 20 73 65 74 73 20  rreducible sets 
124b0 74 68 65 20 45 50 32 5f 49 72 72 65 64 75 63 69  the EP2_Irreduci
124c0 62 6c 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 61  ble.** flag on a
124d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 73 74 72  n expression str
124e0 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 66 6c  ucture.  This fl
124f0 61 67 20 69 73 20 75 73 65 64 20 66 6f 72 20 56  ag is used for V
12500 56 26 41 20 6f 6e 6c 79 2e 20 20 54 68 65 0a 2a  V&A only.  The.*
12510 2a 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6d 70  * routine is imp
12520 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 6d 61  lemented as a ma
12530 63 72 6f 20 74 68 61 74 20 6f 6e 6c 79 20 77 6f  cro that only wo
12540 72 6b 73 20 77 68 65 6e 20 69 6e 20 64 65 62 75  rks when in debu
12550 67 67 69 6e 67 20 6d 6f 64 65 2c 0a 2a 2a 20 73  gging mode,.** s
12560 6f 20 61 73 20 6e 6f 74 20 74 6f 20 62 75 72 64  o as not to burd
12570 65 6e 20 70 72 6f 64 75 63 74 69 6f 6e 20 63 6f  en production co
12580 64 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  de..*/.#ifdef SQ
12590 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
125a0 69 6e 65 20 45 78 70 72 53 65 74 49 72 72 65 64  ine ExprSetIrred
125b0 75 63 69 62 6c 65 28 58 29 20 20 28 58 29 2d 3e  ucible(X)  (X)->
125c0 66 6c 61 67 73 32 20 7c 3d 20 45 50 32 5f 49 72  flags2 |= EP2_Ir
125d0 72 65 64 75 63 69 62 6c 65 0a 23 65 6c 73 65 0a  reducible.#else.
125e0 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
125f0 49 72 72 65 64 75 63 69 62 6c 65 28 58 29 0a 23  Irreducible(X).#
12600 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
12610 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
12620 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
12630 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
12640 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70  s in the .** Exp
12650 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
12660 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
12670 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
12680 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
12690 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
126a0 6e 65 20 45 78 70 72 48 61 73 41 6e 79 50 72 6f  ne ExprHasAnyPro
126b0 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45  perty(E,P)  (((E
126c0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
126d0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
126e0 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
126f0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
12700 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
12710 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
12720 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
12730 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ~(P)../*.** Macr
12740 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
12750 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
12760 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
12770 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a  a normal Expr .*
12780 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
12790 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
127a0 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
127b0 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
127c0 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  ags .** and an E
127d0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
127e0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
127f0 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
12800 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
12810 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
12820 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
12830 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
12840 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
12850 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
12860 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
12870 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
12880 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
12890 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
128a0 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
128b0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
128c0 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
128d0 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
128e0 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
128f0 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
12900 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
12910 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
12920 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61  er comment .** a
12930 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72  bove sqlite3Expr
12940 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c  Dup() for detail
12950 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  s..*/.#define EX
12960 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20  PRDUP_REDUCE    
12970 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
12980 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a  Used reduced-siz
12990 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a  e Expr nodes */.
129a0 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66  ./*.** A list of
129b0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45   expressions.  E
129c0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ach expression m
129d0 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61  ay optionally ha
129e0 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41  ve a.** name.  A
129f0 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62  n expr/name comb
12a00 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  ination can be u
12a10 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  sed in several w
12a20 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20  ays, such.** as 
12a30 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70  the list of "exp
12a40 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20  r AS ID" fields 
12a50 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c  following a "SEL
12a60 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a  ECT" or in the.*
12a70 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20  * list of "ID = 
12a80 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61  expr" items in a
12a90 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73  n UPDATE.  A lis
12aa0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
12ab0 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20   can.** also be 
12ac0 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
12ad0 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69  ment to a functi
12ae0 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  on, in which cas
12af0 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a  e the a.zName.**
12b00 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73   field is not us
12b10 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66  ed..**.** By def
12b20 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53  ault the Expr.zS
12b30 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20  pan field holds 
12b40 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65  a human-readable
12b50 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a   description of.
12b60 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
12b70 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69  n that is used i
12b80 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
12b90 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67   of error messag
12ba0 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e  es and.** column
12bb0 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69   labels.  In thi
12bc0 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70  s case, Expr.zSp
12bd0 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  an is typically 
12be0 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a  the text of a.**
12bf0 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69   column expressi
12c00 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20  on as it exists 
12c10 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
12c20 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c  ement.  However,
12c30 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e   if.** the bSpan
12c40 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65  IsTab flag is se
12c50 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73  t, then zSpan is
12c60 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d   overloaded to m
12c70 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20  ean the name.** 
12c80 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
12c90 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d  lumn in the form
12ca0 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45  : DATABASE.TABLE
12cb0 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c  .COLUMN.  This l
12cc0 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20  ater.** form is 
12cd0 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65  used for name re
12ce0 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65  solution with ne
12cf0 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  sted FROM clause
12d00 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  s..*/.struct Exp
12d10 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45  rList {.  int nE
12d20 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
12d30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78   /* Number of ex
12d40 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65  pressions on the
12d50 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69   list */.  int i
12d60 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20  ECursor;        
12d70 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72    /* VDBE Cursor
12d80 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12d90 20 74 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a   this ExprList *
12da0 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c  /.  struct ExprL
12db0 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f  ist_item { /* Fo
12dc0 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f  r each expressio
12dd0 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  n in the list */
12de0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
12df0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12e00 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
12e10 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63  essions */.    c
12e20 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
12e30 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
12e40 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12e50 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
12e60 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
12e70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
12e80 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
12e90 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
12ea0 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
12eb0 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
12ec0 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
12ed0 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
12ee0 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
12ef0 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
12f00 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
12f10 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
12f20 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
12f30 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
12f40 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
12f50 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
12f60 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
12f70 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
12f80 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  l;        /* For
12f90 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
12fa0 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
12fb0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31  lt set */.    u1
12fc0 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
12fd0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
12fe0 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
12ff0 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
13000 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20    } *a;         
13010 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
13020 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  c a power of two
13030 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61   greater or equa
13040 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b  l to nExpr */.};
13050 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
13060 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
13070 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
13080 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
13090 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
130a0 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
130b0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
130c0 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
130d0 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
130e0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
130f0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
13100 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
13110 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
13120 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
13130 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
13140 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
13150 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
13160 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
13170 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
13180 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
13190 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
131a0 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
131b0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
131c0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
131d0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
131e0 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
131f0 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
13200 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
13210 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
13220 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
13230 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
13240 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
13250 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
13260 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
13270 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
13280 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
13290 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
132a0 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
132b0 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
132c0 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
132d0 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
132e0 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
132f0 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
13300 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
13310 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
13320 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
13330 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
13340 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
13350 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
13360 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
13370 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
13380 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
13390 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
133a0 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
133b0 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
133c0 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
133d0 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
133e0 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
133f0 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
13400 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
13410 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
13420 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
13430 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
13440 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
13450 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
13460 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
13470 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
13480 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
13490 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
134a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
134b0 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
134c0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
134d0 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
134e0 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
134f0 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
13500 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
13510 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
13520 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
13530 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
13540 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
13550 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
13560 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
13570 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
13580 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
13590 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
135a0 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
135b0 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
135c0 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
135d0 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74  .typedef u64 Bit
135e0 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  mask;../*.** The
135f0 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
13600 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
13610 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
13620 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
13630 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
13640 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
13650 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
13660 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
13670 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
13680 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
13690 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  sk)1)<<(n))../*.
136a0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
136b0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
136c0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
136d0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
136e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
136f0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
13700 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
13710 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
13720 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
13730 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
13740 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
13750 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
13760 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
13770 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
13780 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
13790 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
137a0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
137b0 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
137c0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
137d0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
137e0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
137f0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
13800 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
13810 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
13820 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
13830 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
13840 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
13850 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
13860 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
13870 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
13880 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
13890 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
138a0 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
138b0 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
138c0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
138d0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
138e0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
138f0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
13900 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
13910 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
13920 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
13930 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
13940 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
13950 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
13960 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
13970 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
13980 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
13990 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
139a0 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
139b0 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
139c0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
139d0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
139e0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
139f0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
13a00 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
13a10 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
13a20 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
13a30 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
13a40 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
13a50 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
13a60 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
13a70 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
13a80 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
13a90 53 72 63 4c 69 73 74 20 7b 0a 20 20 75 38 20 6e  SrcList {.  u8 n
13aa0 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
13ab0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
13ac0 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
13ad0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
13ae0 20 2a 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63 3b   */.  u8 nAlloc;
13af0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13b00 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
13b10 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
13b20 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
13b30 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
13b40 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
13b50 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
13b60 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
13b70 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
13b80 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
13b90 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
13ba0 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
13bb0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
13bc0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
13bd0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
13be0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
13bf0 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
13c00 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
13c10 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
13c20 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
13c30 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
13c40 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
13c50 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
13c60 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
13c70 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
13c80 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
13c90 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
13ca0 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
13cb0 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
13cc0 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
13cd0 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
13ce0 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
13cf0 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
13d00 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
13d10 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
13d20 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
13d30 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
13d40 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
13d50 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
13d60 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
13d70 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
13d80 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
13d90 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
13da0 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ious */.    unsi
13db0 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
13dc0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
13dd0 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
13de0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
13df0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
13e00 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b  isCorrelated :1;
13e10 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62    /* True if sub
13e20 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c  -query is correl
13e30 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ated */.    unsi
13e40 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
13e50 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
13e60 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
13e70 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65 66  utine */.#ifndef
13e80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
13e90 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
13ea0 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
13eb0 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
13ec0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
13ed0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
13ee0 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
13ef0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
13f00 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13f10 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
13f20 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
13f30 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
13f40 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
13f50 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
13f60 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
13f70 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
13f80 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
13f90 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
13fa0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
13fb0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
13fc0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
13fd0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
13fe0 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  used */.    char
13ff0 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a   *zIndex;     /*
14000 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
14010 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
14020 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
14030 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  .    Index *pInd
14040 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20  ex;    /* Index 
14050 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
14060 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65  ponding to zInde
14070 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d  x, if any */.  }
14080 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20   a[1];          
14090 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20     /* One entry 
140a0 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66  for each identif
140b0 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ier on the list 
140c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72  */.};../*.** Per
140d0 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66  mitted values of
140e0 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a   the SrcList.a.j
140f0 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f  ointype field.*/
14100 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45  .#define JT_INNE
14110 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20  R     0x0001    
14120 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69  /* Any kind of i
14130 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f  nner or cross jo
14140 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
14150 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30  _CROSS     0x000
14160 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74  2    /* Explicit
14170 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53   use of the CROS
14180 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  S keyword */.#de
14190 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20  fine JT_NATURAL 
141a0 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54    0x0004    /* T
141b0 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72  rue for a "natur
141c0 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  al" join */.#def
141d0 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20  ine JT_LEFT     
141e0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65   0x0008    /* Le
141f0 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ft outer join */
14200 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48  .#define JT_RIGH
14210 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20  T     0x0010    
14220 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a  /* Right outer j
14230 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
14240 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30  T_OUTER     0x00
14250 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55  20    /* The "OU
14260 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20  TER" keyword is 
14270 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69  present */.#defi
14280 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20  ne JT_ERROR     
14290 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b  0x0040    /* unk
142a0 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72  nown or unsuppor
142b0 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f  ted join type */
142c0 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 65 61 63  .../*.** For eac
142d0 68 20 6e 65 73 74 65 64 20 6c 6f 6f 70 20 69 6e  h nested loop in
142e0 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
142f0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
14300 74 68 65 20 57 68 65 72 65 49 6e 66 6f 0a 2a 2a  the WhereInfo.**
14310 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
14320 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 73  ins a single ins
14330 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
14340 72 75 63 74 75 72 65 2e 20 20 54 68 69 73 20 73  ructure.  This s
14350 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 69  tructure.** is i
14360 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 70 72  ntended to be pr
14370 69 76 61 74 65 20 74 6f 20 74 68 65 20 77 68 65  ivate to the whe
14380 72 65 2e 63 20 6d 6f 64 75 6c 65 20 61 6e 64 20  re.c module and 
14390 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a  should not be.**
143a0 20 61 63 63 65 73 73 20 6f 72 20 6d 6f 64 69 66   access or modif
143b0 69 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64  ied by other mod
143c0 75 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ules..**.** The 
143d0 70 49 64 78 49 6e 66 6f 20 66 69 65 6c 64 20 69  pIdxInfo field i
143e0 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 70  s used to help p
143f0 69 63 6b 20 74 68 65 20 62 65 73 74 20 69 6e 64  ick the best ind
14400 65 78 20 6f 6e 20 61 0a 2a 2a 20 76 69 72 74 75  ex on a.** virtu
14410 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20 70  al table.  The p
14420 49 64 78 49 6e 66 6f 20 70 6f 69 6e 74 65 72 20  IdxInfo pointer 
14430 63 6f 6e 74 61 69 6e 73 20 69 6e 64 65 78 69 6e  contains indexin
14440 67 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  g.** information
14450 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 74 61   for the i-th ta
14460 62 6c 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ble in the FROM 
14470 63 6c 61 75 73 65 20 62 65 66 6f 72 65 20 72 65  clause before re
14480 6f 72 64 65 72 69 6e 67 2e 0a 2a 2a 20 41 6c 6c  ordering..** All
14490 20 74 68 65 20 70 49 64 78 49 6e 66 6f 20 70 6f   the pIdxInfo po
144a0 69 6e 74 65 72 73 20 61 72 65 20 66 72 65 65 64  inters are freed
144b0 20 62 79 20 77 68 65 72 65 49 6e 66 6f 46 72 65   by whereInfoFre
144c0 65 28 29 20 69 6e 20 77 68 65 72 65 2e 63 2e 0a  e() in where.c..
144d0 2a 2a 20 41 6c 6c 20 6f 74 68 65 72 20 69 6e 66  ** All other inf
144e0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20  ormation in the 
144f0 69 2d 74 68 20 57 68 65 72 65 4c 65 76 65 6c 20  i-th WhereLevel 
14500 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 69  object for the i
14510 2d 74 68 20 74 61 62 6c 65 0a 2a 2a 20 61 66 74  -th table.** aft
14520 65 72 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  er FROM clause o
14530 72 64 65 72 69 6e 67 2e 0a 2a 2f 0a 73 74 72 75  rdering..*/.stru
14540 63 74 20 57 68 65 72 65 4c 65 76 65 6c 20 7b 0a  ct WhereLevel {.
14550 20 20 69 6e 74 20 69 4c 65 66 74 4a 6f 69 6e 3b    int iLeftJoin;
14560 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
14570 79 20 63 65 6c 6c 20 75 73 65 64 20 74 6f 20 69  y cell used to i
14580 6d 70 6c 65 6d 65 6e 74 20 4c 45 46 54 20 4f 55  mplement LEFT OU
14590 54 45 52 20 4a 4f 49 4e 20 2a 2f 0a 20 20 69 6e  TER JOIN */.  in
145a0 74 20 69 54 61 62 43 75 72 3b 20 20 20 20 20 20  t iTabCur;      
145b0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
145c0 63 75 72 73 6f 72 20 75 73 65 64 20 74 6f 20 61  cursor used to a
145d0 63 63 65 73 73 20 74 68 65 20 74 61 62 6c 65 20  ccess the table 
145e0 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43 75 72  */.  int iIdxCur
145f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
14600 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 75 73  e VDBE cursor us
14610 65 64 20 74 6f 20 61 63 63 65 73 73 20 70 49 64  ed to access pId
14620 78 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 42  x */.  int addrB
14630 72 6b 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rk;          /* 
14640 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 62 72 65  Jump here to bre
14650 61 6b 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 6f  ak out of the lo
14660 6f 70 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  op */.  int addr
14670 4e 78 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Nxt;          /*
14680 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20 73 74   Jump here to st
14690 61 72 74 20 74 68 65 20 6e 65 78 74 20 49 4e 20  art the next IN 
146a0 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 2a 2f 0a 20  combination */. 
146b0 20 69 6e 74 20 61 64 64 72 43 6f 6e 74 3b 20 20   int addrCont;  
146c0 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
146d0 65 72 65 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20  ere to continue 
146e0 77 69 74 68 20 74 68 65 20 6e 65 78 74 20 6c 6f  with the next lo
146f0 6f 70 20 63 79 63 6c 65 20 2a 2f 0a 20 20 69 6e  op cycle */.  in
14700 74 20 61 64 64 72 46 69 72 73 74 3b 20 20 20 20  t addrFirst;    
14710 20 20 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 73      /* First ins
14720 74 72 75 63 74 69 6f 6e 20 6f 66 20 69 6e 74 65  truction of inte
14730 72 69 6f 72 20 6f 66 20 74 68 65 20 6c 6f 6f 70  rior of the loop
14740 20 2a 2f 0a 20 20 75 38 20 69 46 72 6f 6d 3b 20   */.  u8 iFrom; 
14750 20 20 20 20 20 20 2f 2a 20 46 49 58 4d 45 3a 20        /* FIXME: 
14760 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 74  Which entry in t
14770 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
14780 2f 0a 20 20 75 38 20 6f 70 2c 20 70 35 3b 20 20  /.  u8 op, p5;  
14790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
147a0 6f 64 65 20 61 6e 64 20 50 35 20 6f 66 20 74 68  ode and P5 of th
147b0 65 20 6f 70 63 6f 64 65 20 74 68 61 74 20 65 6e  e opcode that en
147c0 64 73 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 20  ds the loop */. 
147d0 20 69 6e 74 20 70 31 2c 20 70 32 3b 20 20 20 20   int p1, p2;    
147e0 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e         /* Operan
147f0 64 73 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ds of the opcode
14800 20 75 73 65 64 20 74 6f 20 65 6e 64 73 20 74 68   used to ends th
14810 65 20 6c 6f 6f 70 20 2a 2f 0a 20 20 75 6e 69 6f  e loop */.  unio
14820 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
14830 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
14840 20 74 68 61 74 20 64 65 70 65 6e 64 73 20 6f 6e   that depends on
14850 20 70 6c 61 6e 2e 77 73 46 6c 61 67 73 20 2a 2f   plan.wsFlags */
14860 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20  .    struct {.  
14870 20 20 20 20 69 6e 74 20 6e 49 6e 3b 20 20 20 20      int nIn;    
14880 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14890 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
148a0 6e 20 61 49 6e 4c 6f 6f 70 5b 5d 20 2a 2f 0a 20  n aInLoop[] */. 
148b0 20 20 20 20 20 73 74 72 75 63 74 20 49 6e 4c 6f       struct InLo
148c0 6f 70 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  op {.        int
148d0 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
148e0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
148f0 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
14900 68 69 73 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  his IN operator 
14910 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61  */.        int a
14920 64 64 72 49 6e 54 6f 70 3b 20 20 20 20 20 20 20  ddrInTop;       
14930 20 20 2f 2a 20 54 6f 70 20 6f 66 20 74 68 65 20    /* Top of the 
14940 49 4e 20 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 20  IN loop */.     
14950 20 20 20 75 38 20 65 45 6e 64 4c 6f 6f 70 4f 70     u8 eEndLoopOp
14960 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 4e 20  ;         /* IN 
14970 4c 6f 6f 70 20 74 65 72 6d 69 6e 61 74 6f 72 2e  Loop terminator.
14980 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50   OP_Next or OP_P
14990 72 65 76 20 2a 2f 0a 20 20 20 20 20 20 7d 20 2a  rev */.      } *
149a0 61 49 6e 4c 6f 6f 70 3b 20 20 20 20 20 20 20 20  aInLoop;        
149b0 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
149c0 6e 20 61 62 6f 75 74 20 65 61 63 68 20 6e 65 73  n about each nes
149d0 74 65 64 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  ted IN operator 
149e0 2a 2f 0a 20 20 20 20 7d 20 69 6e 3b 20 20 20 20  */.    } in;    
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14a00 55 73 65 64 20 77 68 65 6e 20 70 6c 61 6e 2e 77  Used when plan.w
14a10 73 46 6c 61 67 73 26 57 48 45 52 45 5f 49 4e 5f  sFlags&WHERE_IN_
14a20 41 42 4c 45 20 2a 2f 0a 20 20 20 20 49 6e 64 65  ABLE */.    Inde
14a30 78 20 2a 70 43 6f 76 69 64 78 3b 20 20 20 20 20  x *pCovidx;     
14a40 20 20 2f 2a 20 50 6f 73 73 69 62 6c 65 20 63 6f    /* Possible co
14a50 76 65 72 69 6e 67 20 69 6e 64 65 78 20 66 6f 72  vering index for
14a60 20 57 48 45 52 45 5f 4d 55 4c 54 49 5f 4f 52 20   WHERE_MULTI_OR 
14a70 2a 2f 0a 20 20 7d 20 75 3b 0a 20 20 73 74 72 75  */.  } u;.  stru
14a80 63 74 20 57 68 65 72 65 4c 6f 6f 70 20 2a 70 57  ct WhereLoop *pW
14a90 4c 6f 6f 70 3b 20 20 2f 2a 20 54 68 65 20 73 65  Loop;  /* The se
14aa0 6c 65 63 74 65 64 20 57 68 65 72 65 4c 6f 6f 70  lected WhereLoop
14ab0 20 6f 62 6a 65 63 74 20 2a 2f 0a 7d 3b 0a 0a 2f   object */.};../
14ac0 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
14ad0 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
14ae0 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
14af0 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
14b00 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
14b10 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
14b20 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
14b30 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
14b40 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
14b50 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
14b60 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
14b70 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
14b80 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
14b90 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
14ba0 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
14bb0 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
14bc0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
14bd0 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
14be0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
14bf0 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
14c00 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
14c10 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
14c20 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
14c30 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
14c40 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
14c50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14c60 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
14c70 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
14c80 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
14c90 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
14ca0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14cb0 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20  OMIT_OPEN_CLOSE 
14cc0 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
14cd0 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
14ce0 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
14cf0 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
14d00 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
14d10 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  20 /* Do not use
14d20 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
14d30 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
14d40 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
14d50 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f  ONLY    0x0040 /
14d60 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
14d70 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
14d80 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65  bList */.#define
14d90 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c 59 20   WHERE_AND_ONLY 
14da0 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f          0x0080 /
14db0 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e 64 69  * Don't use indi
14dc0 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72 6d 73  ces for OR terms
14dd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14de0 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
14df0 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72     0x0100 /* pOr
14e00 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
14e10 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 0a 2f  a GROUP BY */../
14e20 2a 0a 2a 2a 20 54 68 65 20 57 48 45 52 45 20 63  *.** The WHERE c
14e30 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
14e40 20 72 6f 75 74 69 6e 65 20 68 61 73 20 74 77 6f   routine has two
14e50 20 68 61 6c 76 65 73 2e 20 20 54 68 65 0a 2a 2a   halves.  The.**
14e60 20 66 69 72 73 74 20 70 61 72 74 20 64 6f 65 73   first part does
14e70 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
14e80 65 20 57 48 45 52 45 20 6c 6f 6f 70 20 61 6e 64  e WHERE loop and
14e90 20 74 68 65 20 73 65 63 6f 6e 64 0a 2a 2a 20 68   the second.** h
14ea0 61 6c 66 20 64 6f 65 73 20 74 68 65 20 74 61 69  alf does the tai
14eb0 6c 20 6f 66 20 74 68 65 20 57 48 45 52 45 20 6c  l of the WHERE l
14ec0 6f 6f 70 2e 20 20 41 6e 20 69 6e 73 74 61 6e 63  oop.  An instanc
14ed0 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
14ee0 75 63 74 75 72 65 20 69 73 20 72 65 74 75 72 6e  ucture is return
14ef0 65 64 20 62 79 20 74 68 65 20 66 69 72 73 74 20  ed by the first 
14f00 68 61 6c 66 20 61 6e 64 20 70 61 73 73 65 64 0a  half and passed.
14f10 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 65 63 6f  ** into the seco
14f20 6e 64 20 68 61 6c 66 20 74 6f 20 67 69 76 65 20  nd half to give 
14f30 73 6f 6d 65 20 63 6f 6e 74 69 6e 75 69 74 79 2e  some continuity.
14f40 0a 2a 2f 0a 73 74 72 75 63 74 20 57 68 65 72 65  .*/.struct Where
14f50 49 6e 66 6f 20 7b 0a 20 20 50 61 72 73 65 20 2a  Info {.  Parse *
14f60 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
14f70 20 20 20 2f 2a 20 50 61 72 73 69 6e 67 20 61 6e     /* Parsing an
14f80 64 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6e  d code generatin
14f90 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 53  g context */.  S
14fa0 72 63 4c 69 73 74 20 2a 70 54 61 62 4c 69 73 74  rcList *pTabList
14fb0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
14fc0 20 6f 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68   of tables in th
14fd0 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 45 78 70 72  e join */.  Expr
14fe0 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
14ff0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44        /* The ORD
15000 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 72 20  ER BY clause or 
15010 4e 55 4c 4c 20 2a 2f 0a 20 20 45 78 70 72 4c 69  NULL */.  ExprLi
15020 73 74 20 2a 70 44 69 73 74 69 6e 63 74 3b 20 20  st *pDistinct;  
15030 20 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20      /* DISTINCT 
15040 4f 4e 20 76 61 6c 75 65 73 2c 20 6f 72 20 4e 55  ON values, or NU
15050 4c 4c 20 2a 2f 0a 20 20 42 69 74 6d 61 73 6b 20  LL */.  Bitmask 
15060 72 65 76 4d 61 73 6b 3b 20 20 20 20 20 20 20 20  revMask;        
15070 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 4f 52 44    /* Mask of ORD
15080 45 52 20 42 59 20 74 65 72 6d 73 20 74 68 61 74  ER BY terms that
15090 20 6e 65 65 64 20 72 65 76 65 72 73 69 6e 67 20   need reversing 
150a0 2a 2f 0a 20 20 75 31 36 20 6e 4f 42 53 61 74 3b  */.  u16 nOBSat;
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
150c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 52 44 45  * Number of ORDE
150d0 52 20 42 59 20 74 65 72 6d 73 20 73 61 74 69 73  R BY terms satis
150e0 66 69 65 64 20 62 79 20 69 6e 64 69 63 65 73 20  fied by indices 
150f0 2a 2f 0a 20 20 75 31 36 20 77 63 74 72 6c 46 6c  */.  u16 wctrlFl
15100 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ags;           /
15110 2a 20 46 6c 61 67 73 20 6f 72 69 67 69 6e 61 6c  * Flags original
15120 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  ly passed to sql
15130 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
15140 20 2a 2f 0a 20 20 75 38 20 6f 6b 4f 6e 65 50 61   */.  u8 okOnePa
15150 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
15160 2f 2a 20 4f 6b 20 74 6f 20 75 73 65 20 6f 6e 65  /* Ok to use one
15170 2d 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d 20  -pass algorithm 
15180 66 6f 72 20 55 50 44 41 54 45 2f 44 45 4c 45 54  for UPDATE/DELET
15190 45 20 2a 2f 0a 20 20 75 38 20 75 6e 74 65 73 74  E */.  u8 untest
151a0 65 64 54 65 72 6d 73 3b 20 20 20 20 20 20 20 20  edTerms;        
151b0 20 2f 2a 20 4e 6f 74 20 61 6c 6c 20 57 48 45 52   /* Not all WHER
151c0 45 20 74 65 72 6d 73 20 72 65 73 6f 6c 76 65 64  E terms resolved
151d0 20 62 79 20 6f 75 74 65 72 20 6c 6f 6f 70 20 2a   by outer loop *
151e0 2f 0a 20 20 75 38 20 65 44 69 73 74 69 6e 63 74  /.  u8 eDistinct
151f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15200 20 4f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 52   One of the WHER
15210 45 5f 44 49 53 54 49 4e 43 54 5f 2a 20 76 61 6c  E_DISTINCT_* val
15220 75 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  ues below */.  i
15230 6e 74 20 69 54 6f 70 3b 20 20 20 20 20 20 20 20  nt iTop;        
15240 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15250 76 65 72 79 20 62 65 67 69 6e 6e 69 6e 67 20 6f  very beginning o
15260 66 20 74 68 65 20 57 48 45 52 45 20 6c 6f 6f 70  f the WHERE loop
15270 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6e 74 69   */.  int iConti
15280 6e 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nue;            
15290 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 74 6f 20  /* Jump here to 
152a0 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 6e 65  continue with ne
152b0 78 74 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  xt record */.  i
152c0 6e 74 20 69 42 72 65 61 6b 3b 20 20 20 20 20 20  nt iBreak;      
152d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
152e0 20 68 65 72 65 20 74 6f 20 62 72 65 61 6b 20 6f   here to break o
152f0 75 74 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  ut of the loop *
15300 2f 0a 20 20 69 6e 74 20 6e 4c 65 76 65 6c 3b 20  /.  int nLevel; 
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15320 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
15330 64 20 6c 6f 6f 70 20 2a 2f 0a 20 20 73 74 72 75  d loop */.  stru
15340 63 74 20 57 68 65 72 65 43 6c 61 75 73 65 20 2a  ct WhereClause *
15350 70 57 43 3b 20 20 2f 2a 20 44 65 63 6f 6d 70 6f  pWC;  /* Decompo
15360 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48  sition of the WH
15370 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
15380 73 74 72 75 63 74 20 57 68 65 72 65 4c 6f 6f 70  struct WhereLoop
15390 20 2a 70 4c 6f 6f 70 73 3b 20 2f 2a 20 4c 69 73   *pLoops; /* Lis
153a0 74 20 6f 66 20 61 6c 6c 20 57 68 65 72 65 4c 6f  t of all WhereLo
153b0 6f 70 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  op objects */.  
153c0 64 6f 75 62 6c 65 20 73 61 76 65 64 4e 51 75 65  double savedNQue
153d0 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a 20 70 50 61  ryLoop;   /* pPa
153e0 72 73 65 2d 3e 6e 51 75 65 72 79 4c 6f 6f 70 20  rse->nQueryLoop 
153f0 6f 75 74 73 69 64 65 20 74 68 65 20 57 48 45 52  outside the WHER
15400 45 20 6c 6f 6f 70 20 2a 2f 0a 20 20 64 6f 75 62  E loop */.  doub
15410 6c 65 20 6e 52 6f 77 4f 75 74 3b 20 20 20 20 20  le nRowOut;     
15420 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
15430 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74  ed number of out
15440 70 75 74 20 72 6f 77 73 20 2a 2f 0a 20 20 57 68  put rows */.  Wh
15450 65 72 65 4c 65 76 65 6c 20 61 5b 31 5d 3b 20 20  ereLevel a[1];  
15460 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
15470 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
15480 68 20 6e 65 73 74 20 6c 6f 6f 70 20 69 6e 20 57  h nest loop in W
15490 48 45 52 45 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  HERE */.};../* A
154a0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
154b0 72 20 57 68 65 72 65 49 6e 66 6f 2e 65 44 69 73  r WhereInfo.eDis
154c0 74 69 6e 63 74 20 61 6e 64 20 44 69 73 74 69 6e  tinct and Distin
154d0 63 74 43 74 78 2e 65 54 6e 63 74 54 79 70 65 20  ctCtx.eTnctType 
154e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
154f0 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
15500 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
15510 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
15520 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
15530 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
15540 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
15550 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
15560 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
15570 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
15580 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
15590 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
155a0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
155b0 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
155c0 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
155d0 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
155e0 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
155f0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
15600 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
15610 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
15620 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
15630 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
15640 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
15650 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
15660 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
15670 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
15680 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
15690 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
156a0 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
156b0 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
156c0 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
156d0 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
156e0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
156f0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
15700 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
15710 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
15720 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
15730 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
15740 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
15750 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
15760 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
15770 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
15780 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
15790 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
157a0 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
157b0 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
157c0 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
157d0 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
157e0 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
157f0 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  t .** context is
15800 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e   searched first.
15810 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73    If no match is
15820 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74   found, the next
15830 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78   outer.** contex
15840 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49  t is checked.  I
15850 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c  f there is still
15860 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e   no match, the n
15870 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69  ext context.** i
15880 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73  s checked.  This
15890 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75   process continu
158a0 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20  es until either 
158b0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
158c0 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65  .** or all conte
158d0 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20  xts are check.  
158e0 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20  When a match is 
158f0 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20  found, the nRef 
15900 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65  member of.** the
15910 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e   context contain
15920 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73  ing the match is
15930 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a   incremented. .*
15940 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65  *.** Each subque
15950 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61  ry gets a new Na
15960 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20  meContext.  The 
15970 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e  pNext field poin
15980 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d  ts to the.** Nam
15990 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20  eContext in the 
159a0 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54  parent query.  T
159b0 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73 20  hus the process 
159c0 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a  of scanning the.
159d0 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c  ** NameContext l
159e0 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
159f0 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68 72  to searching thr
15a00 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65 6c  ough successivel
15a10 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75  y outer.** subqu
15a20 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f  eries looking fo
15a30 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74  r a match..*/.st
15a40 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
15a50 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
15a60 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  se;       /* The
15a70 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63   parser */.  Src
15a80 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
15a90 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
15aa0 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20   tables used to 
15ab0 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f  resolve names */
15ac0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
15ad0 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f  ist;    /* Optio
15ae0 6e 61 6c 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  nal list of name
15af0 64 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  d expressions */
15b00 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
15b10 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72  Info;   /* Infor
15b20 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67  mation about agg
15b30 72 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20  regates at this 
15b40 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43  level */.  NameC
15b50 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20  ontext *pNext;  
15b60 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61  /* Next outer na
15b70 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c  me context.  NUL
15b80 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20  L for outermost 
15b90 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
15ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15bb0 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73  ber of names res
15bc0 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f  olved by this co
15bd0 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  ntext */.  int n
15be0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
15bf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
15c00 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ors encountered 
15c10 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20  while resolving 
15c20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63  names */.  u8 nc
15c30 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
15c40 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
15c50 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  NC_* flags defin
15c60 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  ed below */.};..
15c70 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
15c80 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d  lues for the Nam
15c90 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67  eContext, ncFlag
15ca0 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15cb0 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
15cc0 20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72   0x01    /* Aggr
15cd0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
15ce0 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
15cf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
15d00 61 73 41 67 67 20 20 20 20 30 78 30 32 20 20 20  asAgg    0x02   
15d10 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
15d20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15d30 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
15d40 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
15d50 20 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65   0x04    /* True
15d60 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
15d70 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
15d80 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
15d90 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
15da0 63 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75  c 0x08    /* Tru
15db0 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
15dc0 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
15dd0 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
15de0 6e 65 20 4e 43 5f 41 73 4d 61 79 62 65 20 20 20  ne NC_AsMaybe   
15df0 30 78 31 30 20 20 20 20 2f 2a 20 52 65 73 6f 6c  0x10    /* Resol
15e00 76 65 20 74 6f 20 41 53 20 74 65 72 6d 73 20 6f  ve to AS terms o
15e10 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
15e20 20 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20 20 20   only.          
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 2a 2a 20 69 66 20 6e 6f 20 6f 74 68 65     ** if no othe
15e50 72 20 72 65 73 6f 6c 75 74 69 6f 6e 20 69 73 20  r resolution is 
15e60 61 76 61 69 6c 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  available */../*
15e70 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
15e80 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
15e90 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
15ea0 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
15eb0 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
15ec0 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
15ed0 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
15ee0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
15ef0 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
15f00 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
15f10 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
15f20 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
15f30 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
15f40 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
15f50 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
15f60 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
15f70 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
15f80 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
15f90 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
15fa0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
15fb0 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
15fc0 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
15fd0 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
15fe0 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
15ff0 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
16000 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
16010 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
16020 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
16030 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
16040 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
16050 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
16060 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
16070 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
16080 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
16090 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
160a0 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
160b0 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
160c0 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
160d0 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
160e0 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
160f0 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
16100 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
16110 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
16120 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
16130 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
16140 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
16150 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
16160 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
16170 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
16180 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
16190 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
161a0 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
161b0 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
161c0 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
161d0 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
161e0 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
161f0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
16200 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
16210 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
16220 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
16230 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
16240 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
16250 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
16260 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
16270 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
16280 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
16290 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
162a0 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
162b0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
162c0 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
162d0 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
162e0 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
16310 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
16320 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
16330 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46  PT */.  u16 selF
16340 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
16350 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
16360 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
16370 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
16380 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
16390 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
163a0 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
163b0 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61  nters */.  int a
163c0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20  ddrOpenEphm[3]; 
163d0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
163e0 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
163f0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
16400 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 6e 53 65   */.  double nSe
16410 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20  lectRow;     /* 
16420 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
16430 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
16440 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
16450 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
16460 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
16470 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
16480 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
16490 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
164a0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
164b0 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
164c0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
164d0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
164e0 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
164f0 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
16500 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
16510 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
16520 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
16530 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
16540 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
16550 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
16560 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
16570 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
16580 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
16590 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
165a0 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
165b0 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
165c0 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63  pound */.  Selec
165d0 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20  t *pRightmost;  
165e0 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20    /* Right-most 
165f0 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
16600 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
16610 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20  ement */.  Expr 
16620 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
16630 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
16640 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
16650 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
16660 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20   Expr *pOffset; 
16670 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45          /* OFFSE
16680 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
16690 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
166a0 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d. */.};../*.** 
166b0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
166c0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
166d0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
166e0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
166f0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
16700 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ..*/.#define SF_
16710 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20  Distinct        
16720 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  0x0001  /* Outpu
16730 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
16740 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
16750 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
16760 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64     0x0002  /* Id
16770 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
16780 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
16790 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
167a0 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30  gate       0x000
167b0 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  4  /* Contains a
167c0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
167d0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
167e0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
167f0 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73   0x0008  /* Uses
16800 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
16810 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
16820 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
16830 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
16840 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
16850 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
16860 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
16870 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
16880 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a  o     0x0020  /*
16890 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
168a0 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
168b0 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
168c0 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20 20  SF_UseSorter    
168d0 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f     0x0040  /* So
168e0 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74 65  rt using a sorte
168f0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  r */.#define SF_
16900 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20  Values          
16910 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68  0x0080  /* Synth
16920 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
16930 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
16940 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61 6c  fine SF_Material
16950 69 7a 65 20 20 20 20 20 30 78 30 31 30 30 20 20  ize     0x0100  
16960 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69 61  /* Force materia
16970 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65 77  lization of view
16980 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
16990 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20  NestedFrom      
169a0 30 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20  0x0200  /* Part 
169b0 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
169c0 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
169d0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  /.../*.** The re
169e0 73 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63  sults of a selec
169f0 74 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  t can be distrib
16a00 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
16a10 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53  ways.  The.** "S
16a20 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73  RT" prefix means
16a30 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20   "SELECT Result 
16a40 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Type"..*/.#defin
16a50 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
16a60 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
16a70 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
16a80 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
16a90 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
16aa0 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
16ab0 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
16ac0 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
16ad0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
16ae0 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
16af0 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
16b00 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
16b10 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
16b20 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
16b30 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
16b40 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
16b50 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  here */../* The 
16b60 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
16b70 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
16b80 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
16b90 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
16ba0 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
16bb0 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
16bc0 44 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e  Discard)..#defin
16bd0 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
16be0 20 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20     5  /* Output 
16bf0 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
16c00 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
16c10 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36  T_Mem          6
16c20 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
16c30 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
16c40 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
16c50 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 20 37  T_Set          7
16c60 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
16c70 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
16c80 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
16c90 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
16ca0 20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72     8  /* Store r
16cb0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
16cc0 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
16cd0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
16ce0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
16cf0 20 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74    9  /* Create t
16d00 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
16d10 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
16d20 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
16d30 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
16d40 20 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   10  /* Generate
16d50 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
16d60 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a   result */../*.*
16d70 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
16d80 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
16d90 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
16da0 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
16db0 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
16dc0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
16dd0 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
16de0 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
16df0 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
16e00 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
16e10 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66   results.  On of
16e20 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f   SRT_* above. */
16e30 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b  .  char affSdst;
16e40 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
16e50 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
16e60 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69  ==SRT_Set */.  i
16e70 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
16e80 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20   /* A parameter 
16e90 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73  used by the eDes
16ea0 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f  t disposal metho
16eb0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74  d */.  int iSdst
16ec0 3b 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65  ;        /* Base
16ed0 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20   register where 
16ee0 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74  results are writ
16ef0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64  ten */.  int nSd
16f00 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  st;        /* Nu
16f10 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
16f20 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d  s allocated */.}
16f30 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
16f40 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
16f50 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
16f60 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
16f70 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
16f80 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65   .** tables, the
16f90 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
16fa0 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
16fb0 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
16fc0 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
16fd0 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
16fe0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
16ff0 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
17000 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
17010 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
17020 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
17030 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
17040 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
17050 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
17060 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
17070 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
17080 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69   down within tri
17090 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
170a0 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
170b0 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
170c0 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
170d0 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
170e0 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
170f0 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
17100 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
17110 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
17120 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
17130 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
17140 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
17150 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
17160 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
17170 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
17180 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
17190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
171a0 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
171b0 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
171c0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
171d0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
171e0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
171f0 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
17200 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
17210 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
17220 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
17230 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
17240 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
17250 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
17260 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
17270 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
17280 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
17290 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
172a0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
172b0 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
172c0 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
172d0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
172e0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
172f0 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
17300 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67  r each .** trigg
17310 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
17320 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
17330 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
17340 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
17350 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
17360 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
17370 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
17380 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
17390 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
173a0 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
173b0 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
173c0 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
173d0 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
173e0 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
173f0 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
17400 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
17410 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
17420 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
17430 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
17440 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
17450 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
17460 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
17470 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
17480 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
17490 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
174a0 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
174b0 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
174c0 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
174d0 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
174e0 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
174f0 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
17500 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
17510 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
17520 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
17530 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
17540 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
17550 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
17560 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
17570 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
17580 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
17590 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
175a0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
175b0 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61  f INSERT .** sta
175c0 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
175d0 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
175e0 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
175f0 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
17600 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
17610 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
17620 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
17630 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
17640 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
17650 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
17660 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
17670 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
17680 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
17690 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
176a0 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
176b0 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
176c0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
176d0 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
176e0 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
176f0 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
17700 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
17710 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
17720 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
17730 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
17740 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
17750 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
17760 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
17770 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
17780 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
17790 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
177a0 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
177b0 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
177c0 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
177d0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
177e0 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
177f0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
17800 30 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c 69  0.  typedef sqli
17810 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61  te3_uint64 yDbMa
17820 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  sk;.#else.  type
17830 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
17840 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66   yDbMask;.#endif
17850 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
17860 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
17870 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
17880 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
17890 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
178a0 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
178b0 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
178c0 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
178d0 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
178e0 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
178f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
17900 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
17910 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
17920 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
17930 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
17940 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
17950 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
17960 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
17970 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
17980 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
17990 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
179a0 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
179b0 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
179c0 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
179d0 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
179e0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
179f0 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
17a00 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
17a10 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
17a20 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
17a30 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
17a40 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
17a50 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a   shared-cache .*
17a60 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
17a70 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
17a80 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
17a90 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
17aa0 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
17ab0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
17ac0 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
17ad0 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
17ae0 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
17af0 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
17b00 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
17b10 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
17b20 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
17b30 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
17b40 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
17b50 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
17b60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
17b70 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
17b80 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
17b90 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
17ba0 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
17bb0 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
17bc0 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
17bd0 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
17be0 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
17bf0 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
17c00 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
17c10 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
17c20 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
17c30 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
17c40 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
17c50 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
17c60 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
17c70 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
17c80 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
17c90 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
17ca0 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
17cb0 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
17cc0 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
17cd0 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
17ce0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17cf0 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
17d00 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
17d10 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
17d20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
17d30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17d40 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
17d50 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
17d60 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65  eg[] */.  u8 nTe
17d70 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f  mpInUse;       /
17d80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d  * Number of aTem
17d90 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79  pReg[] currently
17da0 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a   checked out */.
17db0 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20    u8 nColCache; 
17dc0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17dd0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
17de0 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20  ColCache[] */.  
17df0 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20  u8 iColCache;   
17e00 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
17e10 72 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b  ry in aColCache[
17e20 5d 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a  ] to replace */.
17e30 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
17e40 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
17e50 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
17e60 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
17e70 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
17e80 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
17e90 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
17ea0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
17eb0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
17ec0 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  ception */.  int
17ed0 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
17ee0 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65    /* Holding are
17ef0 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  a for temporary 
17f00 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69  registers */.  i
17f10 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
17f20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
17f30 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
17f40 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
17f50 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
17f60 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
17f70 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
17f80 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
17f90 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
17fa0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
17fb0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
17fc0 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
17fd0 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
17fe0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
17ff0 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
18000 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
18010 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
18020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18030 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
18040 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
18050 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20  */.  int nSet;  
18060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18070 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64  ber of sets used
18080 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
18090 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20   nOnce;         
180a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f    /* Number of O
180b0 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69  P_Once instructi
180c0 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ons so far */.  
180d0 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20  int ckBase;     
180e0 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
180f0 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75  ister of data du
18100 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74  ring check const
18110 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
18120 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20  iCacheLevel;    
18130 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c   /* ColCache val
18140 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68  id when aColCach
18150 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63  e[].iLevel<=iCac
18160 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  heLevel */.  int
18170 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20   iCacheCnt;     
18180 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65    /* Counter use
18190 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43  d to generate aC
181a0 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61  olCache[].lru va
181b0 6c 75 65 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  lues */.  struct
181c0 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20   yColCache {.   
181d0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
181e0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
181f0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
18200 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
18210 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
18220 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  ble column numbe
18230 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70  r */.    u8 temp
18240 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Reg;           /
18250 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70  * iReg is a temp
18260 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e   register that n
18270 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64  eeds to be freed
18280 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76   */.    int iLev
18290 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  el;           /*
182a0 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a   Nesting level *
182b0 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20  /.    int iReg; 
182c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
182d0 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66  eg with value of
182e0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20   this column. 0 
182f0 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20  means none. */. 
18300 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20     int lru;     
18310 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73           /* Leas
18320 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20  t recently used 
18330 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d  entry has the sm
18340 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a  allest value */.
18350 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51    } aColCache[SQ
18360 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d  LITE_N_COLCACHE]
18370 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61  ;  /* One for ea
18380 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  ch column cache 
18390 65 6e 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d 61  entry */.  yDbMa
183a0 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
183b0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
183c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
183d0 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
183e0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
183f0 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
18400 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
18410 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
18420 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
18430 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41  eGoto;      /* A
18440 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74  ddress of OP_Got
18450 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69  o to cookie veri
18460 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20  fier subroutine 
18470 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56  */.  int cookieV
18480 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  alue[SQLITE_MAX_
18490 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a  ATTACHED+2];  /*
184a0 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69   Values of cooki
184b0 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a  es to verify */.
184c0 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
184d0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
184e0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
184f0 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
18500 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
18510 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
18520 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
18530 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
18540 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
18550 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
18560 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
18570 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
18580 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
18590 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
185a0 61 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f  am */.  Token co
185b0 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20  nstraintName;/* 
185c0 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  Name of the cons
185d0 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  traint currently
185e0 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f   being parsed */
185f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
18600 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
18610 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f  E.  int nTableLo
18620 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ck;        /* Nu
18630 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e  mber of locks in
18640 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20   aTableLock */. 
18650 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62   TableLock *aTab
18660 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69  leLock; /* Requi
18670 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20  red table locks 
18680 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  for shared-cache
18690 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   mode */.#endif.
186a0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
186b0 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d  Ainc;  /* Inform
186c0 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f  ation about AUTO
186d0 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65  INCREMENT counte
186e0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f  rs */..  /* Info
186f0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69  rmation used whi
18700 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65  le coding trigge
18710 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20  r programs. */. 
18720 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
18730 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
18740 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
18750 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
18760 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
18770 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
18780 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
18790 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
187a0 66 6f 72 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  for */.  double 
187b0 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 2f 2a  nQueryLoop;   /*
187c0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
187d0 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
187e0 6f 66 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20  of a query */.  
187f0 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
18800 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
18810 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
18820 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
18830 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
18840 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
18850 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
18860 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
18870 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
18880 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
18890 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
188a0 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
188b0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
188c0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
188d0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
188e0 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
188f0 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
18900 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
18910 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
18920 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41  ggers */..  /* A
18930 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74  bove is constant
18940 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69   between recursi
18950 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72  ons.  Below is r
18960 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20  eset before and 
18970 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20  after.  ** each 
18980 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20  recursion */..  
18990 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20  int nVar;       
189a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
189b0 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
189c0 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
189d0 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
189e0 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
189f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18a00 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c  mber of availabl
18a10 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72  e slots in azVar
18a20 5b 5d 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  [] */.  u8 expla
18a30 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
18a40 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
18a50 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
18a60 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
18a70 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
18a80 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
18a90 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
18aa0 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
18ab0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
18ac0 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
18ad0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
18ae0 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
18af0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18b00 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
18b10 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
18b20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
18b30 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
18b40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18b50 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
18b60 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
18b70 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18b90 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
18ba0 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
18bb0 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
18bc0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18bd0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
18be0 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
18bf0 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
18c00 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
18c10 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
18c20 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
18c30 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
18c40 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
18c50 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
18c60 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
18c70 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
18c80 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
18c90 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
18ca0 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
18cb0 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
18cc0 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
18cd0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
18ce0 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
18cf0 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
18d00 65 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  e()) */.  int *a
18d10 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20  Alias;          
18d20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
18d30 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c 69  used to hold ali
18d40 61 73 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a 20  ased result */. 
18d50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
18d60 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
18d70 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
18d80 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
18d90 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
18da0 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
18db0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
18dc0 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
18dd0 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
18de0 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
18df0 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
18e00 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
18e10 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
18e20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
18e30 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
18e40 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
18e50 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
18e60 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
18e70 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
18e80 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
18e90 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
18ea0 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
18eb0 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
18ec0 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
18ed0 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
18ee0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18ef0 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
18f00 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
18f10 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
18f20 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
18f30 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
18f40 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
18f50 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
18f60 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
18f70 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
18f80 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
18f90 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
18fa0 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
18fb0 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
18fc0 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
18fd0 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
18fe0 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
18ff0 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
19000 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
19010 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
19020 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
19030 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
19040 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
19050 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  };../*.** Return
19060 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
19070 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
19080 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
19090 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
190a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
190b0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
190c0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
190d0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
190e0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
190f0 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
19100 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
19110 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
19120 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
19130 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
19140 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
19150 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
19160 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
19170 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
19180 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
19190 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
191a0 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
191b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
191c0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
191d0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
191e0 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
191f0 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
19200 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
19210 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19230 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
19240 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
19250 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
19260 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
19270 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
19280 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ..*/.#define OPF
19290 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
192a0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74    0x01    /* Set
192b0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
192c0 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e  Change */.#defin
192d0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
192e0 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f  ID     0x02    /
192f0 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
19300 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
19310 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
19320 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
19330 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
19340 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
19350 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
19360 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
19370 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
19380 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
19390 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
193a0 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
193b0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
193c0 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
193d0 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
193e0 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
193f0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
19400 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
19410 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c     0x20    /* Cl
19420 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  ear pseudo-table
19430 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c   cache in OP_Col
19440 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  umn */.#define O
19450 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
19460 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
19470 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
19480 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
19490 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
194a0 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20  G_TYPEOFARG     
194b0 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x80    /* OP_Co
194c0 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
194d0 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23  or typeof() */.#
194e0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55  define OPFLAG_BU
194f0 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31  LKCSR       0x01
19500 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
19510 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75   used to open bu
19520 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65  lk cursor */.#de
19530 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
19540 52 45 47 20 20 20 20 20 20 20 30 78 30 32 20 20  REG       0x02  
19550 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
19560 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
19570 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
19580 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
19590 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
195a0 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
195b0 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
195c0 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  tion */../*. * E
195d0 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
195e0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
195f0 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
19600 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
19610 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
19620 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a   Trigger. . *. *
19630 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
19640 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
19650 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
19660 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
19670 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
19680 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
19690 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
196a0 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
196b0 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20  epresents the . 
196c0 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
196d0 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
196e0 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
196f0 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
19700 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
19710 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
19720 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
19730 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
19740 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
19750 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
19760 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
19770 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
19780 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
19790 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
197a0 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
197b0 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
197c0 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
197d0 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
197e0 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
197f0 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
19800 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
19810 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
19820 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
19830 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
19840 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
19850 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
19860 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
19870 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
19880 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
19890 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
198a0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
198b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
198c0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
198d0 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
198f0 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
19900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19910 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
19920 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
19930 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
19940 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
19950 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
19960 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
19970 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
19980 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
19990 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
199a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
199b0 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
199c0 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
199d0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
199e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
199f0 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
19a00 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
19a10 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
19a20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
19a30 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
19a40 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
19a50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
19a60 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a80 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19a90 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
19aa0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
19ab0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
19ac0 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
19ad0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
19ae0 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
19af0 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
19b00 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
19b10 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
19b20 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
19b30 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
19b40 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
19b50 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
19b60 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
19b70 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
19b80 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
19b90 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
19ba0 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
19bb0 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
19bc0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
19bd0 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
19be0 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
19bf0 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
19c00 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
19c10 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
19c20 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20  e which. .**.** 
19c30 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
19c40 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
19c50 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
19c60 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
19c70 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
19c80 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
19c90 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
19ca0 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
19cb0 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
19cc0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
19cd0 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
19ce0 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
19cf0 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
19d00 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
19d10 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
19d20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
19d30 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
19d40 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
19d50 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
19d60 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74  ram. . *. * Inst
19d70 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
19d80 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20  TriggerStep are 
19d90 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
19da0 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  ly linked list (
19db0 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20  linked. * using 
19dc0 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62  the "pNext" memb
19dd0 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62  er) referenced b
19de0 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74  y the "step_list
19df0 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
19e00 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
19e10 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
19e20 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
19e30 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
19e40 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
19e50 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
19e60 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
19e70 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a  -program.. * . *
19e80 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
19e90 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
19ea0 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
19eb0 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
19ec0 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
19ed0 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
19ee0 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
19ef0 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
19f00 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
19f10 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76  ned by the . * v
19f20 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
19f30 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
19f40 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
19f50 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
19f60 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
19f70 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
19f80 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
19f90 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
19fa0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
19fb0 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
19fc0 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
19fd0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
19fe0 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
19ff0 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
1a000 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
1a010 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72  ise NULL.. * tar
1a020 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
1a030 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
1a040 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1a050 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
1a060 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
1a070 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
1a080 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1a090 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
1a0a0 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1a0b0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1a0c0 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
1a0d0 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
1a0e0 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
1a0f0 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
1a100 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1a110 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1a120 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
1a130 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a  ) VALUES ... . *
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1a150 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
1a160 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
1a170 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
1a180 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1a190 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
1a1a0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1a1b0 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65  DELETE). * targe
1a1c0 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1a1d0 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1a1e0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1a1f0 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
1a200 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
1a210 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1a220 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
1a230 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
1a240 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1a250 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1a260 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1a270 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d  L.. * . * (op ==
1a280 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74   TK_UPDATE). * t
1a290 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1a2a0 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1a2b0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1a2c0 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
1a2d0 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70  te rows of.. * p
1a2e0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
1a2f0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
1a300 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
1a310 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
1a320 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
1a330 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
1a340 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
1a350 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
1a360 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
1a370 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
1a380 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
1a390 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
1a3a0 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
1a3b0 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
1a3c0 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
1a3d0 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
1a3e0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1a3f0 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20   argument.. * . 
1a400 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1a410 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a430 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1a440 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1a450 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
1a460 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
1a470 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
1a480 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
1a490 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
1a4a0 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
1a4b0 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
1a4c0 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
1a4d0 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
1a4e0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
1a4f0 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d   /* SELECT statm
1a500 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
1a510 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c  SERT INTO .. SEL
1a520 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b  ECT ... */.  Tok
1a530 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20  en target;      
1a540 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
1a550 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
1a560 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
1a570 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1a580 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1a590 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
1a5a0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
1a5b0 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
1a5c0 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
1a5d0 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
1a5e0 72 20 55 50 44 41 54 45 2e 20 20 56 41 4c 55 45  r UPDATE.  VALUE
1a5f0 53 20 63 6c 61 75 73 65 20 66 6f 72 20 49 4e 53  S clause for INS
1a600 45 52 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  ERT */.  IdList 
1a610 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a  *pIdList;     /*
1a620 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f   Column names fo
1a630 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72  r INSERT */.  Tr
1a640 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74  iggerStep *pNext
1a650 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68  ;  /* Next in th
1a660 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20  e link-list */. 
1a670 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c   TriggerStep *pL
1a680 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c  ast;  /* Last el
1a690 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69  ement in link-li
1a6a0 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73  st. Valid for 1s
1a6b0 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d  t elem only */.}
1a6c0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
1a6d0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1a6e0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
1a6f0 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
1a700 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a  e sqliteFix....*
1a710 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68  * routines as th
1a720 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73  ey walk the pars
1a730 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64  e tree to make d
1a740 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63  atabase referenc
1a750 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20  es.** explicit. 
1a760 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72   .*/.typedef str
1a770 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
1a780 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
1a790 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
1a7a0 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
1a7b0 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
1a7c0 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
1a7d0 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
1a7e0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1a7f0 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
1a800 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
1a810 63 68 65 6d 61 20 2a 2f 0a 20 20 63 6f 6e 73 74  chema */.  const
1a820 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
1a830 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
1a840 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
1a850 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
1a860 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
1a870 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
1a880 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
1a890 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
1a8a0 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
1a8b0 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
1a8c0 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
1a8d0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
1a8e0 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1a8f0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1a900 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
1a910 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
1a920 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
1a930 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
1a940 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
1a950 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
1a960 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
1a970 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
1a980 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
1a990 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a  ruct StrAccum {.
1a9a0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1a9b0 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
1a9c0 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
1a9d0 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
1a9e0 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
1a9f0 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
1aa00 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f    /* A base allo
1aa10 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f  cation.  Not fro
1aa20 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63  m malloc. */.  c
1aa30 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
1aa40 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
1aa50 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
1aa60 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68  ar */.  int  nCh
1aa70 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
1aa80 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
1aa90 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
1aaa0 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   int  nAlloc;   
1aab0 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
1aac0 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
1aad0 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
1aae0 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   int  mxAlloc;  
1aaf0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1ab00 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20   allowed string 
1ab10 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20  length */.  u8  
1ab20 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
1ab30 20 2f 2a 20 42 65 63 6f 6d 65 73 20 74 72 75 65   /* Becomes true
1ab40 20 69 66 20 61 6e 79 20 6d 65 6d 6f 72 79 20 61   if any memory a
1ab50 6c 6c 6f 63 61 74 69 6f 6e 20 66 61 69 6c 73 20  llocation fails 
1ab60 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c  */.  u8   useMal
1ab70 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20  loc;      /* 0: 
1ab80 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65  none,  1: sqlite
1ab90 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73  3DbMalloc,  2: s
1aba0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f  qlite3_malloc */
1abb0 0a 20 20 75 38 20 20 20 74 6f 6f 42 69 67 3b 20  .  u8   tooBig; 
1abc0 20 20 20 20 20 20 20 20 2f 2a 20 42 65 63 6f 6d          /* Becom
1abd0 65 73 20 74 72 75 65 20 69 66 20 73 74 72 69 6e  es true if strin
1abe0 67 20 73 69 7a 65 20 65 78 63 65 65 64 73 20 6c  g size exceeds l
1abf0 69 6d 69 74 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  imits */.};../*.
1ac00 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
1ac10 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
1ac20 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
1ac30 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
1ac40 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
1ac50 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
1ac60 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
1ac70 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
1ac80 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
1ac90 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
1aca0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1acb0 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
1acc0 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
1acd0 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
1ace0 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
1acf0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
1ad00 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
1ad10 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1ad20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20    /* 0 for main 
1ad30 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72  database.  1 for
1ad40 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41   TEMP, 2.. for A
1ad50 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74  TTACHed */.  int
1ad60 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1ad70 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
1ad80 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
1ad90 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
1ada0 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
1adb0 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
1adc0 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
1add0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
1ade0 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
1adf0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
1ae00 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
1ae10 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
1ae20 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
1ae30 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
1ae40 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1ae70 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
1ae80 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
1ae90 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1aea0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1aeb0 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
1aec0 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1aed0 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aef0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1af00 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
1af10 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
1af20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1af30 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1af40 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
1af50 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
1af60 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
1af90 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
1afa0 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
1afb0 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
1afe0 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1aff0 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
1b000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b010 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
1b020 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
1b030 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
1b040 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
1b050 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1b060 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
1b070 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
1b080 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
1b090 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
1b0a0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
1b0b0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1b0c0 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
1b0d0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1b0e0 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
1b0f0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
1b100 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
1b110 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
1b120 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
1b130 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
1b140 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
1b150 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
1b160 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b180 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
1b190 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
1b1a0 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b1c0 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
1b1d0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
1b1e0 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
1b1f0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
1b200 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
1b210 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
1b220 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
1b230 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
1b240 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
1b250 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
1b260 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
1b270 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
1b280 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1b290 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
1b2a0 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  ap */.  void *pS
1b2b0 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1b2c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72            /* Scr
1b2d0 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  atch memory */. 
1b2e0 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20   int szScratch; 
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1b310 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65  ch scratch buffe
1b320 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61  r */.  int nScra
1b330 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1b340 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b350 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75  er of scratch bu
1b360 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
1b370 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
1b380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b390 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
1b3a0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
1b3b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1b3c0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1b3d0 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
1b3e0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
1b3f0 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b410 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
1b420 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
1b430 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
1b440 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
1b450 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
1b460 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
1b470 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
1b480 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
1b490 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
1b4a0 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
1b4b0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
1b4c0 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68  abled */.  /* Th
1b4d0 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65  e above might be
1b4e0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
1b4f0 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66  non-zero.  The f
1b500 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f  ollowing need to
1b510 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69   always.  ** ini
1b520 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20  tially be zero, 
1b530 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e  however. */.  in
1b540 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20  t isInit;       
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b560 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e  /* True after in
1b570 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73  itialization has
1b580 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69   finished */.  i
1b590 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20  nt inProgress;  
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5b0 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69   /* True while i
1b5c0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
1b5d0 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69   progress */.  i
1b5e0 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20  nt isMutexInit; 
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b600 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1b610 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69  utexes are initi
1b620 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
1b630 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20  isMallocInit;   
1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b650 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
1b660 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
1b670 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61  d */.  int isPCa
1b680 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20  cheInit;        
1b690 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1b6a0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
1b6b0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1b6c0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1b6d0 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
1b6e0 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
1b6f0 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
1b700 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69  tialize() */.  i
1b710 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
1b720 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b730 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
1b740 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
1b750 78 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c  x */.  void (*xL
1b760 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  og)(void*,int,co
1b770 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46  nst char*); /* F
1b780 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67  unction for logg
1b790 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ing */.  void *p
1b7a0 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20  LogArg;         
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b7c0 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
1b7d0 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20 20 69  to xLog() */.  i
1b7e0 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
1b7f0 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
1b800 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
1b810 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
1b820 6c 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ls */.#ifdef SQL
1b830 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
1b840 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f  G.  void(*xSqllo
1b850 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  g)(void*,sqlite3
1b860 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
1b870 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71  nt);.  void *pSq
1b880 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a  llogArg;.#endif.
1b890 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  };../*.** Contex
1b8a0 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
1b8b0 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
1b8c0 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
1b8d0 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
1b8e0 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
1b8f0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
1b900 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
1b910 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
1b920 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
1b930 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
1b940 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
1b950 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
1b960 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1b970 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1b980 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b9a0 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
1b9b0 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65    */.  int walke
1b9c0 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
1b9f0 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38  bqueries */.  u8
1ba00 20 62 53 65 6c 65 63 74 44 65 70 74 68 46 69 72   bSelectDepthFir
1ba10 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
1ba20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 73 75          /* Do su
1ba30 62 71 75 65 72 69 65 73 20 66 69 72 73 74 20 2a  bqueries first *
1ba40 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ba70 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
1ba80 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
1ba90 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
1baa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bab0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
1bac0 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
1bad0 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20      int i;      
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bb00 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
1bb10 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
1bb20 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
1bb50 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
1bb60 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
1bb70 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
1bb80 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
1bb90 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
1bba0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
1bbb0 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
1bbc0 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
1bbd0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
1bbe0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
1bbf0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1bc00 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
1bc10 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1bc20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1bc30 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
1bc40 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1bc50 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
1bc60 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1bc70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1bc80 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
1bc90 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a  er*, Select*);..
1bca0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
1bcb0 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
1bcc0 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
1bcd0 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
1bce0 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
1bcf0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
1bd00 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
1bd10 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
1bd20 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
1bd30 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
1bd40 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
1bd50 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
1bd60 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
1bd70 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
1bd80 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
1bd90 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
1bda0 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
1bdb0 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
1bdc0 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
1bdd0 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1bde0 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
1bdf0 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
1be00 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
1be10 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
1be20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
1be30 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1be40 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
1be50 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
1be60 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
1be70 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1be80 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
1be90 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1beb0 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
1bec0 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
1bed0 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
1bee0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
1bef0 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
1bf30 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
1bf40 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
1bf50 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
1bf60 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
1bf70 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
1bf80 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
1bf90 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
1bfa0 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
1bfb0 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
1bfc0 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
1bfd0 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
1bfe0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
1bff0 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
1c000 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
1c010 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
1c020 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
1c030 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
1c040 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
1c050 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
1c060 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
1c070 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1c080 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1c090 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
1c0a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
1c0b0 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
1c0c0 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
1c0d0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
1c0e0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1c0f0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1c100 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
1c110 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
1c120 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
1c130 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1c140 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
1c150 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1c160 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1c170 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
1c180 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
1c190 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
1c1a0 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
1c1b0 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
1c1c0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
1c1d0 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
1c1e0 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
1c1f0 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  lso all.** the S
1c200 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c210 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
1c220 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f   as an alisse fo
1c230 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
1c240 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
1c250 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c260 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
1c270 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c280 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
1c290 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1c2a0 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS3.#endif../*.
1c2b0 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
1c2c0 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
1c2d0 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
1c2e0 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
1c2f0 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
1c300 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
1c310 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
1c320 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
1c330 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1c340 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
1c350 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
1c360 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c370 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
1c380 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
1c390 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
1c3a0 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
1c3b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1c3c0 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
1c3d0 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
1c3e0 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
1c3f0 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
1c400 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
1c410 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
1c420 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
1c430 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
1c440 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
1c450 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
1c460 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
1c470 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
1c480 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
1c490 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
1c4a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c4b0 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
1c4c0 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
1c4d0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1c4e0 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
1c4f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c500 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
1c510 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c520 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c530 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
1c540 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1c550 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c560 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c570 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
1c580 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c590 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
1c5a0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c5b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c5c0 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
1c5d0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1c5e0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1c5f0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1c600 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
1c610 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c620 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
1c630 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1c640 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c650 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
1c660 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
1c670 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
1c680 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
1c690 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65  ed char)(x)]).#e
1c6a0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1c6b0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1c6c0 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
1c6d0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1c6e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1c6f0 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
1c700 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
1c710 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1c720 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1c730 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
1c740 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1c750 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c760 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
1c770 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
1c780 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1c790 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1c7a0 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
1c7b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1c7c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c7d0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
1c7e0 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
1c7f0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1c800 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1c810 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
1c820 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1c830 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  x)).#endif../*.*
1c840 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
1c850 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
1c860 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
1c870 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33  3StrICmp sqlite3
1c880 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c  _stricmp.int sql
1c890 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
1c8a0 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
1c8b0 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
1c8c0 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
1c8d0 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
1c8e0 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
1c8f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1c900 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
1c910 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1c920 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  oc(int);.void *s
1c930 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
1c940 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1c950 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1c960 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1c970 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1c980 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
1c990 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
1c9a0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1c9b0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1c9c0 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
1c9d0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
1c9e0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1c9f0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  r*, int);.void *
1ca00 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
1ca10 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  oid*, int);.void
1ca20 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1ca30 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
1ca40 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1ca50 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1ca60 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
1ca70 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1ca80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
1ca90 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
1caa0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1cab0 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
1cac0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1cad0 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
1cae0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
1caf0 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
1cb00 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
1cb10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
1cb20 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
1cb30 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
1cb40 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
1cb50 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
1cb60 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1cb70 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
1cb80 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ault(void);.void
1cb90 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
1cba0 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
1cbb0 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
1cbc0 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73  *)(void));.int s
1cbd0 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
1cbe0 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
1cbf0 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
1cc00 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
1cc10 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
1cc20 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
1cc30 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
1cc40 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
1cc50 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
1cc60 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
1cc70 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
1cc80 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
1cc90 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
1cca0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
1ccb0 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
1ccc0 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
1ccd0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
1cce0 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
1ccf0 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
1cd00 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
1cd10 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
1cd20 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
1cd30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
1cd40 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
1cd50 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1cd60 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
1cd70 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
1cd80 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1cd90 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
1cda0 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
1cdb0 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
1cdc0 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
1cdd0 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73  D,P)       .#els
1cde0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1cdf0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
1ce00 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
1ce10 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
1ce20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1ce30 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
1ce40 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
1ce50 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
1ce60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1ce70 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
1ce80 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1ce90 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
1cea0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1ceb0 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
1cec0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1ced0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
1cee0 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
1cef0 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1cf00 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1cf10 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
1cf20 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1cf30 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1cf40 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
1cf50 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
1cf60 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
1cf70 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1cf80 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
1cf90 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
1cfa0 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
1cfb0 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1cfc0 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
1cfd0 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
1cfe0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1cff0 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
1d000 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
1d010 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
1d020 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
1d030 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
1d040 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  d);.#endif..int 
1d050 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
1d060 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
1d070 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69  lite3StatusAdd(i
1d080 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1d090 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
1d0a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e  int, int);..#ifn
1d0b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1d0c0 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
1d0d0 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
1d0e0 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
1d0f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d100 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
1d110 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
1d120 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
1d130 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  um*, int, const 
1d140 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
1d150 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d160 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20  OMIT_TRACE.void 
1d170 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
1d180 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
1d190 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
1d1a0 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  dif.char *sqlite
1d1b0 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
1d1c0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
1d1d0 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
1d1e0 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
1d1f0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1d200 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20   va_list);.char 
1d210 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66  *sqlite3MAppendf
1d220 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c  (sqlite3*,char*,
1d230 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
1d240 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
1d250 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  LITE_TEST) || de
1d260 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
1d270 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
1d280 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
1d290 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1d2a0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1d2b0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
1d2c0 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
1d2d0 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
1d2e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
1d2f0 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f  if../* Output fo
1d300 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c  rmatting for SQL
1d310 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50  ITE_TESTCTRL_EXP
1d320 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69  LAIN */.#if defi
1d330 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1d340 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a  E_TREE_EXPLAIN).
1d350 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d360 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a  plainBegin(Vdbe*
1d370 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d380 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56  3ExplainPrintf(V
1d390 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
1d3a0 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20  *, ...);.  void 
1d3b0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c  sqlite3ExplainNL
1d3c0 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1d3d0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75  sqlite3ExplainPu
1d3e0 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  sh(Vdbe*);.  voi
1d3f0 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1d400 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  Pop(Vdbe*);.  vo
1d410 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1d420 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a  nFinish(Vdbe*);.
1d430 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d440 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65  plainSelect(Vdbe
1d450 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  *, Select*);.  v
1d460 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d470 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78  inExpr(Vdbe*, Ex
1d480 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
1d490 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c  ite3ExplainExprL
1d4a0 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c  ist(Vdbe*, ExprL
1d4b0 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63  ist*);.  const c
1d4c0 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65  har *sqlite3Vdbe
1d4d0 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65  Explanation(Vdbe
1d4e0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
1d4f0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d500 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  nBegin(X).# defi
1d510 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1d520 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64  nSelect(A,B).# d
1d530 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1d540 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20  lainExpr(A,B).# 
1d550 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1d560 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c  plainExprList(A,
1d570 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
1d580 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68  te3ExplainFinish
1d590 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1d5a0 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74  ite3VdbeExplanat
1d5b0 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  ion(X) 0.#endif.
1d5c0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
1d5d0 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
1d5e0 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
1d5f0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
1d600 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
1d610 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
1d620 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e   char*, ...);.in
1d630 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  t sqlite3Dequote
1d640 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
1d650 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
1d660 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1d670 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
1d680 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
1d690 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1d6a0 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
1d6b0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1d6c0 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
1d6d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1d6e0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
1d6f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
1d700 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
1d710 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
1d720 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
1d730 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
1d740 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
1d750 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
1d760 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
1d770 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
1d780 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
1d790 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1d7a0 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
1d7b0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
1d7c0 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
1d7d0 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
1d7e0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1d7f0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1d800 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
1d810 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
1d820 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
1d830 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1d840 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
1d850 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
1d860 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
1d870 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1d880 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
1d890 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
1d8a0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
1d8b0 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
1d8c0 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
1d8d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d8e0 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
1d8f0 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
1d900 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d910 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
1d920 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
1d930 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
1d940 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
1d950 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1d960 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d970 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
1d980 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1d990 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1d9a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1d9b0 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
1d9c0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
1d9d0 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1d9e0 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
1d9f0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1da00 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1da10 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
1da20 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
1da30 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1da40 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
1da50 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
1da60 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
1da70 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
1da80 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1da90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1daa0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
1dab0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
1dac0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1dad0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
1dae0 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
1daf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1db00 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
1db10 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
1db20 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1db30 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
1db40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1db50 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
1db60 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
1db70 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
1db80 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
1db90 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
1dba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
1dbb0 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
1dbc0 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  se *, int);.void
1dbd0 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61 62   sqlite3StartTab
1dbe0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
1dbf0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
1dc00 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
1dc10 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28  qlite3AddColumn(
1dc20 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
1dc30 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
1dc40 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
1dc50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1dc60 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
1dc70 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
1dc80 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1dc90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1dca0 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
1dcb0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1dcc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1dcd0 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65  ColumnType(Parse
1dce0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
1dcf0 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
1dd00 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
1dd10 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
1dd20 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
1dd30 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
1dd40 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1dd50 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
1dd60 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
1dd70 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1dd80 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f  lite3ParseUri(co
1dd90 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
1dda0 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69  char*,unsigned i
1ddb0 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  nt*,.           
1ddc0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1ddd0 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68  _vfs**,char**,ch
1dde0 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73  ar **);.Btree *s
1ddf0 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74  qlite3DbNameToBt
1de00 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ree(sqlite3*,con
1de10 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
1de20 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50  qlite3CodeOnce(P
1de30 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63  arse *);..Bitvec
1de40 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
1de50 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
1de60 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
1de70 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
1de80 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1de90 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
1dea0 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
1deb0 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
1dec0 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
1ded0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1dee0 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
1def0 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
1df00 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
1df10 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  vec*);.int sqlit
1df20 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
1df30 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a  est(int,int*);..
1df40 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
1df50 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
1df60 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
1df70 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
1df80 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
1df90 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
1dfa0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
1dfb0 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
1dfc0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1dfd0 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
1dfe0 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69 36  *, u8 iBatch, i6
1dff0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1e000 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
1e010 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
1e020 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
1e030 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
1e040 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1e050 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
1e060 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1e070 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1e080 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
1e090 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1e0a0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
1e0b0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1e0c0 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
1e0d0 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
1e0e0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
1e0f0 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
1e100 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  ,B) 0.#endif..vo
1e110 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
1e120 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
1e130 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
1e140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1e150 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
1e160 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1e170 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e180 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
1e190 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
1e1a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e1b0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1e1c0 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
1e1d0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
1e1e0 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
1e1f0 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
1e200 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
1e210 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
1e220 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1e230 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
1e240 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
1e250 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1e260 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1e270 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  X).#endif.int sq
1e280 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69  lite3CodeCorouti
1e290 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ne(Parse*, Selec
1e2a0 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
1e2b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
1e2c0 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
1e2d0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
1e2e0 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
1e2f0 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  t*, int);.void *
1e300 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f  sqlite3ArrayAllo
1e310 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f  cate(sqlite3*,vo
1e320 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  id*,int,int*,int
1e330 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  *);.IdList *sqli
1e340 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28  te3IdListAppend(
1e350 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
1e360 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
1e370 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64  sqlite3IdListInd
1e380 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74  ex(IdList*,const
1e390 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74   char*);.SrcList
1e3a0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
1e3b0 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a  Enlarge(sqlite3*
1e3c0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
1e3d0 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a   int);.SrcList *
1e3e0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
1e3f0 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53  pend(sqlite3*, S
1e400 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
1e410 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73   Token*);.SrcLis
1e420 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1e430 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28  tAppendFromTerm(
1e440 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
1e450 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1e460 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20          Token*, 
1e490 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20  Select*, Expr*, 
1e4a0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
1e4b0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64  qlite3SrcListInd
1e4c0 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20  exedBy(Parse *, 
1e4d0 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e  SrcList *, Token
1e4e0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
1e4f0 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
1e500 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
1e510 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
1e520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
1e530 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
1e540 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
1e550 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
1e560 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
1e570 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
1e580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
1e590 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
1e5a0 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
1e5b0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1e5c0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
1e5d0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
1e5e0 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
1e5f0 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
1e600 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
1e610 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
1e620 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e640 20 20 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 2c 20     Token*, int, 
1e650 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e660 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
1e670 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
1e680 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
1e690 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
1e6a0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
1e6b0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
1e6c0 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
1e6d0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
1e6e0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1e6f0 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
1e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e710 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
1e720 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72  *,u16,Expr*,Expr
1e730 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e740 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
1e750 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
1e760 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
1e770 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
1e780 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
1e790 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
1e7a0 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
1e7b0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
1e7c0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
1e7d0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
1e7e0 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
1e7f0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
1e800 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1e810 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
1e820 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
1e830 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1e840 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
1e850 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
1e860 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
1e870 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
1e880 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  st*,Expr*,Expr*,
1e890 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
1e8a0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
1e8b0 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
1e8c0 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
1e8d0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
1e8e0 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
1e8f0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
1e900 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
1e910 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
1e920 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
1e930 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
1e940 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
1e950 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
1e960 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
1e970 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
1e980 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1e990 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
1e9a0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1e9b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
1e9c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1e9d0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
1e9e0 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
1e9f0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
1ea00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1ea10 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
1ea20 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
1ea30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1ea40 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
1ea50 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1ea60 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1ea70 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
1ea80 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
1ea90 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1eaa0 65 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e 74  ePop(Parse*, int
1eab0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1eac0 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
1ead0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
1eae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1eaf0 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
1eb00 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
1eb10 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
1eb20 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
1eb30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
1eb40 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1eb50 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1eb60 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1eb70 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
1eb80 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1eb90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
1eba0 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
1ebb0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1ebc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1ebd0 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
1ebe0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
1ebf0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ec00 45 78 70 72 43 6f 64 65 43 6f 6e 73 74 61 6e 74  ExprCodeConstant
1ec10 73 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  s(Parse*, Expr*)
1ec20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1ec30 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
1ec40 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
1ec50 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1ec60 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72   sqlite3ExprIfTr
1ec70 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ue(Parse*, Expr*
1ec80 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1ec90 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
1eca0 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70  alse(Parse*, Exp
1ecb0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
1ecc0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
1ecd0 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
1ece0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
1ecf0 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
1ed00 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
1ed10 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20  able(Parse*,int 
1ed20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61  isView,const cha
1ed30 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
1ed40 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1ed50 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
1ed60 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
1ed70 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  w,struct SrcList
1ed80 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
1ed90 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
1eda0 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
1edb0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1edc0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1edd0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
1ede0 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
1edf0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1ee00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
1ee10 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
1ee20 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
1ee30 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
1ee40 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
1ee50 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
1ee60 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
1ee70 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29  har**, sqlite3*)
1ee80 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
1ee90 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
1eea0 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
1eeb0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1eec0 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78  ompare(Expr*, Ex
1eed0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1eee0 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
1eef0 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
1ef00 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
1ef10 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
1ef20 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
1ef30 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
1ef40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1ef50 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
1ef60 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
1ef70 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1ef80 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
1ef90 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
1efa0 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
1efb0 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
1efc0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1efd0 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
1efe0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1eff0 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
1f000 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
1f010 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 65   sqlite3PrngRese
1f020 74 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  tState(void);.vo
1f030 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
1f040 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
1f050 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1f060 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
1f070 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
1f080 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
1f090 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
1f0a0 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
1f0b0 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
1f0c0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
1f0d0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
1f0e0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f0f0 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
1f100 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
1f110 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
1f120 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
1f130 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1f140 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
1f150 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
1f160 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f170 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
1f180 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20  qlite3 *);.void 
1f190 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65  sqlite3LeaveMute
1f1a0 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28  xAndCloseZombie(
1f1b0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
1f1c0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
1f1d0 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
1f1e0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
1f1f0 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
1f200 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1f210 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
1f220 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29  rFunction(Expr*)
1f230 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1f240 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
1f250 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
1f260 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
1f270 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
1f280 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1f290 43 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56  CodeIsNullJump(V
1f2a0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  dbe*, const Expr
1f2b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
1f2c0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
1f2d0 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
1f2e0 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
1f2f0 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
1f300 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
1f310 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
1f320 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
1f330 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
1f340 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1f350 69 6e 74 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  int, Trigger *, 
1f360 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f370 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
1f380 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
1f390 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
1f3a0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f3b0 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
1f3c0 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
1f3d0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
1f3e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
1f3f0 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
1f400 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
1f410 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  le*,int,int,.   
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f440 20 20 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69    int*,int,int,i
1f450 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  nt,int,int*);.vo
1f460 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
1f470 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
1f480 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1f490 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2c   int, int*, int,
1f4a0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
1f4b0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
1f4c0 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
1f4d0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1f4e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f4f0 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
1f500 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
1f510 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1f520 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
1f530 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1f540 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
1f550 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1f560 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
1f570 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
1f580 6e 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nt, char*, int);
1f590 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1f5a0 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
1f5b0 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
1f5c0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
1f5d0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
1f5e0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
1f5f0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
1f600 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
1f610 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
1f620 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
1f630 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
1f640 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
1f650 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
1f660 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
1f670 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
1f680 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63  void sqlite3Func
1f690 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65  DefInsert(FuncDe
1f6a0 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a  fHash*, FuncDef*
1f6b0 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
1f6c0 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
1f6d0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1f6e0 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c  har*,int,int,u8,
1f6f0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
1f700 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
1f710 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
1f720 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
1f730 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
1f740 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
1f750 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1f760 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63  gisterGlobalFunc
1f770 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
1f780 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
1f790 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
1f7a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
1f7b0 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
1f7c0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
1f7d0 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
1f7e0 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
1f7f0 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
1f800 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
1f810 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
1f820 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
1f830 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
1f840 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
1f850 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
1f860 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  xpr*, int);.#end
1f870 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
1f880 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
1f890 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
1f8a0 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
1f8b0 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
1f8c0 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
1f8d0 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
1f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8f0 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
1f900 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
1f910 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
1f920 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
1f930 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
1f940 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1f950 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
1f960 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
1f970 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1f980 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
1f990 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
1f9a0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
1f9b0 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
1f9c0 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
1f9d0 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
1f9e0 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
1f9f0 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
1fa00 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
1fa10 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
1fa20 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1fa30 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
1fa40 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
1fa50 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
1fa60 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
1fa70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
1fa90 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
1faa0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
1fab0 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
1fac0 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
1fad0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
1fae0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
1faf0 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
1fb00 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
1fb10 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
1fb20 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
1fb30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
1fb40 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
1fb50 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
1fb60 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
1fb70 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
1fb80 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
1fb90 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
1fba0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
1fbb0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
1fbc0 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74  InsertStep(sqlit
1fbd0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  e3*,Token*, IdLi
1fbe0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
1fc10 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 75  rList*,Select*,u
1fc20 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
1fc30 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
1fc40 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69  rUpdateStep(sqli
1fc50 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  te3*,Token*,Expr
1fc60 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
1fc70 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
1fc80 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
1fc90 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74  DeleteStep(sqlit
1fca0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  e3*,Token*, Expr
1fcb0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1fcc0 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
1fcd0 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
1fce0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1fcf0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
1fd00 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
1fd10 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1fd20 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  r*);.  u32 sqlit
1fd30 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
1fd40 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a  (Parse*,Trigger*
1fd50 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  ,ExprList*,int,i
1fd60 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  nt,Table*,int);.
1fd70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1fd80 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
1fd90 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
1fda0 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65   ? (p)->pTopleve
1fdb0 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23  l : (p)).#else.#
1fdc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1fdd0 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
1fde0 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
1fdf0 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
1fe00 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
1fe10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
1fe20 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
1fe30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fe40 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1fe50 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
1fe60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
1fe70 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
1fe80 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
1fe90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fea0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
1feb0 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
1fec0 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
1fed0 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
1fee0 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
1fef0 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
1ff00 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
1ff10 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
1ff20 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
1ff30 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
1ff40 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
1ff50 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
1ff60 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
1ff70 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1ff80 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
1ff90 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
1ffa0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
1ffb0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
1ffc0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
1ffd0 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
1ffe0 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
1fff0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
20000 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
20010 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
20020 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
20030 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
20040 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
20050 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
20060 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
20070 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
20080 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
20090 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
200a0 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
200b0 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
200c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
200d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
200e0 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
200f0 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
20100 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
20110 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
20120 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
20130 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
20140 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
20150 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
20160 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
20170 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
20180 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
20190 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
201a0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
201b0 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
201c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
201d0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
201e0 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
201f0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
20200 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
20210 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
20220 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
20230 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
20240 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
20250 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46  lite3FixInit(DbF
20260 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69  ixer*, Parse*, i
20270 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
20280 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
20290 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72  int sqlite3FixSr
202a0 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  cList(DbFixer*, 
202b0 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
202c0 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28  qlite3FixSelect(
202d0 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74  DbFixer*, Select
202e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
202f0 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c  ixExpr(DbFixer*,
20300 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
20310 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28  ite3FixExprList(
20320 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69  DbFixer*, ExprLi
20330 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
20340 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28  3FixTriggerStep(
20350 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65  DbFixer*, Trigge
20360 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c  rStep*);.int sql
20370 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63  ite3AtoF(const c
20380 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c  har *z, double*,
20390 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
203a0 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63  qlite3GetInt32(c
203b0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
203c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
203d0 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  toi(const char*)
203e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
203f0 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
20400 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
20410 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c   nChar);.int sql
20420 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28  ite3Utf8CharLen(
20430 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74  const char *pDat
20440 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75  a, int nByte);.u
20450 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65  32 sqlite3Utf8Re
20460 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a  ad(const u8**);.
20470 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
20480 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
20490 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
204a0 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
204b0 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
204c0 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
204d0 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
204e0 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
204f0 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
20500 2e 63 0a 2a 2a 20 66 69 6c 65 2e 20 20 43 6f 64  .c.** file.  Cod
20510 65 20 73 68 6f 75 6c 64 20 75 73 65 20 74 68 65  e should use the
20520 20 4d 41 43 52 4f 20 66 6f 72 6d 73 20 62 65 6c   MACRO forms bel
20530 6f 77 2c 20 61 73 20 74 68 65 20 56 61 72 69 6e  ow, as the Varin
20540 74 33 32 20 76 65 72 73 69 6f 6e 73 0a 2a 2a 20  t32 versions.** 
20550 61 72 65 20 63 6f 64 65 64 20 74 6f 20 61 73 73  are coded to ass
20560 75 6d 65 20 74 68 65 20 73 69 6e 67 6c 65 20 62  ume the single b
20570 79 74 65 20 63 61 73 65 20 69 73 20 61 6c 72 65  yte case is alre
20580 61 64 79 20 68 61 6e 64 6c 65 64 20 28 77 68 69  ady handled (whi
20590 63 68 20 0a 2a 2a 20 74 68 65 20 4d 41 43 52 4f  ch .** the MACRO
205a0 20 66 6f 72 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a   form does)..*/.
205b0 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
205c0 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
205d0 61 72 2a 2c 20 75 36 34 29 3b 0a 69 6e 74 20 73  ar*, u64);.int s
205e0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
205f0 32 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  2(unsigned char*
20600 2c 20 75 33 32 29 3b 0a 75 38 20 73 71 6c 69 74  , u32);.u8 sqlit
20610 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
20620 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
20630 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
20640 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
20650 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
20660 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
20670 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
20680 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
20690 0a 2a 2a 20 54 68 65 20 68 65 61 64 65 72 20 6f  .** The header o
206a0 66 20 61 20 72 65 63 6f 72 64 20 63 6f 6e 73 69  f a record consi
206b0 73 74 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63  sts of a sequenc
206c0 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
206d0 68 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54  h integers..** T
206e0 68 65 73 65 20 69 6e 74 65 67 65 72 73 20 61 72  hese integers ar
206f0 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20  e almost always 
20700 73 6d 61 6c 6c 20 61 6e 64 20 61 72 65 20 65 6e  small and are en
20710 63 6f 64 65 64 20 61 73 20 61 20 73 69 6e 67 6c  coded as a singl
20720 65 20 62 79 74 65 2e 0a 2a 2a 20 54 68 65 20 66  e byte..** The f
20730 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
20740 74 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 74  take advantage t
20750 68 69 73 20 66 61 63 74 20 74 6f 20 70 72 6f 76  his fact to prov
20760 69 64 65 20 61 20 66 61 73 74 20 65 6e 63 6f 64  ide a fast encod
20770 65 0a 2a 2a 20 61 6e 64 20 64 65 63 6f 64 65 20  e.** and decode 
20780 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 73 20  of the integers 
20790 69 6e 20 61 20 72 65 63 6f 72 64 20 68 65 61 64  in a record head
207a0 65 72 2e 20 20 49 74 20 69 73 20 66 61 73 74 65  er.  It is faste
207b0 72 20 66 6f 72 20 74 68 65 20 63 6f 6d 6d 6f 6e  r for the common
207c0 0a 2a 2a 20 63 61 73 65 20 77 68 65 72 65 20 74  .** case where t
207d0 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 61 20  he integer is a 
207e0 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 49 74  single byte.  It
207f0 20 69 73 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f   is a little slo
20800 77 65 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  wer when the.** 
20810 69 6e 74 65 67 65 72 20 69 73 20 74 77 6f 20 6f  integer is two o
20820 72 20 6d 6f 72 65 20 62 79 74 65 73 2e 20 20 42  r more bytes.  B
20830 75 74 20 6f 76 65 72 61 6c 6c 20 69 74 20 69 73  ut overall it is
20840 20 66 61 73 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54   faster..**.** T
20850 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70  he following exp
20860 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75  ressions are equ
20870 69 76 61 6c 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20  ivalent:.**.**  
20880 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 47 65     x = sqlite3Ge
20890 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 26 42  tVarint32( A, &B
208a0 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73   );.**     x = s
208b0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33  qlite3PutVarint3
208c0 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a  2( A, B );.**.**
208d0 20 20 20 20 20 78 20 3d 20 67 65 74 56 61 72 69       x = getVari
208e0 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a  nt32( A, B );.**
208f0 20 20 20 20 20 78 20 3d 20 70 75 74 56 61 72 69       x = putVari
20900 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a 2a 2a  nt32( A, B );.**
20910 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
20920 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
20930 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38    (u8)((*(A)<(u8
20940 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32  )0x80)?((B)=(u32
20950 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33  )*(A)),1:sqlite3
20960 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  GetVarint32((A),
20970 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
20980 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
20990 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
209a0 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29  (((u32)(B)<(u32)
209b0 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73  0x80)?(*(A)=(uns
209c0 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
209d0 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74  1:\.  sqlite3Put
209e0 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 42 29  Varint32((A),(B)
209f0 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  )).#define getVa
20a00 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47  rint    sqlite3G
20a10 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65  etVarint.#define
20a20 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71   putVarint    sq
20a30 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a  lite3PutVarint..
20a40 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
20a50 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
20a60 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64  yStr(Vdbe *, Ind
20a70 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ex *);.void sqli
20a80 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79  te3TableAffinity
20a90 53 74 72 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  Str(Vdbe *, Tabl
20aa0 65 20 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  e *);.char sqlit
20ab0 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74  e3CompareAffinit
20ac0 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  y(Expr *pExpr, c
20ad0 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73  har aff2);.int s
20ae0 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
20af0 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70  ityOk(Expr *pExp
20b00 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69  r, char idx_affi
20b10 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69  nity);.char sqli
20b20 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28  te3ExprAffinity(
20b30 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
20b40 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  t sqlite3Atoi64(
20b50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
20b60 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  *, int, u8);.voi
20b70 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
20b80 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
20b90 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
20ba0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
20bb0 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
20bc0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
20bd0 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
20be0 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
20bf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
20c00 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
20c10 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
20c20 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
20c30 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
20c40 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
20c50 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
20c60 54 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69  T) || \.    defi
20c70 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
20c80 5f 4f 53 5f 54 52 41 43 45 29 0a 63 6f 6e 73 74  _OS_TRACE).const
20c90 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
20ca0 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64  rName(int);.#end
20cb0 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  if..const char *
20cc0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
20cd0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
20ce0 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20  eadSchema(Parse 
20cf0 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65  *pParse);.CollSe
20d00 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f  q *sqlite3FindCo
20d10 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75  llSeq(sqlite3*,u
20d20 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61  8 enc, const cha
20d30 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71  r*,int);.CollSeq
20d40 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43   *sqlite3LocateC
20d50 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
20d60 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
20d70 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71  *zName);.CollSeq
20d80 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c   *sqlite3ExprCol
20d90 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
20da0 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29  se, Expr *pExpr)
20db0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
20dc0 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b  xprAddCollateTok
20dd0 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  en(Parse *pParse
20de0 2c 20 45 78 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29  , Expr*, Token*)
20df0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
20e00 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
20e10 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
20e20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
20e30 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
20e40 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
20e50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
20e60 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73  heckCollSeq(Pars
20e70 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b  e *, CollSeq *);
20e80 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
20e90 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73  kObjectName(Pars
20ea0 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e *, const char 
20eb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
20ec0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73  VdbeSetChanges(s
20ed0 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a  qlite3 *, int);.
20ee0 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
20ef0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
20f00 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  nt sqlite3SubInt
20f10 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
20f20 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  t sqlite3MulInt6
20f30 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
20f40 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
20f50 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  (int);.#ifdef SQ
20f60 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
20f70 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74  NAMES.void sqlit
20f80 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f  e3FileSuffix3(co
20f90 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a  nst char*, char*
20fa0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
20fb0 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  e sqlite3FileSuf
20fc0 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66  fix3(X,Y).#endif
20fd0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f  .u8 sqlite3GetBo
20fe0 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72  olean(const char
20ff0 20 2a 7a 2c 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74   *z,int);..const
21000 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
21010 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
21020 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
21030 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
21040 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
21050 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
21060 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
21070 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
21080 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
21090 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20  *,u8, .         
210a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
210b0 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
210c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
210d0 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
210e0 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
210f0 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
21100 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
21110 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  ;.char *sqlite3U
21120 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
21130 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
21140 69 6e 74 2c 20 75 38 29 3b 0a 23 69 66 64 65 66  int, u8);.#ifdef
21150 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
21160 54 41 54 33 0a 63 68 61 72 20 2a 73 71 6c 69 74  TAT3.char *sqlit
21170 65 33 55 74 66 38 74 6f 31 36 28 73 71 6c 69 74  e3Utf8to16(sqlit
21180 65 33 20 2a 2c 20 75 38 2c 20 63 68 61 72 20 2a  e3 *, u8, char *
21190 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 23  , int, int *);.#
211a0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
211b0 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
211c0 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
211d0 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
211e0 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
211f0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
21200 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
21210 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
21220 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
21230 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
21240 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
21250 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
21260 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
21270 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
21280 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
21290 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
212a0 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
212b0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
212c0 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
212d0 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
212e0 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
212f0 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
21300 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
21310 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
21320 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
21330 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  g;.extern SQLITE
21340 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68  _WSD FuncDefHash
21350 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75   sqlite3GlobalFu
21360 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
21370 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
21380 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
21390 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
213a0 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f  #endif.#endif.vo
213b0 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
213c0 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
213d0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
213e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
213f0 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
21400 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
21410 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
21420 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
21430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
21440 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
21450 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
21460 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
21470 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
21480 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
21490 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
214a0 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
214b0 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
214c0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
214d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
214e0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
214f0 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  nts(sqlite3*);.i
21500 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
21510 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c  bselect(Parse *,
21520 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   Expr *, int, in
21530 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21540 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65  SelectPrep(Parse
21550 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
21560 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  Context*);.int s
21570 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e  qlite3MatchSpanN
21580 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ame(const char*,
21590 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
215a0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
215b0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
215c0 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e  ite3ResolveExprN
215d0 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
215e0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
215f0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
21600 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a  lectNames(Parse*
21610 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
21620 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
21630 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65  lite3ResolveOrde
21640 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
21650 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69   Select*, ExprLi
21660 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
21670 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
21680 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62  olumnDefault(Vdb
21690 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  e *, Table *, in
216a0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
216b0 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68  lite3AlterFinish
216c0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
216d0 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
216e0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65  d sqlite3AlterBe
216f0 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ginAddColumn(Par
21700 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29  se *, SrcList *)
21710 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
21720 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72  e3GetCollSeq(Par
21730 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71  se*, u8, CollSeq
21740 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29   *, const char*)
21750 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66  ;.char sqlite3Af
21760 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74  finityType(const
21770 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
21780 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72  lite3Analyze(Par
21790 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
217a0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
217b0 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c  3InvokeBusyHandl
217c0 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29  er(BusyHandler*)
217d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
217e0 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
217f0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
21800 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c  e3FindDbName(sql
21810 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
21820 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
21830 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
21840 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
21850 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
21860 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73  leteIndexSamples
21870 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a  (sqlite3*,Index*
21880 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
21890 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64  efaultRowEst(Ind
218a0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
218b0 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
218c0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
218d0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
218e0 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f  te3IsLikeFunctio
218f0 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  n(sqlite3*,Expr*
21900 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f  ,int*,char*);.vo
21910 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75  id sqlite3Minimu
21920 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73  mFileFormat(Pars
21930 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
21940 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
21950 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
21960 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
21970 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
21980 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
21990 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
219a0 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
219b0 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
219c0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49  eyInfo *sqlite3I
219d0 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50 61 72 73  ndexKeyinfo(Pars
219e0 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69  e *, Index *);.i
219f0 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
21a00 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
21a10 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
21a20 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20  t, int, void *, 
21a30 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
21a40 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
21a50 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
21a60 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
21a70 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
21a80 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
21a90 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28  e **), void (*)(
21aa0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
21ab0 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  ),.  FuncDestruc
21ac0 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
21ad0 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  .);.int sqlite3A
21ae0 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
21af0 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
21b00 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
21b10 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
21b20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
21b30 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
21b40 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c  um*, char*, int,
21b50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21b60 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
21b70 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  d(StrAccum*,cons
21b80 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f  t char*,int);.vo
21b90 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64  id sqlite3Append
21ba0 53 70 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c  Space(StrAccum*,
21bb0 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
21bc0 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
21bd0 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
21be0 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
21bf0 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d  umReset(StrAccum
21c00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21c10 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
21c20 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
21c30 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
21c40 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
21c50 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
21c60 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
21c70 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
21c80 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
21c90 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
21ca0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
21cb0 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
21cc0 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
21cd0 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
21ce0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
21cf0 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
21d00 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
21d10 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  er.*/.void *sqli
21d20 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
21d30 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29  oid*(*)(size_t))
21d40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
21d50 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20  rserFree(void*, 
21d60 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
21d70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
21d80 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ser(void*, int, 
21d90 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a  Token, Parse*);.
21da0 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
21db0 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e  XSTACKDEPTH.  in
21dc0 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53  t sqlite3ParserS
21dd0 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b  tackPeak(void*);
21de0 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
21df0 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74  lite3AutoLoadExt
21e00 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  ensions(sqlite3*
21e10 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
21e20 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
21e30 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  NSION.  void sql
21e40 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
21e50 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
21e60 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21e70 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
21e80 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ions(X).#endif..
21e90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21ea0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
21eb0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
21ec0 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a  ableLock(Parse *
21ed0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20  , int, int, u8, 
21ee0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23  const char *);.#
21ef0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
21f00 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
21f10 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69  v,w,x,y,z).#endi
21f20 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
21f30 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69  _TEST.  int sqli
21f40 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67  te3Utf8To8(unsig
21f50 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  ned char*);.#end
21f60 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
21f70 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
21f80 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71  BLE.#  define sq
21f90 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59  lite3VtabClear(Y
21fa0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
21fb0 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29  te3VtabSync(X,Y)
21fc0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
21fd0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21fe0 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64  Rollback(X).#  d
21ff0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
22000 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65  bCommit(X).#  de
22010 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
22020 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20  InSync(db) 0.#  
22030 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
22040 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65  abLock(X) .#  de
22050 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
22060 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
22070 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
22080 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
22090 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
220a0 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
220b0 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
220c0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
220d0 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
220e0 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
220f0 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
22100 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
22110 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
22120 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
22130 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
22140 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
22150 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
22160 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
22170 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72  qlite3 *db, char
22180 20 2a 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c   **);.   int sql
22190 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
221a0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
221b0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
221c0 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
221d0 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
221e0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
221f0 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
22200 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
22210 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
22220 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
22230 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
22240 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
22250 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
22260 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
22270 74 2c 20 69 6e 74 29 3b 0a 20 20 20 56 54 61 62  t, int);.   VTab
22280 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
22290 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
222a0 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e  able*);.#  defin
222b0 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
222c0 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
222d0 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
222e0 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
222f0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
22300 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
22310 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
22320 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
22330 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
22340 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
22350 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
22360 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
22370 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
22380 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
22390 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
223a0 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
223b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
223c0 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
223d0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
223e0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
223f0 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
22400 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
22410 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
22420 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
22430 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
22440 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
22450 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
22460 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
22470 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
22480 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
22490 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
224a0 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
224b0 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
224c0 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
224d0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
224e0 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
224f0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
22500 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
22510 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
22520 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
22530 5f 76 61 6c 75 65 2a 2a 29 3b 0a 69 6e 74 20 73  _value**);.int s
22540 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
22550 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
22560 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
22570 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
22580 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
22590 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
225a0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
225b0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
225c0 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
225d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
225e0 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
225f0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
22600 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
22610 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
22620 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
22630 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
22640 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
22650 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
22660 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
22670 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
22680 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
22690 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
226a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
226b0 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
226c0 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
226d0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
226e0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
226f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
22700 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
22710 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
22720 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
22730 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
22740 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
22750 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
22760 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
22770 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
22780 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
22790 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
227a0 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
227b0 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
227c0 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
227d0 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
227e0 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
227f0 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
22800 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
22810 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
22820 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
22830 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
22840 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
22850 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
22860 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
22870 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
22880 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
22890 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
228a0 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
228b0 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
228c0 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
228d0 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
228e0 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
228f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
22900 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
22910 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22920 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
22930 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
22940 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
22950 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
22960 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
22970 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
22980 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
22990 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
229a0 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
229b0 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
229c0 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  *, int);.  int s
229d0 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
229e0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
229f0 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75   int*, int);.  u
22a00 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  32 sqlite3FkOldm
22a10 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ask(Parse*, Tabl
22a20 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c  e*);.  FKey *sql
22a30 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
22a40 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65  (Table *);.#else
22a50 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
22a60 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c  e3FkActions(a,b,
22a70 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65 20 73  c,d).  #define s
22a80 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
22a90 62 2c 63 2c 64 29 0a 20 20 23 64 65 66 69 6e 65  b,c,d).  #define
22aa0 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
22ab0 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
22ac0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
22ad0 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
22ae0 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
22af0 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
22b00 62 2c 63 2c 64 29 20 30 0a 23 65 6e 64 69 66 0a  b,c,d) 0.#endif.
22b10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22b20 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
22b30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
22b40 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a  Delete(sqlite3 *
22b50 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74  , Table*);.  int
22b60 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
22b70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62  Index(Parse*,Tab
22b80 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a  le*,FKey*,Index*
22b90 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a  *,int**);.#else.
22ba0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22bb0 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20  3FkDelete(a,b). 
22bc0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22bd0 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c  FkLocateIndex(a,
22be0 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a  b,c,d,e).#endif.
22bf0 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c  ../*.** Availabl
22c00 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72  e fault injector
22c10 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75  s.  Should be nu
22c20 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67  mbered beginning
22c30 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66   with 0..*/.#def
22c40 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
22c50 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20  INJECTOR_MALLOC 
22c60 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51      0.#define SQ
22c70 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
22c80 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a  OR_COUNT      1.
22c90 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
22ca0 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65  face to the code
22cb0 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64   in fault.c used
22cc0 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67   for identifying
22cd0 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c   "benign".** mal
22ce0 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68  loc failures. Th
22cf0 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65  is is only prese
22d00 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49  nt if SQLITE_OMI
22d10 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a  T_BUILTIN_TEST.*
22d20 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64  * is not defined
22d30 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
22d40 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
22d50 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c  _TEST.  void sql
22d60 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
22d70 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
22d80 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
22d90 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
22da0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
22db0 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
22dc0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
22dd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
22de0 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
22df0 23 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65 20  #endif..#define 
22e00 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
22e10 20 20 20 20 20 20 20 20 20 31 0a 23 64 65 66 69           1.#defi
22e20 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
22e30 20 20 20 20 20 20 20 20 20 20 20 20 32 0a 23 64              2.#d
22e40 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
22e50 4e 44 45 58 5f 41 53 43 20 20 20 20 20 20 20 33  NDEX_ASC       3
22e60 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
22e70 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 20  X_INDEX_DESC    
22e80 20 20 34 0a 69 6e 74 20 73 71 6c 69 74 65 33 46    4.int sqlite3F
22e90 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65  indInIndex(Parse
22ea0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a   *, Expr *, int*
22eb0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
22ec0 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
22ed0 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
22ee0 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
22ef0 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
22f00 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
22f10 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
22f20 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
22f30 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
22f40 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
22f50 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
22f60 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
22f70 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e  e3_file *);.  in
22f80 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
22f90 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66  Exists(sqlite3_f
22fa0 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20  ile *p);.#else. 
22fb0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22fc0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73  JournalSize(pVfs
22fd0 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46  ) ((pVfs)->szOsF
22fe0 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ile).  #define s
22ff0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
23000 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a  sts(p) 1.#endif.
23010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
23020 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
23030 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
23040 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
23050 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
23060 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
23070 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
23080 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49  le *);..#if SQLI
23090 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
230a0 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  H>0.  void sqlit
230b0 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28  e3ExprSetHeight(
230c0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
230d0 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73  xpr *p);.  int s
230e0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
230f0 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29  Height(Select *)
23100 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45  ;.  int sqlite3E
23110 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50  xprCheckHeight(P
23120 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  arse*, int);.#el
23130 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
23140 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
23150 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  t(x,y).  #define
23160 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
23170 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
23180 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
23190 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
231a0 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
231b0 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
231c0 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
231d0 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
231e0 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
231f0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
23200 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
23210 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
23220 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
23230 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
23240 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
23250 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
23260 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
23270 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
23280 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
23290 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
232a0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
232b0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
232c0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
232d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
232e0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
232f0 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
23300 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
23310 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
23320 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
23330 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
23340 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
23350 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
23360 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
23370 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
23380 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
23390 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
233a0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
233b0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
233c0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
233d0 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
233e0 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
233f0 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
23400 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f  ng messages. .*/
23410 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
23420 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
23430 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
23440 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
23450 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
23460 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
23470 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
23480 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
23490 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  ;.SQLITE_EXTERN 
234a0 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f  void (*sqlite3Io
234b0 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
234c0 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
234d0 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
234e0 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
234f0 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
23500 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
23510 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
23520 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
23530 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
23540 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
23550 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
23560 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
23570 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
23580 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
23590 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
235a0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
235b0 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
235c0 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
235d0 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
235e0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
235f0 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
23600 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
23610 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
23620 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
23630 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
23640 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
23650 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
23660 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
23670 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
23680 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
23690 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
236a0 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
236b0 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
236c0 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
236d0 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
236e0 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
236f0 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
23700 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
23710 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
23720 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
23730 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
23740 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
23750 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
23760 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
23770 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
23780 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
23790 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
237a0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
237b0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
237c0 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
237d0 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
237e0 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
237f0 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
23800 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
23810 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
23820 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
23830 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
23840 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
23850 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
23860 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
23870 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
23880 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
23890 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
238a0 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
238b0 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
238c0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
238d0 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
238e0 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
238f0 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
23900 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
23910 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
23920 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
23930 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
23940 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
23950 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
23960 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
23970 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
23980 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
23990 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
239a0 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
239b0 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
239c0 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
239d0 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
239e0 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
239f0 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
23a00 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c  aint. .**.** All
23a10 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
23a20 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
23a30 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
23a40 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
23a50 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
23a60 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
23a70 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
23a80 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
23a90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
23aa0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
23ab0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
23ac0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
23ad0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
23ae0 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
23af0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
23b00 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
23b10 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
23b20 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
23b30 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
23b40 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
23b50 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
23b60 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
23b70 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
23b80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
23b90 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
23ba0 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
23bb0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
23bc0 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
23bd0 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
23be0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
23bf0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
23c00 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
23c10 20 4d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   Might have been
23c20 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72   lookaside memor
23c30 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  y */.#define MEM
23c40 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20  TYPE_SCRATCH    
23c50 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68  0x04  /* Scratch
23c60 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
23c70 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
23c80 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20  PCACHE     0x08 
23c90 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61   /* Page cache a
23ca0 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
23cb0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42  efine MEMTYPE_DB
23cc0 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 2f           0x10  /
23cd0 2a 20 55 73 65 73 20 73 71 6c 69 74 65 33 44 62  * Uses sqlite3Db
23ce0 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69  Malloc, not sqli
23cf0 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65  te_malloc */..#e
23d00 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49  ndif /* _SQLITEI
23d10 4e 54 5f 48 5f 20 2a 2f 0a                       NT_H_ */.